diff --git a/.gitignore b/.gitignore
index d81e9288..4a0344c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,9 @@
## Generated Files
#############
+temporary-test-dir/
dist/
+build/
#############
## Node
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 00000000..acd405b1
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+8.6.0
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 00000000..cce02790
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+package.json
+package-lock.json
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 00000000..789ac2e5
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,5 @@
+{
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 00000000..f4c66ed6
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,76 @@
+language: node_js
+sudo: false
+install:
+ - echo 'skip installation'
+
+jobs:
+ include:
+ - stage: Testing dev-toolkit...
+ env: Run feature-tests
+ script:
+ - cd feature-tests
+ - npm install
+ - npm run test
+
+ - stage: Testing dev-toolkit...
+ env: Test bootstrapping the project
+ script:
+ - npm install
+ - npm run bootstrap
+
+ - stage: Testing dev-toolkit...
+ env: Lint feature-tests
+ script:
+ - cd feature-tests
+ - npm install
+ - npm run lint
+
+ - stage: Testing dev-toolkit...
+ env: Lint packages
+ script:
+ - cd packages/babel-preset-dev-toolkit
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd packages/babel-runner
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd packages/dev-toolkit
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd packages/eslint-config-dev-toolkit
+ - npm install
+ - npm run lint
+
+ - stage: Testing dev-toolkit...
+ env: Lint templates
+ script:
+ - cd templates/standard
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd templates/with-eslint
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd templates/with-sass
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd templates/minimal
+ - npm install
+ - npm run lint
+ - cd ../..
+
+ - cd templates/serverless
+ - npm install
+ - npm run lint
+ - cd ../..
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 00000000..19bd418c
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1 @@
+* @stoikerty
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ea201928..c0209248 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,21 +1,14 @@
-# How to contribute
-Thanks for wanting to help improve the toolkit! ๐
- Below are some instructions to get you started.
+# Installation
+```bash
+# use the correct node version for this project
+nvm use
-### Installation
-First, let's install and link the `dev-toolkit`. The repo contains multiple packages & [lerna](https://github.com/lerna/lerna) is the tool of choice to handle these. Have a look at the root `package.json`-file for a list of all used `npm run` commands. For the basics, you'll want to:
-- git clone [**`dev-toolkit`**](https://github.com/stoikerty/dev-toolkit) repo into a folder (example: `repos/local_modules/dev-toolkit`)
-- run `npm install` to install lerna, then run `npm run install` all the dependencies for all packages and cross-link them. You might have to run the second command with elevated privileges (`sudo`) if you encounter any issues. The installation will take a bit of time โ๏ธ Don't worry it's not stuck, `lerna` just doesn't display the installation output.
-- You now have the `dev-toolkit`-command available to you. Try using the command `dev-toolkit -v`.
-- If not available, use can either try linking the packages directly by using `npm run link` or retrying the previous step with `sudo`.
-- You might also want to link a package to your project specifically by running `npm link dev-toolkit` or `npm link dynamic-pages` inside your project folder.
+# clone repo, inside the repo folder run
+npm i && npm run boostrap
-Preparation done.
+# if you encounter permission issues, try this in the repo foler
+npm run fix-permissions
+```
-### Development
-This is very much an iteration phase, you'll encounter mystical errors that you'll have to fix, caching problems and whatnot. Feel free to ask a question in [the dev-toolkit chat](https://gitter.im/stoikerty/dev-toolkit) if you're stuck. Good luck! ๐
-- inside the `dev-toolkit` folder, run `npm run watch` to convert all ES2015+ files into ES5
-- Now you're ready to use the toolkit via the command `dev-toolkit`.
-- Follow the instructions in the [Readme](/Readme.md) to create a new project
-- make changes to toolkit & document what you did
-- make a PR with suggestions?
+# Making changes
+When you make a change inside `packages` you need to run `npm run boostrap` to install, build & link the packages together. This will also link the packages with all the templates. If you only make changes in the `templates`-folder, it's unlikely you'll have to re-run bootstrap.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index f85c5ed0..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,15 +0,0 @@
-ISC License
-
-Copyright (c) 2016, Jorge Antunes
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
-IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/README.md b/README.md
deleted file mode 100644
index 6a19d9a3..00000000
--- a/README.md
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
- Jump-start your react
-powered Web App.
- dynamic pages
- sass & css-modules
- server-rendering
- hot-reload
-
-
-## Try out the latest beta ๐
-Version 6 will be less opinionated and useful for more use-cases such as serverless. I'm looking to release v6 before the end of 2017.
-
-Please try it out and post feedback in https://github.com/stoikerty/dev-toolkit/pull/39 or open an issue.
-
-Latest beta version: `dev-toolkit@6.0.0-beta-44`
-```bash
-# Install the latest version
-npm install -g dev-toolkit@6.0.0-beta-44
-
-# Initialize a project. Optional name, template, comments
-dev-toolkit init [my_project] [--template template_name] [--skipComments]
-```
-
-*Available templates:*
-- `minimal` - done & ready
-- `standard` - done & ready (default)
-- `with-sass` - done but you might encounter bugs
-- `serverless` - in progress
-
----
-
-## Create a new project
-```bash
-# install & initialize new app
-npm install -g dev-toolkit
-dev-toolkit --init my_app
-cd my_app
-```
-```
-# run it via npm scripts
-npm run dev
-# or run it directly (-w or --watch)
-dev-toolkit --watch
-```
-
-This will give you the following structure to work with:
-```
-src
-โโโ client
-โ โโโ app.js
-โ โโโ ...
-โโโ server
- โโโ ...
-```
-
-## Generate a static build
-```bash
-# Create `build`-folder with compiled files (-b or --build)
-dev-toolkit --build
-```
-- removes previous `build`-folder
-- automatically uses production-builds of React and Redux
-- allows for a [custom vendor-bundle](#define-what-modules-are-bundled-into-vendorjs)
-- extracts css from individual modules
-- hashes assets, including `jpg`, `png`, `gif` & `svg`-files
-
-### Verify build
-Verify if static build is working correctly.
-```bash
-# Runs a minimal server that serves the build folder (--static or --serve-static)
-dev-toolkit --serve-static
-```
-
-### Generate a static build with dynamic pages
-
-To make use of dynamic pages and components for making your app load faster use the extended build command.
-
-**For advanced users only**, [refer to this gist](https://gist.github.com/stoikerty/40a668e8fd4e2919034fd1eed2252bcb) for information on how to implement it.
-```bash
-# This will create an index-file for each dynamic route (-d --dynamic or --build --dynamic)
-dev-toolkit --build --dynamic
-```
-- html is pre-rendered and inserted into the body
-- creates multiple js-bundles, one for each dynamic page
-- each `index.html` contains a `script`-link to the `app` bundle and the page-bundle
-- scripts use `async` and `defer`-attributes as appropriate
-- each subsequent page can be pre-cached and loaded on demand
-
-## Setting up tests
-You'll need to import the webpack config for running tests, [refer to this gist](https://gist.github.com/stoikerty/a202280147910b63a20e167dc4778fb8) for the setup. You'll be able to write your tests in ES2015, just like the rest of your app. Single tests can also be run in a watch-mode with the `npm run test-single`-command.
-
-## Use server with server-side rendering
-
-You can use your project as an universal/isomorphic server-side-rendered app. **For advanced users only.**
-```bash
-# Compile and run `src/server/app` (-s or --serve)
-dev-toolkit --serve
-```
-
-## Misc
-
-#### Check version
-```bash
-# Check Version (-v or --version)
-dev-toolkit -v
-```
-
-#### Define what modules are bundled into `vendor.js`
-```js
-// in your package.json, add `vendor` in `toolkitSettings` section
-"toolkitSettings": {
- "vendor": [
- "react",
- "react-dom",
- "react-router"
- ]
-},
-```
-
-#### Define what environment variables are available on client
-```js
-// In your package.json, add `sharedEnvs` in `toolkitSettings` section.
-// The named variables will be available on the client via an exposed global `buildSettings.env`
-"toolkitSettings": {
- "sharedEnvs": [
- "NODE_ENV",
- "API_DOMAIN"
- ]
-},
-```
-
-## Features
-
-##### Compatibility
-
-- Multiplatform: Windows, OSX, Linux
-- Node.js `last tested version 5.10.1`
-- NPM `last tested version 3.8.3`
-
-##### Javascript Basics
-
-- [React]
-- [ES2015 / ES6]
-- [root-relative imports with `src/...`]
-- [ESLint]
-
-##### Developer Convenience
-
-- [Browsersync]
-- [Vanilla HMR, webpack's hot-reload]
-- [jsx-control-statements]
-- [`transform-class-properties` support]
-- automatic asset-hashing during build, custom `vendor.js`
-- support for various file-formats: `css`, `scss` `js`, `jsx`, `json` `jpg`, `png`, `gif`, `svg`
-
-##### Powerful CSS Tools
-
-- [Autoprefixer]
-- [sass / scss]
-- [css-modules]
-
-##### Server-tools for Universal Apps
-
-- your own server app in `src/server/app`
-- [powered by express]
-- [react-router]
-
-[ES2015 / ES6]: https://babeljs.io/docs/learn-es2015/
-[`transform-class-properties` support]: https://babeljs.io/docs/plugins/transform-class-properties/
-[root-relative imports with `src/...`]: http://survivejs.com/webpack/requiring-files/
-[Vanilla HMR, webpack's hot-reload]: https://webpack.github.io/docs/hot-module-replacement-with-webpack.html
-[Browsersync]: https://browsersync.io/
-[ESLint]: http://eslint.org/
-[React]: https://facebook.github.io/react/
-[jsx-control-statements]: https://github.com/AlexGilleran/jsx-control-statements
-[sass / scss]: http://sass-lang.com/
-[css-modules]: https://github.com/css-modules/css-modules
-[Autoprefixer]: https://github.com/postcss/autoprefixer
-[powered by express]: http://expressjs.com/
-[react-router]: https://github.com/reactjs/react-router
-
-
-## FAQ
-- *I get an NPM warning after `--init` about `eslint-import-resolver`.*
-
-The package doesn't know that we're using webpack via the dev-toolkit and since webpack is not present in the dependencies, it throws an `UNMET PEER DEPENDENCY`-warning.
-
-- *The `dev-toolkit`-package is not part of the dependencies of the starting point I created with `--init`.*
-
-Since you already installed `dev-toolkit` globally, it would be easier to work on multiple projects without reinstalling the `dev-toolkit`-dependencies for each project. This way when you update the toolkit with `npm install -g dev-toolkit@version`, all your projects are updated as well.
-
-You can of course still pin your project with a specific version of the toolkit by running `npm install --save-dev dev-toolkit` inside your project folder.
-
----
-
-
-
-**Questions? Bugs? Suggestions?** Create [a new issue](https://github.com/stoikerty/dev-toolkit/issues/new) or submit a PR! Check out [the Contributing Guidelines](/CONTRIBUTING.md) for information on how to work on the toolkit itself.
-
----
-
-kindly supported by BrowserStack .
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 00000000..d1a9e138
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,85 @@
+dev-toolkit
+
+Jump-start your react
-powered Universal App
+Designed for Veterans
+
+
+
+`dev-toolkit` provides you with an easy and quick way to get started with a pre-rendered &
+server-rendered app. After creating your starting point with the `init` command, you get full
+customizeability out of the box.
+
+[![Travis branch](https://img.shields.io/travis/stoikerty/dev-toolkit/master.svg?style=flat-square)](https://github.com/stoikerty/dev-toolkit)
+[![npm](https://img.shields.io/npm/v/dev-toolkit.svg?style=flat-square)](https://www.npmjs.com/package/dev-toolkit)
+[![npm](https://img.shields.io/npm/dm/dev-toolkit.svg?style=flat-square)](https://www.npmjs.com/package/dev-toolkit)
+[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
+[![Twitter](https://img.shields.io/twitter/url/https/github.com/stoikerty/dev-toolkit.svg?style=social)](https://twitter.com/intent/tweet?text=An%20easy%20and%20quick%20way%20to%20start%20a%20pre-rendered%20and%20server-rendered%20%23react%20app!%20https%3A%2F%2Fgithub.com%2Fstoikerty%2Fdev-toolkit)
+
+### Quick Start
+
+```bash
+$ npm install -g dev-toolkit
+```
+
+```bash
+# Initialize a project with optional name, template, comments
+# The comments explain how the `dev-toolkit` works with the template
+$ dev-toolkit init [project_name] [--template template_name] [--skip-comments]
+```
+
+#### List of available templates
+
+* `standard` (default)
+* `with-eslint`
+* `with-sass`
+
+## Features
+
+* hot-reload on client by default
+* server-rendering
+* pre-rendering
+* creating a build
+* custom webpack config
+* use environment variables on client
+
+### No CSS by default
+
+With CSS-in-JS solutions on the rise, it would be unwise to include dependencies for css-modules,
+sass or less in every project that has `dev-toolkit` as a dependency which would introduce
+additional installation time and bloat. The aim of dev-toolkit is to be unopinionated so that it can
+be useful in many scenarios.
+
+## Contributing
+
+Check out the project locally & create a PR.
+
+```bash
+# Clone down the repo locally
+$ git clone git@github.com:stoikerty/dev-toolkit.git
+
+# Install root lerna dependencies
+$ cd dev-toolkit
+$ npm install
+
+# Bootstrap all packages
+$ npm run bootstrap
+# If you encounter linux/osx permission issues, try this
+$ npm run bootstrap-fix
+
+# Run feature tests
+$ cd feature-tests
+$ npm install
+$ npm run test
+```
+
+Your workflow will likely be to `cd` into a template of your choice in the `templates` directory
+where you can test `dev-toolkit` and in parallel (in a separate terminal) re-run the
+`bootstrap`-command in the root of the project after making changes in one of the `packages`.
+
+### Roadmap
+
+* Improved docs
+* Using your own (external) template - under consideration
+* Eject feature - under consideration
+* serverless template - in development
+* list differences between dev-toolkit, next.js & create-react-app
diff --git a/documentation (wip)/choices-made.md b/documentation (wip)/choices-made.md
new file mode 100644
index 00000000..ea3c8ce3
--- /dev/null
+++ b/documentation (wip)/choices-made.md
@@ -0,0 +1,41 @@
+# Choices made in this project
+
+## Universal Usage
+Pre-Rendering & Server-rendering is central to `dev-toolkit`. By default pre-rendering is enabled, because of the massive performance gains that can be achieved using it. If you only use server-rendering on a per-request basis, you can disable pre-rendering entirely [using `dev-toolkit.config.js`](#link-extending).
+
+Server-rendering itself is a complicated topic since any of the code used on the client can and will also be run on the server. Doing so introduces a great amount of moving parts and in order for any starting point to be truly useful, the essential parts of the server-rendering aspect [are exposed in different ways](#link-how-it-works).
+
+## Simplicity
+Although universal usage...
+
+## Usefulness
+
+## Reducing or eliminating lock-in
+
+## Prescribed by dev-toolkit
+- universal usage
+
+## Prescribed by template starting points
+- src/client - all client-related files
+- src/server - all server-related files
+- src/settings.js - relevant application-wide settings
+
+## Philosophy
+- aim is to be very flexible and customizeable
+- allow for many different usages within a company
+- pre-rendering is first-class citizen
+- rendering of dynamic-pages splittable
+- only necessary configuration
+- small api-surface
+- tested
+- css-in-js without removing boilerplate
+
+## The future
+- make it easy to use your own boilerplate
+- create typescript template
+- template with react-router
+- template with redux
+
+---
+
+- mention specific examples for each section to improve usefulness
diff --git a/documentation (wip)/commands.md b/documentation (wip)/commands.md
new file mode 100644
index 00000000..26a4a226
--- /dev/null
+++ b/documentation (wip)/commands.md
@@ -0,0 +1,5 @@
+# dev-toolkit Commands
+
+## Command-line Usage
+
+## Programmatic Usage
diff --git a/documentation (wip)/error-help.md b/documentation (wip)/error-help.md
new file mode 100644
index 00000000..44ffe7d0
--- /dev/null
+++ b/documentation (wip)/error-help.md
@@ -0,0 +1,13 @@
+# Error messages help
+ - (bootstrap) server app doesn't exit
+ `File '${file}' doesn't exist.`
+
+ - (watch) 'Your server needs a `start`-method.'
+ - (watch) 'Your server needs a `this.express` to be set for attaching webpack middleware.'
+
+ - (serve) 'Your server needs a `start`-method.'
+
+ - (importServerApp) 'You need a server app entry point.'
+
+ - (preRender) 'Your server needs a `preRender`-method to create a build.'
+ - (preRender) "The server `preRender`-method must return a Promise to say it's finished."
diff --git a/documentation (wip)/extending-with-config.md b/documentation (wip)/extending-with-config.md
new file mode 100644
index 00000000..8be10bdc
--- /dev/null
+++ b/documentation (wip)/extending-with-config.md
@@ -0,0 +1,2 @@
+# Extending your project with custom configuration
+
diff --git a/documentation (wip)/how-it-works.md b/documentation (wip)/how-it-works.md
new file mode 100644
index 00000000..4874c2ec
--- /dev/null
+++ b/documentation (wip)/how-it-works.md
@@ -0,0 +1,15 @@
+# How dev-toolkit works
+
+`dev-toolkit` is in reality much simpler than many people realize at first sight.
+
+This project has gone through many iterations, from using gulp and later webpack in the form of a boilerplate, to finally becoming a cli-tool with webpack under the hood.
+
+## Architecture
+
+## Server Rendering
+
+## Hot-Reload on Client & Server
+
+## Rendering Pipelines
+
+- explain hydration
diff --git a/documentation (wip)/templates.md b/documentation (wip)/templates.md
new file mode 100644
index 00000000..9f831447
--- /dev/null
+++ b/documentation (wip)/templates.md
@@ -0,0 +1,56 @@
+# dev-toolkit Templates
+A collection of templates of how dev-toolkit can be used.
+Each one of these templates can be initialized from the command-line with:
+```bash
+dev-toolkit init my_project --template [template-name]
+```
+
+## Shared Structure
+...
+- server / client split
+
+## Available Templates
+
+### minimal (default)
+Stripped out example with pre-render
+
+### standard (suggested)
+If you want to start a project from scratch, this is your best starting point.
+This template contains no routing, it will give you out of the box:
+- simple client app with
+ - hot-reload for development
+ - 1 view called `App.js`
+- simple server app for
+ - rendering the layout on request
+ - pre-rendering the layout to an html file
+- `settings.js`-file to be shared between client & server with
+ - example usage of `sharedEnvs` via `dev-toolit/settings`
+- `dev-toolkit.config.js`-file which contains
+ - usePreRender set to `false` (default)
+ - example usage with `MY_CUSTOM_ENV` environment variable
+- `handler.js`-file serverless-type mini-example which contains
+ - example usage of `dev-toolkit` programmatic API usage
+
+---
+
+## WIP Templates
+
+### with-sass
+Example using sass/scss with custom webpack configuration and node-hooks
+
+### serverless
+Example using dev-toolkit programmatically for usage with cloud-functions/lambdas in a serverless scenario.
+
+---
+
+## Planned Templates
+
+### with-react-router
+### with-redux
+### with-mocha
+### with-jest
+### with-glamorous
+### with-dynamic-routes
+### with-styled-components
+
+### as exported npm-package?
diff --git a/documentation (wip)/under-the-hood.md b/documentation (wip)/under-the-hood.md
new file mode 100644
index 00000000..c96be450
--- /dev/null
+++ b/documentation (wip)/under-the-hood.md
@@ -0,0 +1,2 @@
+- code splitting
+- extending
diff --git a/feature-tests/.eslintrc b/feature-tests/.eslintrc
new file mode 100644
index 00000000..b9f8285a
--- /dev/null
+++ b/feature-tests/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "extends": ["airbnb-base", "dev-toolkit", "prettier"],
+ "plugins": ["prettier"],
+ "rules": {
+ "prettier/prettier": "error",
+ "import/prefer-default-export": ["off", "never"]
+ },
+ "env": {
+ "mocha": true
+ }
+}
diff --git a/feature-tests/.prettierrc b/feature-tests/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/feature-tests/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/feature-tests/babel-register.js b/feature-tests/babel-register.js
new file mode 100644
index 00000000..6c0e0243
--- /dev/null
+++ b/feature-tests/babel-register.js
@@ -0,0 +1,2 @@
+// Use babel-runner in favour of babel-register to support javascript via `babelrc.js`
+require('babel-runner')();
diff --git a/feature-tests/babelrc.js b/feature-tests/babelrc.js
new file mode 100644
index 00000000..a85a7493
--- /dev/null
+++ b/feature-tests/babelrc.js
@@ -0,0 +1,15 @@
+module.exports = {
+ presets: [require.resolve('babel-preset-env')],
+ plugins: [
+ // Support dynamic `import()`-statement
+ require.resolve('babel-plugin-dynamic-import-node'),
+ // Allow root-relative imports
+ [
+ require.resolve('babel-plugin-module-resolver'),
+ {
+ // using `process.cwd` makes it also work with `import()`
+ root: [process.cwd()],
+ },
+ ],
+ ],
+};
diff --git a/feature-tests/package-lock.json b/feature-tests/package-lock.json
new file mode 100644
index 00000000..6d8678ed
--- /dev/null
+++ b/feature-tests/package-lock.json
@@ -0,0 +1,2515 @@
+{
+ "name": "dev-toolkit-feature-tests",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "acorn": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz",
+ "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "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
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "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="
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz",
+ "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz",
+ "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz",
+ "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0"
+ }
+ },
+ "babel-plugin-module-resolver": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-2.7.1.tgz",
+ "integrity": "sha1-GL48Qt31n3pFbJ4FEs2ROU9uS+E=",
+ "requires": {
+ "find-babel-config": "1.1.0",
+ "glob": "7.1.2",
+ "resolve": "1.5.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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "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.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.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=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.9.1",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runner": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/babel-runner/-/babel-runner-1.0.0.tgz",
+ "integrity": "sha512-HQbGq/Vp21Y1JGvYiZZh/rqCbKxn5tQwZUgt2AuqdRytm/LkjtucCzNv/SU6rzgk0kNx0gjUNILck2Zd5T5TMQ==",
+ "requires": {
+ "babel-register": "6.26.0",
+ "file-exists": "4.0.0"
+ }
+ },
+ "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": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "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"
+ }
+ },
+ "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",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "bignumber.js": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz",
+ "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8="
+ },
+ "browserslist": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.1.tgz",
+ "integrity": "sha512-3n3nPdbUqn3nWmsy4PeSQthz2ja1ndpoXta+dwFFNhveGjMg6FXpWYe12vsTpNoXJbzx3j7GZXdtoVIdvh3JbA==",
+ "requires": {
+ "caniuse-lite": "1.0.30000770",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000770",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz",
+ "integrity": "sha1-vI5/ULBzJzOQ22qzVzeJCaFOm9s="
+ },
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "requires": {
+ "assertion-error": "1.0.2",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.5"
+ }
+ },
+ "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"
+ }
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "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"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "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
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "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
+ },
+ "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.35"
+ }
+ },
+ "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-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "requires": {
+ "type-detect": "4.0.5"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k="
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0="
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.35",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz",
+ "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz",
+ "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.1",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.35"
+ }
+ },
+ "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.0.0",
+ "es5-ext": "0.10.35",
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true,
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
+ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "chalk": "1.1.3",
+ "concat-stream": "1.6.0",
+ "debug": "2.6.9",
+ "doctrine": "2.0.0",
+ "escope": "3.6.0",
+ "espree": "3.5.1",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "glob": "7.1.2",
+ "globals": "9.18.0",
+ "ignore": "3.3.5",
+ "imurmurhash": "0.1.4",
+ "inquirer": "0.12.0",
+ "is-my-json-valid": "2.16.1",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "1.2.1",
+ "progress": "1.1.8",
+ "require-uncached": "1.0.3",
+ "shelljs": "0.7.8",
+ "strip-bom": "3.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "3.8.3",
+ "text-table": "0.2.0",
+ "user-home": "2.0.0"
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
+ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
+ "dev": true,
+ "requires": {
+ "eslint-restricted-globals": "0.1.1"
+ }
+ },
+ "eslint-config-dev-toolkit": {
+ "version": "1.0.0-beta-2",
+ "resolved": "https://registry.npmjs.org/eslint-config-dev-toolkit/-/eslint-config-dev-toolkit-1.0.0-beta-2.tgz",
+ "integrity": "sha512-0p1x6ihuBtcjgmgPzSsB1tQvJWVXPLyFl6fR/q5VZZZAuqgRS6Tz+akMpnPg8/FJ5YjYFoErJWdxwFhCo9ZDyg==",
+ "dev": true
+ },
+ "eslint-config-prettier": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.6.0.tgz",
+ "integrity": "sha1-8h2w67Q4rWePuYlGCXxLsZi+/Mw=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "5.0.1"
+ }
+ },
+ "eslint-import-resolver-babel-module": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-2.2.1.tgz",
+ "integrity": "sha1-bELzOm8J85RNjPqeHeRw/Io8LPw=",
+ "dev": true,
+ "requires": {
+ "find-babel-config": "1.1.0",
+ "resolve": "1.5.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "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.9",
+ "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"
+ },
+ "dependencies": {
+ "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-plugin-prettier": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz",
+ "integrity": "sha512-AV8shBlGN9tRZffj5v/f4uiQWlP3qiQ+lh+BhTqRLuKSyczx+HRWVkVZaf7dOmguxghAH1wftnou/JUEEChhGg==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "1.1.2",
+ "jest-docblock": "21.2.0"
+ }
+ },
+ "eslint-restricted-globals": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz",
+ "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz",
+ "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.1.2",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "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.35"
+ }
+ },
+ "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
+ },
+ "fast-diff": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
+ "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/file-exists/-/file-exists-4.0.0.tgz",
+ "integrity": "sha1-EE6s8l0/1rPkYpUa6SNTMZX/tSs="
+ },
+ "find-babel-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.1.0.tgz",
+ "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=",
+ "requires": {
+ "json5": "0.5.1",
+ "path-exists": "3.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.1.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "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.1"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
+ },
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8="
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "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=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0="
+ },
+ "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=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz",
+ "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "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.2.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"
+ }
+ },
+ "interpret": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "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"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "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.1"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
+ "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.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-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-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "jest-docblock": {
+ "version": "21.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz",
+ "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==",
+ "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="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "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=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "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"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.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"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY="
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE="
+ },
+ "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.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "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.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"
+ }
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "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"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "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"
+ }
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "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
+ },
+ "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
+ },
+ "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.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "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="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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.3.1"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "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=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "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"
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "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.1.2"
+ }
+ },
+ "pluralize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.7.4.tgz",
+ "integrity": "sha1-XoYkrpNjyA+V7GRFhOzfVddPk/o=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readline2": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "mute-stream": "0.0.5"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "0.5.0"
+ }
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "run-async": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.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=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "shelljs": {
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+ "requires": {
+ "glob": "7.1.2",
+ "interpret": "1.0.4",
+ "rechoir": "0.6.2"
+ }
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "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.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "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-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "table": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "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
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "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="
+ },
+ "to-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/to-time/-/to-time-1.0.2.tgz",
+ "integrity": "sha1-T4FFoH2F9jVqYuHOoKep5mYXduM=",
+ "requires": {
+ "bignumber.js": "2.4.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "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-detect": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz",
+ "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc="
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "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"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+}
diff --git a/feature-tests/package.json b/feature-tests/package.json
new file mode 100644
index 00000000..7b34f672
--- /dev/null
+++ b/feature-tests/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "dev-toolkit-feature-tests",
+ "version": "0.0.0",
+ "scripts": {
+ "test": "mocha --require babel-register.js 'src/index.spec.js' --timeout 30000",
+ "lint": "prettier --write './**/*.js' && eslint './**/*.js'"
+ },
+ "dependencies": {
+ "babel-plugin-dynamic-import-node": "^1.0.2",
+ "babel-plugin-module-resolver": "^2.7.1",
+ "babel-preset-env": "^1.6.0",
+ "babel-runner": "^1.0.0-beta-5",
+ "chai": "^4.1.2",
+ "fs-extra": "^4.0.1",
+ "mocha": "^3.5.0",
+ "shelljs": "^0.7.8",
+ "to-time": "^1.0.2"
+ },
+ "devDependencies": {
+ "babel-eslint": "^7.2.3",
+ "eslint": "^3.4.0",
+ "eslint-config-airbnb-base": "^11.3.1",
+ "eslint-config-dev-toolkit": "^1.0.0-beta-2",
+ "eslint-config-prettier": "2.6.0",
+ "eslint-import-resolver-babel-module": "2.2.1",
+ "eslint-plugin-import": "^2.7.0",
+ "eslint-plugin-prettier": "2.3.1",
+ "prettier": "^1.7.4"
+ }
+}
diff --git a/feature-tests/src/index.spec.js b/feature-tests/src/index.spec.js
new file mode 100644
index 00000000..719c7eaa
--- /dev/null
+++ b/feature-tests/src/index.spec.js
@@ -0,0 +1,23 @@
+import path from 'path';
+
+import { rootDir, createCacheDir, cleanCacheDir } from 'src/utils';
+import packageDevToolkit from './packages/dev-toolkit';
+import templates from './templates';
+
+const devToolkitDir = path.resolve(rootDir, 'packages/dev-toolkit');
+const pkgPath = path.resolve(devToolkitDir, 'package.json');
+
+// Remove cache-directory after running tests
+before(done => createCacheDir(done));
+after(done => cleanCacheDir(done));
+
+describe('dev-toolkit & template tests', () => {
+ it('imports package.json & runs all tests', () => {
+ import(pkgPath).then(pkg => {
+ // Install dev-toolkit in cache folder
+ packageDevToolkit({ pkg });
+ // Test each template with the dev-toolkit installation from above
+ templates();
+ });
+ });
+});
diff --git a/feature-tests/src/packages/dev-toolkit/commands/index.js b/feature-tests/src/packages/dev-toolkit/commands/index.js
new file mode 100644
index 00000000..7c4e8237
--- /dev/null
+++ b/feature-tests/src/packages/dev-toolkit/commands/index.js
@@ -0,0 +1 @@
+export { default as version } from './version';
diff --git a/feature-tests/src/packages/dev-toolkit/commands/version.js b/feature-tests/src/packages/dev-toolkit/commands/version.js
new file mode 100644
index 00000000..d56e3e8a
--- /dev/null
+++ b/feature-tests/src/packages/dev-toolkit/commands/version.js
@@ -0,0 +1,15 @@
+import { expect } from 'chai';
+
+import { runDevToolkitCli } from 'src/utils';
+
+export default ({ pkg }) => {
+ describe('command: `dev-toolkit version`', () => {
+ it('runs without failure, outputs version number', done => {
+ runDevToolkitCli({ command: 'version' }).then(({ exitCode, output }) => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ expect(output.indexOf(pkg.version) >= 0).to.equal(true);
+ done();
+ });
+ });
+ });
+};
diff --git a/feature-tests/src/packages/dev-toolkit/index.js b/feature-tests/src/packages/dev-toolkit/index.js
new file mode 100644
index 00000000..c0ededb9
--- /dev/null
+++ b/feature-tests/src/packages/dev-toolkit/index.js
@@ -0,0 +1,9 @@
+import installation from './installation';
+import { version } from './commands';
+
+export default ({ pkg }) => {
+ describe('`dev-toolkit` npm-package', () => {
+ installation({ pkg });
+ version({ pkg });
+ });
+};
diff --git a/feature-tests/src/packages/dev-toolkit/installation/index.js b/feature-tests/src/packages/dev-toolkit/installation/index.js
new file mode 100644
index 00000000..572fc116
--- /dev/null
+++ b/feature-tests/src/packages/dev-toolkit/installation/index.js
@@ -0,0 +1,31 @@
+import { expect } from 'chai';
+import path from 'path';
+import shell from 'shelljs';
+import time from 'to-time';
+
+import { cacheDir } from 'src/utils';
+
+export default ({ pkg }) => {
+ describe(`local installation using \`npm install ${pkg.name}@${pkg.version}\``, () => {
+ it('proceeds sucessfully', done => {
+ // create a blank npm project for testing installation
+ shell.exec(`cd ${cacheDir}`, { silent: true });
+ shell.exec('npm init -y', { silent: true });
+ // install current version
+ shell.exec(`npm install ${pkg.name}@${pkg.version} --save`, { silent: true }, exitCode => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ done();
+ });
+ // make sure it doesn't take longer than specified time
+ }).timeout(time('1 minutes').ms());
+
+ it('puts dev-toolkit in `package.json` dependencies', done => {
+ import(path.resolve(cacheDir, 'package.json')).then(testPkg => {
+ expect(testPkg.dependencies).to.not.equal(undefined);
+ expect(testPkg.dependencies[pkg.name]).to.not.equal(undefined);
+ expect(testPkg.dependencies[pkg.name]).to.equal(`^${pkg.version}`);
+ done();
+ });
+ });
+ });
+};
diff --git a/feature-tests/src/templates/all/index.js b/feature-tests/src/templates/all/index.js
new file mode 100644
index 00000000..38568523
--- /dev/null
+++ b/feature-tests/src/templates/all/index.js
@@ -0,0 +1,58 @@
+import { expect } from 'chai';
+import chalk from 'chalk';
+import time from 'to-time';
+
+import { runDevToolkitCli } from 'src/utils';
+
+const enableOutputLogging = false;
+const logOutput = output => {
+ if (enableOutputLogging) {
+ console.log(chalk.blue(output));
+ }
+};
+
+export default ({ name, isDefault } = { isDefault: false }) => {
+ describe('can be used to initialize a new app', () => {
+ // Optional templates can take up to 2 minutes to install
+ it(`including comments, with specified template '${name}'`, done => {
+ runDevToolkitCli({
+ command: `init ${name}_app --template ${name}`,
+ }).then(({ exitCode, output }) => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ logOutput(output);
+ done();
+ });
+ }).timeout(time('2 minutes').ms());
+ it(`skipping comments, with specified template '${name}'"`, done => {
+ runDevToolkitCli({
+ command: `init ${name}_app_no_comment --template ${name} --skipComments`,
+ }).then(({ exitCode, output }) => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ logOutput(output);
+ done();
+ });
+ }).timeout(time('2 minutes').ms());
+
+ if (isDefault) {
+ // Default template should take max. 1 minutes to install
+ it('with no specified template, including comments', done => {
+ runDevToolkitCli({
+ command: `init ${name}_default_app --skipComments`,
+ }).then(({ exitCode, output }) => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ logOutput(output);
+ done();
+ });
+ }).timeout(time('1 minutes').ms());
+ it('with no specified template, skipping comments', done => {
+ runDevToolkitCli({
+ command: `init ${name}_default_app_no_comment --skipComments`,
+ }).then(({ exitCode, output }) => {
+ expect(exitCode, 'Exit code').to.equal(0);
+ logOutput(output);
+ done();
+ });
+ }).timeout(time('1 minutes').ms());
+ }
+ });
+};
diff --git a/feature-tests/src/templates/index.js b/feature-tests/src/templates/index.js
new file mode 100644
index 00000000..297fbbac
--- /dev/null
+++ b/feature-tests/src/templates/index.js
@@ -0,0 +1,34 @@
+// Add your template to this array for it to be tested
+const templates = ['standard', 'minimal', 'with-sass', 'serverless'];
+const defaultTemplate = 'standard';
+
+export default () => {
+ describe('templates: ', () => {
+ templates.forEach(name => {
+ // Run combined tests making sure certain things work with every template
+ import('./all')
+ .then(module => {
+ const template = module.default;
+ const isDefault = name === defaultTemplate;
+ describe(`the ${name}-template${isDefault ? ' (default template)' : ''}:`, () => {
+ template({ name, isDefault });
+ });
+ })
+ .catch(e => {
+ console.log("combined template-tests couldn't load:\n", e);
+ });
+
+ // Run template-specific tests
+ // import(`./${name}`)
+ // .then(module => {
+ // const template = module.default;
+ // describe(`the ${name}-template:`, () => {
+ // template({ name, isDefault: name === defaultTemplate });
+ // });
+ // })
+ // .catch(e => {
+ // console.log(`template-tests for '${name}' couldn't load:\n`, e);
+ // });
+ });
+ });
+};
diff --git a/feature-tests/src/templates/standard/installation/index.js b/feature-tests/src/templates/standard/installation/index.js
new file mode 100644
index 00000000..5de7286a
--- /dev/null
+++ b/feature-tests/src/templates/standard/installation/index.js
@@ -0,0 +1,13 @@
+describe('installation', () => {
+ it('can be generated with `dev-toolkit init my_project`', () => {});
+ it('can be generated with `dev-toolkit init my_project --skipComments`', () => {});
+});
+
+// describe('standard template - client', () => {
+// it('renders on the browser', () => {});
+// it('hot-reloads after making a change in App.js', () => {});
+// });
+// describe('standard template - server', () => {
+// it('server-renders app', () => {});
+// it('pre-renders app', () => {});
+// });
diff --git a/feature-tests/src/utils/index.js b/feature-tests/src/utils/index.js
new file mode 100644
index 00000000..3bec5761
--- /dev/null
+++ b/feature-tests/src/utils/index.js
@@ -0,0 +1,32 @@
+import path from 'path';
+import { ensureDirSync, removeSync } from 'fs-extra';
+import shell from 'shelljs';
+
+// Create empty cache-directory for running tests
+export const rootDir = path.resolve(process.cwd(), '../');
+export const cacheDir = path.resolve(rootDir, 'feature-tests/__temp-cache');
+export const createCacheDir = done => {
+ ensureDirSync(cacheDir);
+ shell.cd(cacheDir);
+ done();
+};
+
+export const cleanCacheDir = done => {
+ removeSync(cacheDir);
+ done();
+};
+
+export const runDevToolkitCli = ({ command, directory } = { directory: cacheDir }) =>
+ new Promise((resolve, reject) => {
+ try {
+ shell.exec(`cd ${directory}`, { silent: true });
+ shell.exec(
+ `./node_modules/.bin/dev-toolkit ${command}`,
+ { silent: true },
+ (exitCode, output) => resolve({ exitCode, output })
+ );
+ } catch (e) {
+ console.log('Unable to runDevToolkitCli. ', e);
+ reject(e);
+ }
+ });
diff --git a/lerna.json b/lerna.json
index dfcc2e9f..ac16fb49 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,4 +1,5 @@
{
- "lerna": "2.0.0-beta.30",
+ "lerna": "2.1.2",
+ "packages": ["packages/*", "templates/*"],
"version": "independent"
}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..dbe64ce5
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2807 @@
+{
+ "name": "dev-toolkit-project",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
+ "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ }
+ },
+ "add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "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=",
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "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.4",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "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-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "boxen": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.2.tgz",
+ "integrity": "sha1-Px1AMsMP/qnUsCwyLq8up0HcvOU=",
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.3.0",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "1.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="
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "byline": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "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="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz",
+ "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz",
+ "integrity": "sha512-uTGIPNx/nSpBdsF6xnseRXLLtfr9VLqkz8ZqHXr3Y7b6SftyRxBGjwMtJj1OhNbmlc1wZzLNAlAcvyIiE8a6ZA==",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "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
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
+ "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "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-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
+ "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+ "dev": true,
+ "requires": {
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.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
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "command-join": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz",
+ "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=",
+ "dev": true
+ },
+ "compare-func": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
+ "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "dev": true,
+ "requires": {
+ "array-ify": "1.0.0",
+ "dot-prop": "3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "configstore": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz",
+ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==",
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.1.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "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
+ },
+ "conventional-changelog": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.7.tgz",
+ "integrity": "sha1-kVGmKx2O2y2CcR2r9bfPcQQfgrE=",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-angular": "1.5.2",
+ "conventional-changelog-atom": "0.1.2",
+ "conventional-changelog-codemirror": "0.2.1",
+ "conventional-changelog-core": "1.9.3",
+ "conventional-changelog-ember": "0.2.9",
+ "conventional-changelog-eslint": "0.2.1",
+ "conventional-changelog-express": "0.2.1",
+ "conventional-changelog-jquery": "0.1.0",
+ "conventional-changelog-jscs": "0.1.0",
+ "conventional-changelog-jshint": "0.2.1"
+ }
+ },
+ "conventional-changelog-angular": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.5.2.tgz",
+ "integrity": "sha1-Kzj2Zf6cWSCvGi+C9Uf0ur5t5Xw=",
+ "dev": true,
+ "requires": {
+ "compare-func": "1.3.2",
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-atom": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.2.tgz",
+ "integrity": "sha1-Ella1SZ6aTfDTPkAKBscZRmKTGM=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-cli": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.5.tgz",
+ "integrity": "sha1-RsUUliFrdAZYiIPe+m+sWJ6bsx4=",
+ "dev": true,
+ "requires": {
+ "add-stream": "1.0.0",
+ "conventional-changelog": "1.1.7",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "tempfile": "1.1.1"
+ }
+ },
+ "conventional-changelog-codemirror": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.2.1.tgz",
+ "integrity": "sha1-KZpPcUe681DmyBWPxUlUopHFzAk=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-core": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.3.tgz",
+ "integrity": "sha1-KJn+d5OJoynw7EsnRsNt3vuY2i0=",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-writer": "2.0.2",
+ "conventional-commits-parser": "2.0.1",
+ "dateformat": "1.0.12",
+ "get-pkg-repo": "1.4.0",
+ "git-raw-commits": "1.3.0",
+ "git-remote-origin-url": "2.0.0",
+ "git-semver-tags": "1.2.3",
+ "lodash": "4.17.4",
+ "normalize-package-data": "2.4.0",
+ "q": "1.5.1",
+ "read-pkg": "1.1.0",
+ "read-pkg-up": "1.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "conventional-changelog-ember": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.9.tgz",
+ "integrity": "sha1-jsc8wFTjqwZGZ/sf61L+jvGxZDg=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-eslint": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.2.1.tgz",
+ "integrity": "sha1-LCoRvrIW+AZJunKDQYApO2h8BmI=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-express": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.2.1.tgz",
+ "integrity": "sha1-g42eHmyQmXA7FQucGaoteBdCvWw=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-jquery": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
+ "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-jscs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
+ "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-jshint": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.2.1.tgz",
+ "integrity": "sha1-hhObs6yZiZ8rF36WF+CbN9mbzzo=",
+ "dev": true,
+ "requires": {
+ "compare-func": "1.3.2",
+ "q": "1.5.1"
+ }
+ },
+ "conventional-changelog-writer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-2.0.2.tgz",
+ "integrity": "sha1-tYV97RsAHa+aeLnNQJJvRcE0lJs=",
+ "dev": true,
+ "requires": {
+ "compare-func": "1.3.2",
+ "conventional-commits-filter": "1.1.0",
+ "dateformat": "1.0.12",
+ "handlebars": "4.0.11",
+ "json-stringify-safe": "5.0.1",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "semver": "5.4.1",
+ "split": "1.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "conventional-commits-filter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.0.tgz",
+ "integrity": "sha1-H8Ka8wte2rdvVOIpxBGwxmPQ+es=",
+ "dev": true,
+ "requires": {
+ "is-subset": "0.1.1",
+ "modify-values": "1.0.0"
+ }
+ },
+ "conventional-commits-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.0.1.tgz",
+ "integrity": "sha1-HxXOa4RPfKQUlcgZDAgzwwuLFpM=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "1.3.1",
+ "is-text-path": "1.0.1",
+ "lodash": "4.17.4",
+ "meow": "3.7.0",
+ "split2": "2.2.0",
+ "through2": "2.0.3",
+ "trim-off-newlines": "1.0.1"
+ }
+ },
+ "conventional-recommended-bump": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.0.3.tgz",
+ "integrity": "sha1-RytpsbjwnFxO1A/iikHmPMBL1zY=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "conventional-commits-filter": "1.1.0",
+ "conventional-commits-parser": "2.0.1",
+ "git-raw-commits": "1.3.0",
+ "git-semver-tags": "1.2.3",
+ "meow": "3.7.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "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="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1",
+ "meow": "3.7.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8="
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "del-cli": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-1.1.0.tgz",
+ "integrity": "sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ=",
+ "requires": {
+ "del": "3.0.0",
+ "meow": "3.7.0",
+ "update-notifier": "2.3.0"
+ }
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
+ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
+ "dev": true
+ },
+ "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==",
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+ },
+ "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"
+ }
+ },
+ "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="
+ },
+ "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"
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.0",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "gauge": {
+ "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.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "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.1"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "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-pkg-repo": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
+ "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "meow": "3.7.0",
+ "normalize-package-data": "2.4.0",
+ "parse-github-repo-url": "1.4.1",
+ "through2": "2.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "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="
+ },
+ "git-raw-commits": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.0.tgz",
+ "integrity": "sha1-C8hZbpDV/+c29/VUa9LRL3OrqsY=",
+ "dev": true,
+ "requires": {
+ "dargs": "4.1.0",
+ "lodash.template": "4.4.0",
+ "meow": "3.7.0",
+ "split2": "2.2.0",
+ "through2": "2.0.3"
+ }
+ },
+ "git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "dev": true,
+ "requires": {
+ "gitconfiglocal": "1.0.0",
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "git-semver-tags": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.3.tgz",
+ "integrity": "sha1-GItFOIK/nXojr9Mbq6U32rc4jV0=",
+ "dev": true,
+ "requires": {
+ "meow": "3.7.0",
+ "semver": "5.4.1"
+ }
+ },
+ "gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "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-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "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"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "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="
+ },
+ "handlebars": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "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
+ },
+ "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=="
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ }
+ },
+ "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
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "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
+ },
+ "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=",
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-ci": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz",
+ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=",
+ "dev": true,
+ "requires": {
+ "ci-info": "1.1.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "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=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "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": {
+ "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=",
+ "requires": {
+ "global-dirs": "0.1.1",
+ "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="
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+ },
+ "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="
+ },
+ "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=",
+ "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=",
+ "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=",
+ "dev": true
+ },
+ "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-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
+ },
+ "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="
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
+ "is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "dev": true,
+ "requires": {
+ "text-extensions": "1.7.0"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "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
+ },
+ "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.11"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "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.6"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "requires": {
+ "package-json": "4.0.1"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true,
+ "optional": true
+ },
+ "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"
+ }
+ },
+ "lerna": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.5.1.tgz",
+ "integrity": "sha512-Qz2fajqCPtZf4SFQQpQ2R/Ml/RvGvTNuIHix/vAMMSAdbtnPe2QTw34vLD24Clfsfy8FEojy+tqsjejWKqkDFw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "chalk": "2.3.0",
+ "cmd-shim": "2.0.2",
+ "columnify": "1.5.4",
+ "command-join": "2.0.0",
+ "conventional-changelog-cli": "1.3.5",
+ "conventional-recommended-bump": "1.0.3",
+ "dedent": "0.7.0",
+ "execa": "0.8.0",
+ "find-up": "2.1.0",
+ "fs-extra": "4.0.2",
+ "get-port": "3.2.0",
+ "glob": "7.1.2",
+ "glob-parent": "3.1.0",
+ "globby": "6.1.0",
+ "graceful-fs": "4.1.11",
+ "hosted-git-info": "2.5.0",
+ "inquirer": "3.3.0",
+ "is-ci": "1.0.10",
+ "load-json-file": "3.0.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "npmlog": "4.1.2",
+ "p-finally": "1.0.0",
+ "package-json": "4.0.1",
+ "path-exists": "3.0.0",
+ "read-cmd-shim": "1.0.1",
+ "read-pkg": "2.0.0",
+ "rimraf": "2.6.2",
+ "safe-buffer": "5.1.1",
+ "semver": "5.4.1",
+ "signal-exit": "3.0.2",
+ "strong-log-transformer": "1.0.6",
+ "temp-write": "3.3.0",
+ "write-file-atomic": "2.3.0",
+ "write-json-file": "2.3.0",
+ "write-pkg": "3.1.0",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "load-json-file": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-3.0.0.tgz",
+ "integrity": "sha1-frNzXZg6ftImKt5P92mvU2nFxEA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "3.0.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz",
+ "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ },
+ "dependencies": {
+ "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=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "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.3.1"
+ }
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "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"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "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"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY="
+ },
+ "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"
+ }
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
+ "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.1.0"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "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"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "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"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "modify-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz",
+ "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=",
+ "dev": true
+ },
+ "moment": {
+ "version": "2.19.2",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.2.tgz",
+ "integrity": "sha512-Rf6jiHPEfxp9+dlzxPTmRHbvoFXsh2L/U8hOupUMpnuecHQmI6cF6lUbJl3QqKPko1u6ujO+FxtcajLVfLpAtA==",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "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.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="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.10",
+ "wordwrap": "0.0.3"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "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-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.4.1"
+ }
+ },
+ "parse-github-repo-url": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
+ "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "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"
+ }
+ },
+ "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="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "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"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "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
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true
+ },
+ "rc": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz",
+ "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=",
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
+ "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.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=",
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz",
+ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=",
+ "requires": {
+ "rc": "1.2.2",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "requires": {
+ "rc": "1.2.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "is-finite": "1.0.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-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
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "requires": {
+ "semver": "5.4.1"
+ }
+ },
+ "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
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
+ "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"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "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="
+ },
+ "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="
+ },
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "split2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
+ "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "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-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "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="
+ },
+ "strong-log-transformer": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz",
+ "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=",
+ "dev": true,
+ "requires": {
+ "byline": "5.0.0",
+ "duplexer": "0.1.1",
+ "minimist": "0.1.0",
+ "moment": "2.19.2",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
+ "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "temp-write": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.3.0.tgz",
+ "integrity": "sha1-walt4rNgYTQuroH0T/ABrsj2Fak=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "is-stream": "1.1.0",
+ "make-dir": "1.1.0",
+ "pify": "2.3.0",
+ "temp-dir": "1.0.0",
+ "uuid": "3.1.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true
+ }
+ }
+ },
+ "tempfile": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
+ "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2",
+ "uuid": "2.0.3"
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "requires": {
+ "execa": "0.7.0"
+ }
+ },
+ "text-extensions": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz",
+ "integrity": "sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg==",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "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="
+ },
+ "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"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ },
+ "trim-off-newlines": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
+ "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "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.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.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
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true,
+ "optional": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c="
+ },
+ "update-notifier": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
+ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=",
+ "requires": {
+ "boxen": "1.2.2",
+ "chalk": "2.3.0",
+ "configstore": "3.1.1",
+ "import-lazy": "2.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "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": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "string-width": "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
+ },
+ "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.1"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
+ "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
+ "requires": {
+ "string-width": "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="
+ },
+ "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"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "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=",
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "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,
+ "requires": {
+ "string-width": "1.0.2",
+ "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.1"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "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==",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "write-json-file": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
+ "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
+ "dev": true,
+ "requires": {
+ "detect-indent": "5.0.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.1.0",
+ "pify": "3.0.0",
+ "sort-keys": "2.0.0",
+ "write-file-atomic": "2.3.0"
+ }
+ },
+ "write-pkg": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.1.0.tgz",
+ "integrity": "sha1-AwqZlMyZk9JbTnWp8aGSNgcpHOk=",
+ "dev": true,
+ "requires": {
+ "sort-keys": "2.0.0",
+ "write-json-file": "2.3.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "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=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "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"
+ },
+ "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
+ },
+ "camelcase": {
+ "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=",
+ "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"
+ }
+ },
+ "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.1"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.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"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 9970f7c5..60de072f 100644
--- a/package.json
+++ b/package.json
@@ -1,27 +1,23 @@
{
- "name": "dev-toolkit-monorepo",
+ "name": "dev-toolkit-project",
"version": "0.0.0",
- "description": "Monorepo configuration for dev-toolkit",
- "main": "index.js",
"scripts": {
- "install": "lerna bootstrap",
- "link": "cd packages/dev-toolkit && npm link && cd ../dynamic-pages && npm link && cd ../..",
- "watch": "lerna exec -- npm run watch --concurrency",
- "build": "lerna run build",
- "publish": "lerna publish",
- "clean": "lerna run clean"
+ "bootstrap": "lerna bootstrap",
+ "bootstrap-fix": "lerna bootstrap && chmod 777 packages/dev-toolkit/dist/bin/* packages/babel-runner/dist/bin/*",
+ "lint-all": "lerna exec -- npm install && lerna run lint",
+ "full-clean": "npm run safe-clean && npm run root-clean",
+ "root-clean": "del './node_modules'",
+ "safe-clean": "npm run sc-packages && npm run sc-templates && npm run sc-other",
+ "sc-packages": "del './packages/**/node_modules' './packages/**/dist' './packages/**/build'",
+ "sc-templates": "del './templates/**/node_modules' './templates/**/dist' './templates/**/build'",
+ "sc-other": "del './feature-tests/**/_temp-cache'",
+ "unsafe-clean": "del './**/package-lock.json'",
+ "fix-permissions": "chmod 777 packages/dev-toolkit/dist/bin/* packages/babel-runner/dist/bin/*"
},
- "repository": {
- "type": "git",
- "url": "git+https://github.com/stoikerty/dev-toolkit.git"
- },
- "author": "Jorge Antunes",
- "license": "ISC",
- "bugs": {
- "url": "https://github.com/stoikerty/dev-toolkit/issues"
- },
- "homepage": "https://github.com/stoikerty/dev-toolkit#readme",
"devDependencies": {
- "lerna": "2.0.0-beta.30"
+ "lerna": "^2.4.0"
+ },
+ "dependencies": {
+ "del-cli": "^1.1.0"
}
}
diff --git a/packages/babel-preset-dev-toolkit/.prettierrc b/packages/babel-preset-dev-toolkit/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/packages/babel-preset-dev-toolkit/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/packages/babel-preset-dev-toolkit/Readme.md b/packages/babel-preset-dev-toolkit/Readme.md
new file mode 100644
index 00000000..1bb02ebc
--- /dev/null
+++ b/packages/babel-preset-dev-toolkit/Readme.md
@@ -0,0 +1,3 @@
+# babel-preset-dev-toolkit
+
+Babel Preset for [dev-toolkit](https://github.com/stoikerty/dev-toolkit), based on `create-react-app` preset.
diff --git a/packages/babel-preset-dev-toolkit/index.js b/packages/babel-preset-dev-toolkit/index.js
new file mode 100644
index 00000000..5f124816
--- /dev/null
+++ b/packages/babel-preset-dev-toolkit/index.js
@@ -0,0 +1,38 @@
+'use strict';
+
+// Warn Users to make sure we don't have an invalid `NODE_ENV`
+var env = process.env.BABEL_ENV || process.env.NODE_ENV;
+if (env !== 'development' && env !== 'test' && env !== 'production') {
+ throw new Error(
+ 'Using `babel-preset-dev-toolkit` requires that you specify `NODE_ENV` or ' +
+ '`BABEL_ENV` environment variables. Valid values are "development", ' +
+ '"test", and "production". Instead, received: ' +
+ JSON.stringify(env) +
+ ".\nNOTE: `babel-preset-dev-toolkit` uses facebook's `babel-preset-react-app`" +
+ ' under the hood which has the same requirement.\n\n'
+ );
+}
+
+// Use require.resolve to prevent issues when using npm link
+// see: https://github.com/babel/babel-loader/issues/149
+module.exports = {
+ presets: [
+ require.resolve('babel-preset-env'),
+ // Use create-react-app default
+ require.resolve('babel-preset-react-app'),
+ ],
+ plugins: [
+ // Support dynamic `import()`-statement
+ require.resolve('babel-plugin-dynamic-import-node'),
+ // Sane if-statements for React
+ require.resolve('jsx-control-statements'),
+ // Allow root-relative imports for client & server
+ [
+ require.resolve('babel-plugin-module-resolver'),
+ {
+ // using `process.cwd` makes it also work with `import()`
+ root: [process.cwd()],
+ },
+ ],
+ ],
+};
diff --git a/packages/babel-preset-dev-toolkit/package-lock.json b/packages/babel-preset-dev-toolkit/package-lock.json
new file mode 100644
index 00000000..e267e85d
--- /dev/null
+++ b/packages/babel-preset-dev-toolkit/package-lock.json
@@ -0,0 +1,1158 @@
+{
+ "name": "babel-preset-dev-toolkit",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "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="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "esutils": "2.0.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz",
+ "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0"
+ }
+ },
+ "babel-plugin-module-resolver": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-2.7.1.tgz",
+ "integrity": "sha1-GL48Qt31n3pFbJ4FEs2ROU9uS+E=",
+ "requires": {
+ "find-babel-config": "1.1.0",
+ "glob": "7.1.2",
+ "resolve": "1.5.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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "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.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.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=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-syntax-flow": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-react-constant-elements": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz",
+ "integrity": "sha1-LxGb9NLN1F65uqrldAU8YE9hR90=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-builder-react-jsx": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-plugin-syntax-jsx": "6.18.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-runtime": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
+ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.9.1",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-plugin-transform-flow-strip-types": "6.22.0"
+ }
+ },
+ "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=",
+ "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"
+ }
+ },
+ "babel-preset-react-app": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-3.1.0.tgz",
+ "integrity": "sha512-jEAeVozxLzftLl0iDZ0d5jrmfbo3yogON/eI4AsEDIs8p6WW+t9mDRUsj5l12bqPOLSiVOElCQ3QyGjMcyBiwA==",
+ "requires": {
+ "babel-plugin-dynamic-import-node": "1.1.0",
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.26.0",
+ "babel-plugin-transform-react-constant-elements": "6.23.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-plugin-transform-regenerator": "6.26.0",
+ "babel-plugin-transform-runtime": "6.23.0",
+ "babel-preset-env": "1.6.1",
+ "babel-preset-react": "6.24.1"
+ },
+ "dependencies": {
+ "babel-plugin-dynamic-import-node": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz",
+ "integrity": "sha512-tTfZbM9Ecwj3GK50mnPrUpinTwA4xXmDiQGCk/aBYbvl1+X8YqldK86wZ1owVJ4u3mrKbRlXMma80J18qwiaTQ==",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ }
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "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"
+ }
+ },
+ "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",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.1.tgz",
+ "integrity": "sha512-3n3nPdbUqn3nWmsy4PeSQthz2ja1ndpoXta+dwFFNhveGjMg6FXpWYe12vsTpNoXJbzx3j7GZXdtoVIdvh3JbA==",
+ "requires": {
+ "caniuse-lite": "1.0.30000770",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000770",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz",
+ "integrity": "sha1-vI5/ULBzJzOQ22qzVzeJCaFOm9s="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "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"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0="
+ },
+ "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="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "find-babel-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.1.0.tgz",
+ "integrity": "sha1-rMAQQ6Z0n+w0Qpvmtk9ULrtdY1U=",
+ "requires": {
+ "json5": "0.5.1",
+ "path-exists": "3.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "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"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsx-control-statements": {
+ "version": "3.2.8",
+ "resolved": "https://registry.npmjs.org/jsx-control-statements/-/jsx-control-statements-3.2.8.tgz",
+ "integrity": "sha512-RUHKXNAA4RiBijHIrLuyIiA6E0oLN6tvtCLcOzzzhVAjlcsLHQc0IbVQF0XGtlhsi6a6+HFwvo0duKVzzxuRcg==",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-plugin-syntax-jsx": "6.18.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "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="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "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-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME="
+ },
+ "prettier": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz",
+ "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "requires": {
+ "jsesc": "0.5.0"
+ }
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "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="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ }
+ }
+}
diff --git a/packages/babel-preset-dev-toolkit/package.json b/packages/babel-preset-dev-toolkit/package.json
new file mode 100644
index 00000000..66e47f52
--- /dev/null
+++ b/packages/babel-preset-dev-toolkit/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "babel-preset-dev-toolkit",
+ "version": "1.0.0",
+ "description": "Uses create-react-app default, adds sane if-statements & root-relative imports",
+ "main": "index.js",
+ "scripts": {
+ "lint": "prettier --write './**/*.js'",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/stoikerty/dev-toolkit/tree/master/packages/babel-preset-dev-toolkit"
+ },
+ "keywords": [
+ "babel",
+ "babel-preset",
+ "dev-toolkit",
+ "universal",
+ "universal javascript",
+ "import",
+ "jsx-control-statements",
+ "root-relative require",
+ "root-relative import"
+ ],
+ "author": "Jorge Antunes @stoikerty",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-dynamic-import-node": "^1.1.0",
+ "babel-plugin-module-resolver": "^2.7.1",
+ "babel-preset-env": "^1.6.0",
+ "babel-preset-react-app": "^3.0.2",
+ "jsx-control-statements": "^3.2.6"
+ },
+ "devDependencies": {
+ "prettier": "^1.7.4"
+ }
+}
diff --git a/packages/babel-runner/.babelrc b/packages/babel-runner/.babelrc
new file mode 100644
index 00000000..2255e047
--- /dev/null
+++ b/packages/babel-runner/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["env", "stage-1"]
+}
diff --git a/packages/babel-runner/.eslintrc b/packages/babel-runner/.eslintrc
new file mode 100644
index 00000000..6c3ab8a6
--- /dev/null
+++ b/packages/babel-runner/.eslintrc
@@ -0,0 +1,12 @@
+{
+ "extends": [
+ "airbnb-base"
+ ],
+
+ "parser": "babel-eslint",
+
+ "rules": {
+ "global-require": [ "off" ],
+ "import/no-dynamic-require": [ "off" ]
+ }
+}
diff --git a/packages/babel-runner/.prettierrc b/packages/babel-runner/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/packages/babel-runner/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/packages/babel-runner/Readme.md b/packages/babel-runner/Readme.md
new file mode 100644
index 00000000..83ecece4
--- /dev/null
+++ b/packages/babel-runner/Readme.md
@@ -0,0 +1,17 @@
+# babel-runner
+
+A wrapper around `babel-register` to make universal usage of files easier. Automatically imports a `babelrc.js` or `.babelrc`-file as well as a `nodeHooks.js` file at the root of your project.
+
+## Usage - Command-line
+```bash
+babel-runner --run myuniversalfile.js
+```
+
+## Usage - Command-line
+```js
+const babelRunner = require('babel-runner');
+
+babelRunner({
+ fileToRun: path.resolve(__dirname, `./myuniversalfile.js`),
+});
+```
diff --git a/packages/babel-runner/package-lock.json b/packages/babel-runner/package-lock.json
new file mode 100644
index 00000000..4b11f83a
--- /dev/null
+++ b/packages/babel-runner/package-lock.json
@@ -0,0 +1,3918 @@
+{
+ "name": "babel-runner",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.4.0.tgz",
+ "integrity": "sha1-MtHPCNvIDEMvQm8S4QslEfa0ZHQ=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "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.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "arr-flatten": "1.1.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==",
+ "dev": true,
+ "optional": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true,
+ "optional": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+ "dev": true,
+ "optional": true
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.12.1",
+ "convert-source-map": "1.5.1",
+ "fs-readdir-recursive": "1.1.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.7",
+ "v8flags": "2.1.1"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz",
+ "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-bindify-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
+ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+ "dev": true,
+ "requires": {
+ "babel-helper-bindify-decorators": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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-syntax-async-generators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
+ "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
+ "dev": true
+ },
+ "babel-plugin-syntax-class-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-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-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-generator-functions": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
+ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-generators": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-class-constructor-call": "6.18.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-class": "6.24.1",
+ "babel-plugin-syntax-decorators": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "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.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.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=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.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,
+ "requires": {
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.9.1",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "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=",
+ "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"
+ }
+ },
+ "babel-preset-stage-2": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
+ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-decorators": "6.24.1",
+ "babel-preset-stage-3": "6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-generator-functions": "6.24.1",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.26.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "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"
+ }
+ },
+ "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",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "browserslist": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.1.tgz",
+ "integrity": "sha512-3n3nPdbUqn3nWmsy4PeSQthz2ja1ndpoXta+dwFFNhveGjMg6FXpWYe12vsTpNoXJbzx3j7GZXdtoVIdvh3JbA==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "1.0.30000770",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000770",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz",
+ "integrity": "sha1-vI5/ULBzJzOQ22qzVzeJCaFOm9s=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "chardet": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.0.tgz",
+ "integrity": "sha1-C74TVaxE16PtSpJXB8TvcPgZD2w=",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.3",
+ "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"
+ }
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.1.tgz",
+ "integrity": "sha512-PCNLExLlI5HiPdaJs4pMXwOTHkSCpNQ1QJH9ykZLKtKEyKu3p9HgmH5l97vM8c0IUz6d54l+xEu2GG9yuYrFzA==",
+ "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="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "debug": {
+ "version": "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-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.11.0.tgz",
+ "integrity": "sha512-UWbhQpaKlm8h5x/VLwm0S1kheMrDj8jPwhnBMjr/Dlo3qqT7MvcN/UfKAR3E1N4lr4YNtOvS4m3hwsrVc/ky7g==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.4.0",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.0.0",
+ "eslint-scope": "3.7.1",
+ "espree": "3.5.2",
+ "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.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.4.1",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.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
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "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.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
+ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
+ "dev": true,
+ "requires": {
+ "eslint-restricted-globals": "0.1.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "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"
+ },
+ "dependencies": {
+ "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-restricted-globals": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz",
+ "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
+ "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"
+ }
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "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=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.0",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/file-exists/-/file-exists-4.0.0.tgz",
+ "integrity": "sha1-EE6s8l0/1rPkYpUa6SNTMZX/tSs="
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true,
+ "optional": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "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.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true,
+ "optional": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "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.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
+ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "2.8.0",
+ "node-pre-gyp": "0.6.39"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "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"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "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"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true,
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true,
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.1.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",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true,
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.39",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.2",
+ "hawk": "3.1.3",
+ "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",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "bundled": true,
+ "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",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "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=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "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=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "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.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "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.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "1.11.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "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"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true,
+ "optional": true
+ },
+ "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=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true,
+ "optional": true
+ },
+ "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-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "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"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.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-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true,
+ "optional": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true,
+ "optional": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "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.6"
+ }
+ },
+ "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"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.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"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "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=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "optional": true,
+ "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.4"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
+ "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=",
+ "dev": true,
+ "optional": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "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.4.1",
+ "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.1.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "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="
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "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.3.1"
+ }
+ },
+ "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.1"
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "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-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"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "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.1.2"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true,
+ "optional": true
+ },
+ "prettier": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz",
+ "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.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=",
+ "dev": true,
+ "optional": true,
+ "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=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "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
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "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,
+ "optional": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
+ },
+ "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=",
+ "dev": true,
+ "optional": 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": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "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"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-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"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "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-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.4.0",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-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="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "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"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ }
+ }
+}
diff --git a/packages/babel-runner/package.json b/packages/babel-runner/package.json
new file mode 100644
index 00000000..47d81bd8
--- /dev/null
+++ b/packages/babel-runner/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "babel-runner",
+ "version": "1.0.0",
+ "description": "Helper for integrating babel config & node hooks",
+ "main": "dist/index.js",
+ "scripts": {
+ "prepare": "npm run build",
+ "publish-beta": "npm publish --tag beta",
+ "build": "babel src --out-dir dist",
+ "watch": "babel src --watch --out-dir dist",
+ "lint": "prettier --write './**/*.js' && eslint --config .eslintrc src",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "bin": {
+ "babel-runner": "dist/bin/index.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/stoikerty/dev-toolkit/tree/master/packages/babel-runner"
+ },
+ "keywords": [
+ "babel",
+ "node-hooks",
+ "require-hooks",
+ "universal",
+ "universal javascript",
+ "isomorphic",
+ "babelrc",
+ "babel-register",
+ "dev-toolkit"
+ ],
+ "author": "Jorge Antunes @stoikerty",
+ "license": "MIT",
+ "devDependencies": {
+ "babel-cli": "^6.24.1",
+ "babel-eslint": "^7.2.3",
+ "babel-preset-env": "^1.6.0",
+ "babel-preset-stage-1": "^6.24.1",
+ "eslint": "^4.4.0",
+ "eslint-config-airbnb-base": "^11.0.1",
+ "eslint-plugin-import": "^2.2.0",
+ "prettier": "^1.7.4"
+ },
+ "dependencies": {
+ "babel-register": "^6.26.0",
+ "file-exists": "^4.0.0"
+ }
+}
diff --git a/packages/babel-runner/src/bin/index.js b/packages/babel-runner/src/bin/index.js
new file mode 100644
index 00000000..0e042e60
--- /dev/null
+++ b/packages/babel-runner/src/bin/index.js
@@ -0,0 +1,9 @@
+#!/usr/bin/env node
+import babelRunner from '../index';
+
+// Run specified file from second argument when first argument `--run` is given
+const options = process.argv.slice(2);
+const runCommandGiven = options[0] === '--run' || options[0] === '-r';
+const fileToRun = runCommandGiven && options[1];
+
+babelRunner({ fileToRun });
diff --git a/packages/babel-runner/src/index.js b/packages/babel-runner/src/index.js
new file mode 100644
index 00000000..4854514b
--- /dev/null
+++ b/packages/babel-runner/src/index.js
@@ -0,0 +1,58 @@
+import path from 'path';
+import { sync as fileExists } from 'file-exists';
+
+const projectFolder = process.cwd();
+const packageJsonPath = path.resolve(projectFolder, 'package.json');
+const packageJson = fileExists(packageJsonPath) ? require(packageJsonPath) : {};
+const pkgConfig = packageJson['babel-runner'] || {};
+
+// Retrieve Paths for babelrc & node hooks from default locations or from package.json
+const nodeHooksPath = (() => {
+ const filePath = pkgConfig.nodeHooks
+ ? pkgConfig.nodeHooks
+ : path.resolve(projectFolder, 'nodeHooks.js');
+ return fileExists(filePath) ? filePath : null;
+})();
+const babelrc = (() => {
+ const defaultBabelrcJS = path.resolve(projectFolder, 'babelrc.js');
+ const defaultBabelrcJson = path.resolve(projectFolder, '.babelrc');
+
+ if (fileExists(defaultBabelrcJson)) {
+ // No need to read the file, we can use babel-register's automatic `.babelrc`-finding "feature"
+ return {};
+ } else if (fileExists(defaultBabelrcJS)) {
+ // We read a file which expects all presets & plugins to be resolved with `require.resolve`
+ return require(defaultBabelrcJS);
+ } else if (
+ pkgConfig.babelrc &&
+ pkgConfig.babelrc.match('.js$') &&
+ fileExists(pkgConfig.babelrc)
+ ) {
+ // Use the `babelrc.js`-file defined in package.json
+ return require(pkgConfig.babelrc);
+ }
+
+ return null;
+})();
+
+// Run babel and include node-hooks
+const babelRunner = ({ fileToRun } = {}) => {
+ // Teach Node how to import other filetypes, such as .scss .jsx or .png
+ if (nodeHooksPath) {
+ require(nodeHooksPath);
+ }
+
+ // Teach Node how to use babel compilation, using explicitly specified babelrc
+ if (babelrc) {
+ require('babel-register')(babelrc);
+ }
+
+ if (fileToRun) {
+ // rely on Node error if file doesn't exist
+ require(path.resolve(process.cwd(), fileToRun));
+ }
+};
+
+module.exports = babelRunner;
+module.exports.default = babelRunner;
+module.exports.babelrc = babelrc;
diff --git a/packages/dev-toolkit/.babelrc b/packages/dev-toolkit/.babelrc
new file mode 100644
index 00000000..e9f042f1
--- /dev/null
+++ b/packages/dev-toolkit/.babelrc
@@ -0,0 +1,4 @@
+{
+ "presets": ["env", "stage-1"],
+ "plugins": ["dynamic-import-node"]
+}
diff --git a/packages/dev-toolkit/.eslintrc b/packages/dev-toolkit/.eslintrc
index 73cef66b..f359949b 100644
--- a/packages/dev-toolkit/.eslintrc
+++ b/packages/dev-toolkit/.eslintrc
@@ -1,32 +1,19 @@
{
- "plugins": [
- "jsx-control-statements"
- ],
- "extends": [
- "airbnb",
- "plugin:jsx-control-statements/recommended"
- ],
+ "extends": ["airbnb-base", "prettier"],
"parser": "babel-eslint",
+ "plugins": ["prettier"],
"rules": {
- "no-multiple-empty-lines": [
- "error",
- {
- "max": 1
- }
- ],
+ "prettier/prettier": "error",
+ "import/no-extraneous-dependencies": ["off", "never"],
"import/no-unresolved": [
"error",
{
- "ignore": [ "src/" ]
+ "ignore": ["^dist/"]
}
- ]
+ ],
+ "import/extensions": ["off", "never"]
},
-
- "globals": [
- "app"
- ],
"env": {
- "browser": true,
"mocha": true
}
}
diff --git a/packages/dev-toolkit/.mocha.opts b/packages/dev-toolkit/.mocha.opts
new file mode 100644
index 00000000..25bd0c61
--- /dev/null
+++ b/packages/dev-toolkit/.mocha.opts
@@ -0,0 +1,3 @@
+src/**/*.spec.* --reporter spec
+--slow 150
+--compilers js:babel-core/register,js:./dist/utilities/testHelpers/setupTests.js
diff --git a/packages/dev-toolkit/.npmignore b/packages/dev-toolkit/.npmignore
deleted file mode 100644
index ff634aa3..00000000
--- a/packages/dev-toolkit/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-#############
-## Node
-#############
-
-node_modules/
-npm-debug.*
diff --git a/packages/dev-toolkit/.prettierrc b/packages/dev-toolkit/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/packages/dev-toolkit/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/packages/dev-toolkit/Next-Readme-Draft.md b/packages/dev-toolkit/Next-Readme-Draft.md
deleted file mode 100644
index c4d4846c..00000000
--- a/packages/dev-toolkit/Next-Readme-Draft.md
+++ /dev/null
@@ -1,105 +0,0 @@
-[ Draft Document to replace current Readme.md]
-
-# dev-toolkit
-
-Develop your react
-powered Web App with minimum distractions.
-
-![](gif)
-
-* [Getting Started](#getting-started) โค Installation, folder structure.
-* [Using images & files](#using-images--files) โค Import anything or use static files.
-* [Making the most of CSS](making-the-most-of-css) โค CSS-modules, Autoprefixer...
-* [Linting your files](#linting-your-files) โค With hot-reload & a useful overlay.
-* [Build & deploy](#build--deploy) โค Move your app into production.
-* [Using a test-framework](#using-a-test-framework) โค Use the default... or not.
-* [Extending your app](#extending-your-app) โค You can, but be aware of the risks.
-
-
-
-
-* [Contributing](#contributing)
-* [List of available commands](#list-of-available-commands)
-* [Specifications](#specifications) โค Main features, Default packages & compatibility.
-* [Changelog](#changelog)
-
-## Getting Started
-### Installation
-### Initial project structure
-
-## Using images & files
-### Importing in javascript
-### Using the `public-files` folder
-
-## Linting your files
-### Workflow with watch-command
-### Editor configuration
-
-## Build & deploy
-### Generating a `build` folder with all files
-#### A simple build
-#### Dynamic Pages backed by server-rendering
-### Using a javascript server
-
-## Extending your app
-### The toolkit config
-### Environment Variables
-### Extending Webpack & Babel
-#### The Risks
-#### Custom Webpack Config
-#### Custom Babel Config
-
-## Using a test-framework
-### Adding tests to your app
-### Replacing the default test-suite
-
-## Contributing
-### Acknowledgements
-### Alternatives
-
-## List of available commands
-
-## Specifications
-### Main features
-### Default packages after `dev-toolkit --init`
-### Compatiblity
-
-## Changelog
-
----
-
-# Notes / TODO
-
-Goals & Purpose:
-- fast to setup
-- run multiple apps using the same underlying principles
-- as little configuration as necessary
-- powerful enough to run production-scale apps
-- defer testing and additional setup to app
-
-Very suitable for;
-- Intermediary to advanced users
-- Creating a single-page-app from scratch
-- Migrating an old server to javascript-backed splash-page(s)
-
-Not quite suitable for:
-- Learning React as a Beginner
-- Creating small snippets of code to use in existing app
-
-TODO:
-- add script for build
-- add script for watch
-- add script for publish?
-- move readme for toolkit to root, check urls
-- change homepage urls in package.json
-- publish both packages
-
-Additional TODO for better docs with animated clips:
-- gif for starting a project
-- gif for when one creates a syntax/eslint error
-- gif for testing with watch command
-- gif for generating dynamic pages
-
-Necessities:
-- install all dependencies for all packages at once
-- build & watch all packages at once
-- build each package individually on `npm publish` of a package
diff --git a/packages/dev-toolkit/README.md b/packages/dev-toolkit/README.md
deleted file mode 100644
index 8bcdfb9c..00000000
--- a/packages/dev-toolkit/README.md
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-
-
- Jump-start your react
-powered Web App.
- dynamic pages
- sass & css-modules
- server-rendering
- hot-reload
-
-
-## Create a new project
-```bash
-# install & initialize new app
-npm install -g dev-toolkit
-dev-toolkit --init my_app
-cd my_app
-```
-```
-# run it via npm scripts
-npm run dev
-# or run it directly (-w or --watch)
-dev-toolkit --watch
-```
-
-This will give you the following structure to work with:
-```
-src
-โโโ client
-โ โโโ app.js
-โ โโโ ...
-โโโ server
- โโโ ...
-```
-
-## Generate a static build
-```bash
-# Create `build`-folder with compiled files (-b or --build)
-dev-toolkit --build
-```
-- removes previous `build`-folder
-- automatically uses production-builds of React and Redux
-- allows for a [custom vendor-bundle](#define-what-modules-are-bundled-into-vendorjs)
-- extracts css from individual modules
-- hashes assets, including `jpg`, `png`, `gif` & `svg`-files
-
-### Verify build
-Verify if static build is working correctly.
-```bash
-# Runs a minimal server that serves the build folder (--static or --serve-static)
-dev-toolkit --serve-static
-```
-
-### Generate a static build with dynamic pages
-
-To make use of dynamic pages and components for making your app load faster use the extended build command.
-
-**For advanced users only**, [refer to this gist](https://gist.github.com/stoikerty/40a668e8fd4e2919034fd1eed2252bcb) for information on how to implement it.
-```bash
-# This will create an index-file for each dynamic route (-d --dynamic or --build --dynamic)
-dev-toolkit --build --dynamic
-```
-- html is pre-rendered and inserted into the body
-- creates multiple js-bundles, one for each dynamic page
-- each `index.html` contains a `script`-link to the `app` bundle and the page-bundle
-- scripts use `async` and `defer`-attributes as appropriate
-- each subsequent page can be pre-cached and loaded on demand
-
-## Setting up tests
-You'll need to import the webpack config for running tests, [refer to this gist](https://gist.github.com/stoikerty/a202280147910b63a20e167dc4778fb8) for the setup. You'll be able to write your tests in ES2015, just like the rest of your app. Single tests can also be run in a watch-mode with the `npm run test-single`-command.
-
-## Use server with server-side rendering
-
-You can use your project as an universal/isomorphic server-side-rendered app. **For advanced users only.**
-```bash
-# Compile and run `src/server/app` (-s or --serve)
-dev-toolkit --serve
-```
-
-## Misc
-
-#### Check version
-```bash
-# Check Version (-v or --version)
-dev-toolkit -v
-```
-
-#### Define what modules are bundled into `vendor.js`
-```js
-// in your package.json, add `vendor` in `toolkitSettings` section
-"toolkitSettings": {
- "vendor": [
- "react",
- "react-dom",
- "react-router"
- ]
-},
-```
-
-#### Define what environment variables are available on client
-```js
-// In your package.json, add `sharedEnvs` in `toolkitSettings` section.
-// The named variables will be available on the client via an exposed global `buildSettings.env`
-"toolkitSettings": {
- "sharedEnvs": [
- "NODE_ENV",
- "API_DOMAIN"
- ]
-},
-```
-
-## Features
-
-##### Compatibility
-
-- Multiplatform: Windows, OSX, Linux
-- Node.js `last tested version 5.10.1`
-- NPM `last tested version 3.8.3`
-
-##### Javascript Basics
-
-- [React]
-- [ES2015 / ES6]
-- [root-relative imports with `src/...`]
-- [ESLint]
-
-##### Developer Convenience
-
-- [Browsersync]
-- [Vanilla HMR, webpack's hot-reload]
-- [jsx-control-statements]
-- [`transform-class-properties` support]
-- automatic asset-hashing during build, custom `vendor.js`
-- support for various file-formats: `css`, `scss` `js`, `jsx`, `json` `jpg`, `png`, `gif`, `svg`
-
-##### Powerful CSS Tools
-
-- [Autoprefixer]
-- [sass / scss]
-- [css-modules]
-
-##### Server-tools for Universal Apps
-
-- your own server app in `src/server/app`
-- [powered by express]
-- [react-router]
-
-[ES2015 / ES6]: https://babeljs.io/docs/learn-es2015/
-[`transform-class-properties` support]: https://babeljs.io/docs/plugins/transform-class-properties/
-[root-relative imports with `src/...`]: http://survivejs.com/webpack/requiring-files/
-[Vanilla HMR, webpack's hot-reload]: https://webpack.github.io/docs/hot-module-replacement-with-webpack.html
-[Browsersync]: https://browsersync.io/
-[ESLint]: http://eslint.org/
-[React]: https://facebook.github.io/react/
-[jsx-control-statements]: https://github.com/AlexGilleran/jsx-control-statements
-[sass / scss]: http://sass-lang.com/
-[css-modules]: https://github.com/css-modules/css-modules
-[Autoprefixer]: https://github.com/postcss/autoprefixer
-[powered by express]: http://expressjs.com/
-[react-router]: https://github.com/reactjs/react-router
-
-
-## FAQ
-- *I get an NPM warning after `--init` about `eslint-import-resolver`.*
-
-The package doesn't know that we're using webpack via the dev-toolkit and since webpack is not present in the dependencies, it throws an `UNMET PEER DEPENDENCY`-warning.
-
-- *The `dev-toolkit`-package is not part of the dependencies of the starting point I created with `--init`.*
-
-Since you already installed `dev-toolkit` globally, it would be easier to work on multiple projects without reinstalling the `dev-toolkit`-dependencies for each project. This way when you update the toolkit with `npm install -g dev-toolkit@version`, all your projects are updated as well.
-
-You can of course still pin your project with a specific version of the toolkit by running `npm install --save-dev dev-toolkit` inside your project folder.
-
----
-
-[![Codewake](https://www.codewake.com/badges/ask_question.svg)](https://www.codewake.com/p/dev-toolkit)
-[![Join the chat at https://gitter.im/stoikerty/dev-toolkit](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/stoikerty/dev-toolkit?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
-
-
-Fancy working on the toolkit itself? Check out [the Contributing Guidelines](/CONTRIBUTING.md).
-
----
-
-kindly supported by BrowserStack .
diff --git a/packages/dev-toolkit/Readme.md b/packages/dev-toolkit/Readme.md
new file mode 100644
index 00000000..1eb5cb16
--- /dev/null
+++ b/packages/dev-toolkit/Readme.md
@@ -0,0 +1,79 @@
+dev-toolkit
+
+Jump-start your react
-powered Universal App
+Designed for Veterans
+
+
+
+`dev-toolkit` provides you with an easy and quick way to get started with a pre-rendered &
+server-rendered app. After creating your starting point with the `init` command, you get full
+customizeability out of the box.
+
+### Quick Start
+
+```bash
+$ npm install -g dev-toolkit
+```
+
+```bash
+# Initialize a project with optional name, template, comments
+# The comments explain how the `dev-toolkit` works with the template
+$ dev-toolkit init [project_name] [--template template_name] [--skip-comments]
+```
+
+#### List of available templates
+
+* `standard` (default)
+* `with-eslint`
+* `with-sass`
+
+## Features
+
+* hot-reload on client by default
+* server-rendering
+* pre-rendering
+* creating a build
+* custom webpack config
+* use environment variables on client
+
+### No CSS by default
+
+With CSS-in-JS solutions on the rise, it would be unwise to include dependencies for css-modules,
+sass or less in every project that has `dev-toolkit` as a dependency which would introduce
+additional installation time and bloat. The aim of dev-toolkit is to be unopinionated so that it can
+be useful in many scenarios.
+
+## Contributing
+
+Check out the project locally & create a PR.
+
+```bash
+# Clone down the repo locally
+$ git clone git@github.com:stoikerty/dev-toolkit.git
+
+# Install root lerna dependencies
+$ cd dev-toolkit
+$ npm install
+
+# Bootstrap all packages
+$ npm run bootstrap
+# If you encounter linux/osx permission issues, try this
+$ npm run bootstrap-fix
+
+# Run feature tests
+$ cd feature-tests
+$ npm install
+$ npm run test
+```
+
+Your workflow will likely be to `cd` into a template of your choice in the `templates` directory
+where you can test `dev-toolkit` and in parallel (in a separate terminal) re-run the
+`bootstrap`-command in the root of the project after making changes in one of the `packages`.
+
+### Roadmap
+
+* Improved docs
+* Using your own (external) template - under consideration
+* Eject feature - under consideration
+* serverless template - in development
+* list differences between dev-toolkit, next.js & create-react-app
diff --git a/packages/dev-toolkit/babelrc.js b/packages/dev-toolkit/babelrc.js
deleted file mode 100644
index b28a28c6..00000000
--- a/packages/dev-toolkit/babelrc.js
+++ /dev/null
@@ -1,16 +0,0 @@
-module.exports = {
- babelrc: false,
-
- presets: [
- require.resolve('babel-preset-es2015'),
- require.resolve('babel-preset-stage-1'),
- require.resolve('babel-preset-react'),
- ],
- plugins: [
- require.resolve('jsx-control-statements'),
- require.resolve('babel-plugin-transform-class-properties'),
- require.resolve('babel-plugin-transform-react-jsx-source'),
- ],
-
- extensions: ['.jsx', '.js'],
-};
diff --git a/packages/dev-toolkit/bin/dev-toolkit.js b/packages/dev-toolkit/bin/dev-toolkit.js
deleted file mode 100755
index 8c24407f..00000000
--- a/packages/dev-toolkit/bin/dev-toolkit.js
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env node
-const spawn = require('cross-spawn');
-const chalk = require('chalk');
-const path = require('path');
-const argv = require('yargs')
- .alias('w', 'watch')
- .alias('b', 'build')
- .alias('i', 'init')
- .alias('s', 'serve')
- .alias('static', 'serve-static')
- .alias('d', 'debug').argv;
-const pkg = require('../package.json');
-
-// Enables debugging messages
-if (argv.debug) {
- process.env.TOOLKIT_DEBUG = true;
- console.log(chalk.magenta('DEBUG MODE'));
-} else {
- process.env.TOOLKIT_DEBUG = false;
-}
-
-// Outputs current version number from `package.json`
-if (argv.v || argv.version) {
- console.log('[', chalk.magenta(pkg.name + ' v' + pkg.version), ']');
-}
-
-const debug = require('./utils/debug');
-
-// runs corresponding script inside `./scripts`-folder
-function run(options) {
- console.log(chalk.magenta('[ ' + options.script + ' ]'), '- ' + options.message + '\n');
-
- const isWin = process.platform === 'win32';
- const currentPath = path.resolve(process.cwd());
- const devToolkitPath = path.resolve(__dirname, 'dev-toolkit.js');
-
- debug('Toolkit Version', pkg.version);
- debug('Platform', process.platform);
- debug('NODE_PATH', process.env.NODE_PATH);
- debug('currentPath', currentPath);
- debug('devToolkitPath', devToolkitPath);
- debug('given arguments', argv);
- debug('');
-
- debug('running Script:', options.script);
- var args = [ path.resolve(__dirname, 'scripts/' + options.script + '.js') ];
-
- debug('...with options:', options);
- debug('...with arguments:', options.args);
- args = args.concat(options.args);
-
- // Add color support for dependency-modules like `chalk`
- args.push('--color');
-
- debug(chalk.magenta('---'));
-
- // Forward all environment variables to `spawn` so they can be used within the toolkit
- const spawnEnv = process.env;
- // Fixes `spawn node ENOENT` error by always transferring PATH
- // http://stackoverflow.com/questions/27688804/how-do-i-debug-error-spawn-enoent-on-node-js
- spawnEnv.PATH = process.env.PATH;
- // Toolkit-related env variables
- spawnEnv.NODE_PATH = currentPath;
- spawnEnv.TOOLKIT_DEBUG = process.env.TOOLKIT_DEBUG;
-
- // spawn is required for root-relative imports to work in server-rendering, because webpack's
- // alias is not picked up in node. For other solutions, see the following:
- // https://gist.github.com/branneman/8048520
- // https://lostechies.com/derickbailey/2014/02/20/how-i-work-around-the-require-problem-in-nodejs/
- spawn(
- 'node',
- args,
- {
- env: spawnEnv,
-
- // OSX will throw error if shell is not set
- shell: !isWin,
- stdio: 'inherit',
- }
- );
-}
-
-if (argv.watch) {
- run({
- script: 'watch',
- message: 'Watching files for development',
- args: [argv.watch],
- });
-}
-if (argv.serve) {
- run({
- script: 'serve',
- message: 'Watching files for development',
- args: [argv.serve],
- });
-}
-if (argv['serve-static']) {
- console.log(chalk.magenta('NOTE:'), 'This command is not meant for production use.');
- run({
- script: 'serveStatic',
- message: 'Serving the /build folder using a minimal server',
- args: [argv['serve-static']],
- });
-}
-if (argv.init) {
- run({
- script: 'init',
- message: 'Initializing new project',
- args: [argv.init],
- });
-}
-if (argv.build) {
- run({
- script: 'build',
- message: 'Creating a static build' + (argv.dynamic ? ' with dynamic pages' : ''),
- args: [(argv.dynamic ? 'dynamic' : '')],
- });
-}
diff --git a/packages/dev-toolkit/bin/scripts/build.js b/packages/dev-toolkit/bin/scripts/build.js
deleted file mode 100644
index 0475f6e9..00000000
--- a/packages/dev-toolkit/bin/scripts/build.js
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env node
-require('../utils/bootstrap');
-
-global.toolkitScript = 'build';
-global.scriptOptions = {
- dynamic: process.argv[2] === 'dynamic',
-};
-require('../../dist/build');
diff --git a/packages/dev-toolkit/bin/scripts/init.js b/packages/dev-toolkit/bin/scripts/init.js
deleted file mode 100644
index bcd517a8..00000000
--- a/packages/dev-toolkit/bin/scripts/init.js
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env node
-const spawn = require('cross-spawn');
-const chalk = require('chalk');
-const path = require('path');
-const fse = require('fs-extra');
-const debug = require('../utils/debug');
-const appName = process.argv[2];
-
-// TODO: Use a better method than checking against `true`-string to know if appName is defined
-if (appName && appName !== 'true') {
- const startingPoint = path.resolve(__dirname, '../../starting-point');
- const appPath = path.resolve(process.cwd(), appName);
-
- debug('startingPoint', startingPoint);
- debug('appPath', appPath);
-
- fse.copy(startingPoint, appPath, function (err) {
- if (err) return console.error(err);
-
- console.log(chalk.green('->') + ' created files for ' + chalk.magenta(appName));
- console.log(chalk.green('->') + ' installing app dependencies...');
-
- const isWin = process.platform === 'win32';
-
- spawn.sync(
- 'npm',
- ['install'],
- {
- env: isWin ? {
- PATH: process.env.PATH,
- APPDATA: process.env.APPDATA,
- } : {
- PATH: process.env.PATH,
- },
-
- // OSX will throw error if shell is not set
- // shell: !isWin,
- stdio: 'inherit',
- cwd: appPath,
- }
- );
-
- // TODO: #bug #windows
- // Not sure why an `undefined`-folder gets created after spawn.
- // Current Solution is to delete it again. (Without `spawn`, no folder is created.)
- const undefinedFolder = path.resolve(appPath, 'undefined');
- fse.removeSync(undefinedFolder);
- });
-} else {
- console.log('Please specify a name for your app.');
- console.log(chalk.yellow('dev-toolkit --init my_app'));
-}
diff --git a/packages/dev-toolkit/bin/scripts/serve.js b/packages/dev-toolkit/bin/scripts/serve.js
deleted file mode 100644
index a8359647..00000000
--- a/packages/dev-toolkit/bin/scripts/serve.js
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env node
-require('../utils/bootstrap');
-
-global.toolkitScript = 'serve';
-global.scriptOptions = {};
-require('../../dist/serve');
diff --git a/packages/dev-toolkit/bin/scripts/serveStatic.js b/packages/dev-toolkit/bin/scripts/serveStatic.js
deleted file mode 100644
index 34ac687e..00000000
--- a/packages/dev-toolkit/bin/scripts/serveStatic.js
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env node
-require('../utils/bootstrap');
-
-global.toolkitScript = 'serveStatic';
-global.scriptOptions = {};
-require('../../dist/serveStatic');
diff --git a/packages/dev-toolkit/bin/scripts/watch.js b/packages/dev-toolkit/bin/scripts/watch.js
deleted file mode 100644
index 69e527f1..00000000
--- a/packages/dev-toolkit/bin/scripts/watch.js
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env node
-require('../utils/bootstrap');
-
-global.toolkitScript = 'watch';
-global.scriptOptions = {};
-require('../../dist/watch');
diff --git a/packages/dev-toolkit/bin/utils/bootstrap.js b/packages/dev-toolkit/bin/utils/bootstrap.js
deleted file mode 100644
index 550d6cbf..00000000
--- a/packages/dev-toolkit/bin/utils/bootstrap.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const debug = require('./debug');
-const chalk = require('chalk');
-const path = require('path');
-const jsxHook = require('node-jsx-babel');
-
-const babelConfig = require(path.resolve(__dirname, '../../babelrc.js'));
-
-// Set up server-side rendering for jsx-files
-// NOTE:
-// This statement is here due to a race-condition.
-// It needs to be called before `babel-register`, otherwise it would be in `...config/loaders.js`
-jsxHook.install();
-
-require('babel-register')(babelConfig);
-global.toolkitCli = {
- isDev: true,
-};
-
-debug('NODE_PATH', process.env.NODE_PATH);
-debug(chalk.magenta('---'));
diff --git a/packages/dev-toolkit/bin/utils/debug.js b/packages/dev-toolkit/bin/utils/debug.js
deleted file mode 100644
index 99143bb8..00000000
--- a/packages/dev-toolkit/bin/utils/debug.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const chalk = require('chalk');
-
-module.exports = function debug() {
- if (process.env.TOOLKIT_DEBUG === 'true') {
- var allArgs = [
- chalk.magenta('|| ') +
- chalk.blue(arguments['0'])
- ];
- allArgs = allArgs.concat([].splice.call(arguments, 1));
- console.log.apply(console, allArgs);
- }
-}
diff --git a/packages/dev-toolkit/dev-toolkit-logo.png b/packages/dev-toolkit/dev-toolkit-logo.png
deleted file mode 100644
index de48c5d4..00000000
Binary files a/packages/dev-toolkit/dev-toolkit-logo.png and /dev/null differ
diff --git a/packages/dev-toolkit/dev-toolkit.js b/packages/dev-toolkit/dev-toolkit.js
new file mode 100644
index 00000000..06968d04
--- /dev/null
+++ b/packages/dev-toolkit/dev-toolkit.js
@@ -0,0 +1,5 @@
+const devToolkit = require('./dist/npmExport/dev-toolkit');
+
+// Allow importing with `require` and as default with `import`
+module.exports = devToolkit.default;
+module.exports.default = devToolkit.default;
diff --git a/packages/dev-toolkit/package-lock.json b/packages/dev-toolkit/package-lock.json
new file mode 100644
index 00000000..c932ba58
--- /dev/null
+++ b/packages/dev-toolkit/package-lock.json
@@ -0,0 +1,5663 @@
+{
+ "name": "dev-toolkit",
+ "version": "6.0.2",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "acorn": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="
+ },
+ "acorn-dynamic-import": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz",
+ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=",
+ "requires": {
+ "acorn": "4.0.13"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.4.0.tgz",
+ "integrity": "sha1-MtHPCNvIDEMvQm8S4QslEfa0ZHQ=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I="
+ },
+ "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.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ },
+ "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.6"
+ }
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+ },
+ "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.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "requires": {
+ "micromatch": "2.3.11",
+ "normalize-path": "2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "1.1.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-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "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
+ },
+ "asn1.js": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
+ "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assertion-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz",
+ "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=",
+ "dev": true
+ },
+ "assets-webpack-plugin": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz",
+ "integrity": "sha1-kxzg1m1C6I7V5/GNZVIpQ8V6OH0=",
+ "requires": {
+ "camelcase": "1.2.1",
+ "escape-string-regexp": "1.0.5",
+ "lodash.assign": "3.2.0",
+ "lodash.merge": "3.3.2",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "babel-cli": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
+ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-polyfill": "6.26.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "chokidar": "1.7.0",
+ "commander": "2.12.1",
+ "convert-source-map": "1.5.1",
+ "fs-readdir-recursive": "1.1.0",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "output-file-sync": "1.1.2",
+ "path-is-absolute": "1.0.1",
+ "slash": "1.0.0",
+ "source-map": "0.5.7",
+ "v8flags": "2.1.1"
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-eslint": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz",
+ "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-explode-class": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
+ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
+ "requires": {
+ "babel-helper-bindify-decorators": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-loader": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
+ "requires": {
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz",
+ "integrity": "sha512-yeDwKaLgGdTpXL7RgGt5r6T4LmnTza/hUn5Ul8uZSGGMtEjYo13Nxai7SQaGCTEzUtg9Zq9qJn0EjEr7SeSlTQ==",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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="
+ },
+ "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=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-generators": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-syntax-class-constructor-call": "6.18.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-class-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
+ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-plugin-syntax-class-properties": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-decorators": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
+ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
+ "requires": {
+ "babel-helper-explode-class": "6.24.1",
+ "babel-plugin-syntax-decorators": "6.13.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "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.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.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=",
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.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=",
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.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=",
+ "requires": {
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.9.1",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "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=",
+ "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"
+ }
+ },
+ "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=",
+ "requires": {
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-transform-class-properties": "6.24.1",
+ "babel-plugin-transform-decorators": "6.24.1",
+ "babel-preset-stage-3": "6.24.1"
+ }
+ },
+ "babel-preset-stage-3": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
+ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
+ "requires": {
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-generator-functions": "6.24.1",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-object-rest-spread": "6.26.0"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runner": {
+ "version": "1.0.0-beta-5",
+ "resolved": "https://registry.npmjs.org/babel-runner/-/babel-runner-1.0.0-beta-5.tgz",
+ "integrity": "sha512-rUWfh7HVPci4iJRnfrqQurKo/WjL0r30XFH2MlkYD/CT37G4VVltOuhPzmdeSoYGCzHxgETeA5VjnHA4HCHBNA==",
+ "requires": {
+ "babel-register": "6.26.0",
+ "file-exists": "4.0.0"
+ }
+ },
+ "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": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "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"
+ }
+ },
+ "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",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base64-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
+ "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw=="
+ },
+ "better-npm-run": {
+ "version": "0.0.14",
+ "resolved": "https://registry.npmjs.org/better-npm-run/-/better-npm-run-0.0.14.tgz",
+ "integrity": "sha1-agOxoZ22MgUULXgDmV8jx3kHA4k=",
+ "dev": true,
+ "requires": {
+ "dotenv": "2.0.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "big.js": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
+ "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
+ },
+ "binary-extensions": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
+ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserify-aes": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
+ "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
+ "requires": {
+ "buffer-xor": "1.0.3",
+ "cipher-base": "1.0.4",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
+ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
+ "requires": {
+ "browserify-aes": "1.1.1",
+ "browserify-des": "1.0.0",
+ "evp_bytestokey": "1.0.3"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
+ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "des.js": "1.0.0",
+ "inherits": "2.0.3"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "randombytes": "2.0.5"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "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"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "1.0.6"
+ }
+ },
+ "browserslist": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.1.tgz",
+ "integrity": "sha512-3n3nPdbUqn3nWmsy4PeSQthz2ja1ndpoXta+dwFFNhveGjMg6FXpWYe12vsTpNoXJbzx3j7GZXdtoVIdvh3JbA==",
+ "requires": {
+ "caniuse-lite": "1.0.30000770",
+ "electron-to-chromium": "1.3.27"
+ }
+ },
+ "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"
+ }
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "build": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz",
+ "integrity": "sha1-cH/gJv/O3crL/c3zVur9pk8VEEY=",
+ "dev": true,
+ "requires": {
+ "cssmin": "0.3.2",
+ "jsmin": "1.0.1",
+ "jxLoader": "0.1.1",
+ "moo-server": "1.3.0",
+ "promised-io": "0.3.5",
+ "timespan": "2.3.0",
+ "uglify-js": "1.3.5",
+ "walker": "1.0.7",
+ "winston": "2.4.0",
+ "wrench": "1.3.9"
+ },
+ "dependencies": {
+ "uglify-js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz",
+ "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=",
+ "dev": true
+ }
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bundle-loader": {
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/bundle-loader/-/bundle-loader-0.5.5.tgz",
+ "integrity": "sha1-Ef17CO34ah1wjvyx7KYspR9sNoo=",
+ "requires": {
+ "loader-utils": "1.1.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000770",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000770.tgz",
+ "integrity": "sha1-vI5/ULBzJzOQ22qzVzeJCaFOm9s="
+ },
+ "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.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.0.2",
+ "deep-eql": "0.1.3",
+ "type-detect": "1.0.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"
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "requires": {
+ "anymatch": "1.3.2",
+ "async-each": "1.0.1",
+ "fsevents": "1.1.3",
+ "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"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.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
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz",
+ "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY="
+ },
+ "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": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "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="
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.1.tgz",
+ "integrity": "sha512-PCNLExLlI5HiPdaJs4pMXwOTHkSCpNQ1QJH9ykZLKtKEyKu3p9HgmH5l97vM8c0IUz6d54l+xEu2GG9yuYrFzA==",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "0.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU="
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "create-ecdh": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
+ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "elliptic": "6.4.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
+ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "requires": {
+ "cipher-base": "1.0.4",
+ "inherits": "2.0.3",
+ "ripemd160": "2.0.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
+ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
+ "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.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=",
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "1.0.0",
+ "browserify-sign": "4.0.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.14",
+ "public-encrypt": "4.0.0",
+ "randombytes": "2.0.5",
+ "randomfill": "1.0.3"
+ }
+ },
+ "cssmin": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz",
+ "integrity": "sha1-3c5MVHtRCuDVlKjx+/iq+OLFwA0=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "requires": {
+ "es5-ext": "0.10.37"
+ }
+ },
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decomment": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.1.tgz",
+ "integrity": "sha512-9vwabbCoArDvgbZnFqWcGPVvSIIvWTNu1yaAc3Tg3q5pOzORo6nANO3TPwBuiKwN7stMDZJgNnR6USU3H6EQrQ==",
+ "requires": {
+ "esprima": "4.0.0"
+ }
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "dev": true,
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+ "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-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
+ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "miller-rabin": "4.0.1",
+ "randombytes": "2.0.5"
+ }
+ },
+ "dirty-chai": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/dirty-chai/-/dirty-chai-1.2.2.tgz",
+ "integrity": "sha1-eEleYZY19/5EIZqkyDeEm/GDFC4=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "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="
+ },
+ "dotenv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz",
+ "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.27",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz",
+ "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0="
+ },
+ "elliptic": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "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"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "enhanced-resolve": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
+ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "memory-fs": "0.4.1",
+ "object-assign": "4.1.1",
+ "tapable": "0.2.8"
+ }
+ },
+ "errno": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
+ "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=",
+ "requires": {
+ "prr": "0.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.37",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.37.tgz",
+ "integrity": "sha1-DudB0Ui4AGm6J9AgOTdWryV978M=",
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
+ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "chalk": "1.1.3",
+ "concat-stream": "1.6.0",
+ "debug": "2.6.9",
+ "doctrine": "2.0.0",
+ "escope": "3.6.0",
+ "espree": "3.5.2",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "glob": "7.1.2",
+ "globals": "9.18.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "0.12.0",
+ "is-my-json-valid": "2.16.1",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "1.2.1",
+ "progress": "1.1.8",
+ "require-uncached": "1.0.3",
+ "shelljs": "0.7.8",
+ "strip-bom": "3.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "3.8.3",
+ "text-table": "0.2.0",
+ "user-home": "2.0.0"
+ },
+ "dependencies": {
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ }
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "11.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz",
+ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==",
+ "dev": true,
+ "requires": {
+ "eslint-restricted-globals": "0.1.1"
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-2.6.0.tgz",
+ "integrity": "sha1-8h2w67Q4rWePuYlGCXxLsZi+/Mw=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "5.0.1"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "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.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "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.1"
+ }
+ },
+ "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.1.2"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "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"
+ },
+ "dependencies": {
+ "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-plugin-prettier": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.3.1.tgz",
+ "integrity": "sha512-AV8shBlGN9tRZffj5v/f4uiQWlP3qiQ+lh+BhTqRLuKSyczx+HRWVkVZaf7dOmguxghAH1wftnou/JUEEChhGg==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "1.1.2",
+ "jest-docblock": "21.2.0"
+ }
+ },
+ "eslint-restricted-globals": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz",
+ "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "esprima-extract-comments": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-0.2.1.tgz",
+ "integrity": "sha1-kBjY3zf/2V3WFQFajF8Ede10NCM=",
+ "requires": {
+ "esprima": "2.7.3"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ }
+ }
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "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="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.37"
+ }
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "requires": {
+ "cross-spawn": "5.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"
+ }
+ },
+ "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"
+ }
+ },
+ "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=",
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "extract-comments": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-0.10.1.tgz",
+ "integrity": "sha1-i2AxgIovX94c1nv4MXuRggQwRAg=",
+ "requires": {
+ "define-property": "0.2.5",
+ "esprima-extract-comments": "0.2.1",
+ "extend-shallow": "2.0.1",
+ "parse-code-context": "0.2.2"
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "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="
+ },
+ "fast-diff": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
+ "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==",
+ "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="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/file-exists/-/file-exists-4.0.0.tgz",
+ "integrity": "sha1-EE6s8l0/1rPkYpUa6SNTMZX/tSs="
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "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"
+ }
+ },
+ "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=",
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.1.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=",
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "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"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "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.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
+ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
+ "optional": true,
+ "requires": {
+ "nan": "2.8.0",
+ "node-pre-gyp": "0.6.39"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.2.9"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "optional": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "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
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": 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"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": 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"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": 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",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "node-pre-gyp": {
+ "version": "0.6.39",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "1.0.2",
+ "hawk": "3.1.3",
+ "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",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.1",
+ "bundled": 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",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.2.9",
+ "bundled": 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",
+ "bundled": 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",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.0",
+ "bundled": 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",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ },
+ "tar-pack": {
+ "version": "3.4.0",
+ "bundled": 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",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "uuid": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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="
+ },
+ "get-stdin": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
+ "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "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"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "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=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "hash-base": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
+ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "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==",
+ "requires": {
+ "inherits": "2.0.3",
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "1.1.3",
+ "minimalistic-assert": "1.0.0",
+ "minimalistic-crypto-utils": "1.0.1"
+ }
+ },
+ "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=",
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "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=="
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "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.2.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"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.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.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA="
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "requires": {
+ "loose-envify": "1.3.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="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "3.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.6"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "1.11.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "3.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.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "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-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "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-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"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
+ "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "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.6"
+ }
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.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-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-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-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "jest-docblock": {
+ "version": "21.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz",
+ "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==",
+ "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="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ },
+ "jsmin": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz",
+ "integrity": "sha1-570NzWSWw79IYyNb9GGj2YqjuYw=",
+ "dev": true
+ },
+ "json-loader": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
+ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "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=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "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=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "just-extend": {
+ "version": "1.1.27",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz",
+ "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==",
+ "dev": true
+ },
+ "jxLoader": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz",
+ "integrity": "sha1-ATTqUUTlM7WU/B/yX/GU4jXFPs0=",
+ "dev": true,
+ "requires": {
+ "js-yaml": "0.3.7",
+ "moo-server": "1.3.0",
+ "promised-io": "0.3.5",
+ "walker": "1.0.7"
+ },
+ "dependencies": {
+ "js-yaml": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz",
+ "integrity": "sha1-1znY7oZGHlSzVNan19HyrZoWf2I=",
+ "dev": true
+ }
+ }
+ },
+ "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=="
+ },
+ "klaw-sync": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-3.0.2.tgz",
+ "integrity": "sha512-32bw9y2nKrnpX2LsJnDTBO2TSdOKPbXfQAWl7Lupcc3D0iKkzI/sQDEw1GjkOuTqZEhe+bVxKSlhSRLxyeytcw==",
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "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=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "loader-runner": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz",
+ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI="
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4="
+ },
+ "lodash._arraycopy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz",
+ "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE="
+ },
+ "lodash._arrayeach": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz",
+ "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754="
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY="
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._basefor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz",
+ "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI="
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
+ "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4="
+ },
+ "lodash._createassigner": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
+ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
+ "requires": {
+ "lodash._bindcallback": "3.0.1",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash.restparam": "3.6.1"
+ }
+ },
+ "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.assign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
+ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._createassigner": "3.1.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "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.isplainobject": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz",
+ "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=",
+ "requires": {
+ "lodash._basefor": "3.0.3",
+ "lodash.isarguments": "3.1.0",
+ "lodash.keysin": "3.0.8"
+ }
+ },
+ "lodash.istypedarray": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz",
+ "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I="
+ },
+ "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.keysin": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz",
+ "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=",
+ "requires": {
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.merge": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-3.3.2.tgz",
+ "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=",
+ "requires": {
+ "lodash._arraycopy": "3.0.0",
+ "lodash._arrayeach": "3.0.0",
+ "lodash._createassigner": "3.1.1",
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4",
+ "lodash.isplainobject": "3.2.0",
+ "lodash.istypedarray": "3.0.6",
+ "lodash.keys": "3.1.2",
+ "lodash.keysin": "3.0.8",
+ "lodash.toplainobject": "3.0.0"
+ }
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
+ },
+ "lodash.toplainobject": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz",
+ "integrity": "sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=",
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keysin": "3.0.8"
+ }
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "requires": {
+ "chalk": "1.1.3"
+ }
+ },
+ "lolex": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz",
+ "integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "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"
+ }
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.4"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "0.1.4",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "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.4"
+ },
+ "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.6"
+ }
+ }
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "4.11.8",
+ "brorand": "1.1.0"
+ }
+ },
+ "mime": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.5.0.tgz",
+ "integrity": "sha512-v/jMDoK/qKptnTuC3YUNbIj8uUYvTCIHzVu9BHldKSWja48wusAtfjlcBlqnFrqClu3yf69ScDxBPrIyFnF51g=="
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg="
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "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"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "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"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "moo-server": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz",
+ "integrity": "sha1-XceVaVZaENbv7VQ5SR5p0jkuWPE=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "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
+ },
+ "nan": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
+ "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=",
+ "optional": true
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nise": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz",
+ "integrity": "sha512-q9jXh3UNsMV28KeqI43ILz5+c3l+RiNW8mhurEwCKckuHQbL+hTJIKKTiUlCPKlgQ/OukFvSnKB/Jk3+sFbkGA==",
+ "dev": true,
+ "requires": {
+ "formatio": "1.2.0",
+ "just-extend": "1.1.27",
+ "lolex": "1.6.0",
+ "path-to-regexp": "1.7.0",
+ "text-encoding": "0.6.4"
+ },
+ "dependencies": {
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "requires": {
+ "assert": "1.4.1",
+ "browserify-zlib": "0.2.0",
+ "buffer": "4.9.1",
+ "console-browserify": "1.1.0",
+ "constants-browserify": "1.0.0",
+ "crypto-browserify": "3.12.0",
+ "domain-browser": "1.1.7",
+ "events": "1.1.1",
+ "https-browserify": "1.0.0",
+ "os-browserify": "0.3.0",
+ "path-browserify": "0.0.0",
+ "process": "0.11.10",
+ "punycode": "1.4.1",
+ "querystring-es3": "0.2.1",
+ "readable-stream": "2.3.3",
+ "stream-browserify": "2.0.1",
+ "stream-http": "2.7.2",
+ "string_decoder": "1.0.3",
+ "timers-browserify": "2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "0.11.0",
+ "util": "0.10.3",
+ "vm-browserify": "0.0.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.4.1",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "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"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "ora": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-1.3.0.tgz",
+ "integrity": "sha1-gAeN0rkqk0r2ajrXKluRBpTt5Ro=",
+ "requires": {
+ "chalk": "1.1.3",
+ "cli-cursor": "2.1.0",
+ "cli-spinners": "1.1.0",
+ "log-symbols": "1.0.2"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "output-file-sync": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz",
+ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw="
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "pako": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
+ },
+ "parse-asn1": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
+ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
+ "requires": {
+ "asn1.js": "4.9.2",
+ "browserify-aes": "1.1.1",
+ "create-hash": "1.1.3",
+ "evp_bytestokey": "1.0.3",
+ "pbkdf2": "3.0.14"
+ }
+ },
+ "parse-code-context": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-0.2.2.tgz",
+ "integrity": "sha1-FEuK+3IZSC1+iMHranZVlvOmrA0="
+ },
+ "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"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "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=",
+ "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-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"
+ },
+ "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-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ }
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.14",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
+ "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "requires": {
+ "create-hash": "1.1.3",
+ "create-hmac": "1.1.6",
+ "ripemd160": "2.0.1",
+ "safe-buffer": "5.1.1",
+ "sha.js": "2.4.9"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ },
+ "prettier": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.7.4.tgz",
+ "integrity": "sha1-XoYkrpNjyA+V7GRFhOzfVddPk/o=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "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": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "promised-io": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.5.tgz",
+ "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=",
+ "dev": true
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo="
+ },
+ "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=",
+ "requires": {
+ "bn.js": "4.11.8",
+ "browserify-rsa": "4.0.1",
+ "create-hash": "1.1.3",
+ "parse-asn1": "5.1.0",
+ "randombytes": "2.0.5"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "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="
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.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.6"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz",
+ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
+ "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "requires": {
+ "randombytes": "2.0.5",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.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==",
+ "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"
+ }
+ },
+ "readdirp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
+ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "readable-stream": "2.3.3",
+ "set-immediate-shim": "1.0.1"
+ }
+ },
+ "readline2": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "mute-stream": "0.0.5"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A=="
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "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="
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "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.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
+ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "requires": {
+ "hash-base": "2.0.2",
+ "inherits": "2.0.3"
+ }
+ },
+ "run-async": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.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=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
+ },
+ "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="
+ },
+ "sha.js": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz",
+ "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "shelljs": {
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "interpret": "1.0.4",
+ "rechoir": "0.6.2"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "sinon": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-3.3.0.tgz",
+ "integrity": "sha512-/flfGfIxIRXSvZBHJzIf3iAyGYkmMQq6SQjA0cx9SOuVuq+4ZPPO4LJtH1Ce0Lznax1KSG1U6Dad85wIcSW19w==",
+ "dev": true,
+ "requires": {
+ "build": "0.1.4",
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lodash.get": "4.4.2",
+ "lolex": "2.3.1",
+ "native-promise-only": "0.8.1",
+ "nise": "1.2.0",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.5"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.5.tgz",
+ "integrity": "sha512-N9IvkQslUGYGC24RkJk1ba99foK6TkwC2FHAEBlQFBP0RxQZS8ZpJuAZcwiY/w9ZJHFQb1aOXBI60OdxhTrwEQ==",
+ "dev": true
+ }
+ }
+ },
+ "sinon-chai": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
+ "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "source-list-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "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="
+ },
+ "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="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "stream-http": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
+ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==",
+ "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"
+ }
+ },
+ "string-length": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+ "requires": {
+ "astral-regex": "1.0.0",
+ "strip-ansi": "4.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="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "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="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-comments": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-0.4.4.tgz",
+ "integrity": "sha1-ucqvxP6QX5bAkd+J+achXyqmKcY=",
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "extract-comments": "0.10.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ },
+ "table": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "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": {
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "tapable": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz",
+ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c="
+ },
+ "timers-browserify": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
+ "requires": {
+ "setimmediate": "1.0.5"
+ }
+ },
+ "timespan": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz",
+ "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=",
+ "dev": true
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "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="
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "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.7",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.0.2"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "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"
+ }
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.11"
+ }
+ },
+ "watchpack": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",
+ "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=",
+ "requires": {
+ "async": "2.6.0",
+ "chokidar": "1.7.0",
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "webpack": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.8.1.tgz",
+ "integrity": "sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==",
+ "requires": {
+ "acorn": "5.2.1",
+ "acorn-dynamic-import": "2.0.2",
+ "ajv": "5.4.0",
+ "ajv-keywords": "2.1.1",
+ "async": "2.6.0",
+ "enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
+ "interpret": "1.0.4",
+ "json-loader": "0.5.7",
+ "json5": "0.5.1",
+ "loader-runner": "2.3.0",
+ "loader-utils": "1.1.0",
+ "memory-fs": "0.4.1",
+ "mkdirp": "0.5.1",
+ "node-libs-browser": "2.1.0",
+ "source-map": "0.5.7",
+ "supports-color": "4.5.0",
+ "tapable": "0.2.8",
+ "uglifyjs-webpack-plugin": "0.4.6",
+ "watchpack": "1.4.0",
+ "webpack-sources": "1.0.2",
+ "yargs": "8.0.2"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.1.tgz",
+ "integrity": "sha512-UzyVg/CKBKkymDpqOoQ4mWTs9zQp0DPCY8zbol9K0tPhqoM+JU5knKGXyMQ/Cdrmzb9Cw3eetm67fIsJ7u7ryg==",
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.5.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ }
+ },
+ "webpack-hot-middleware": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.20.0.tgz",
+ "integrity": "sha512-AYwVG9DCvMoXbwx8eK16CbJY3Ltwap44lW3T7hFsE0U3zRwtViHMw1DFpY5hMwXNqKsUk3HtNcf3PoV+gIxJeg==",
+ "requires": {
+ "ansi-html": "0.0.7",
+ "html-entities": "1.2.1",
+ "querystring": "0.2.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz",
+ "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==",
+ "requires": {
+ "source-list-map": "2.0.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "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": {
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "wrench": {
+ "version": "1.3.9",
+ "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz",
+ "integrity": "sha1-bxPsNRRTF+spLKX2UxORskQRFBE=",
+ "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"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "requires": {
+ "camelcase": "4.1.0",
+ "cliui": "3.2.0",
+ "decamelize": "1.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"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "1.0.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=",
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ }
+ }
+ }
+ }
+}
diff --git a/packages/dev-toolkit/package.json b/packages/dev-toolkit/package.json
index 6cba860f..19314c0d 100644
--- a/packages/dev-toolkit/package.json
+++ b/packages/dev-toolkit/package.json
@@ -1,31 +1,39 @@
{
"name": "dev-toolkit",
- "version": "5.6.0",
- "description": "Development Toolkit for React Veterans",
- "main": "index.js",
+ "version": "6.0.2",
+ "description": "Universal Development Toolkit for React Veterans",
+ "main": "dev-toolkit.js",
+ "files": [
+ "dist",
+ "dev-toolkit.js",
+ "settings.js",
+ "bootstrap.js",
+ "Readme.md"
+ ],
"scripts": {
- "prepublish": "npm run build",
- "build": "babel src --presets es2015 --out-dir dist",
- "watch": "babel src --presets es2015 --watch --out-dir dist",
- "test": "echo \"Error: no test specified\" && exit 1"
+ "prepare": "npm run copy-readme && npm run build",
+ "copy-readme": "cp ../../Readme.md ./Readme.md",
+ "publish-beta": "npm publish --tag beta",
+ "build": "babel src --out-dir dist && node ./dist/postinstall-prepare/copy-templates",
+ "watch": "babel src --watch --out-dir dist",
+ "test": "bnr test",
+ "lint": "prettier --write './**/*.js' && eslint --config .eslintrc src"
+ },
+ "betterScripts": {
+ "test": {
+ "command": "mocha --opts .mocha.opts",
+ "env": {
+ "TOOLKIT_TEST": "true",
+ "NODE_PATH": "."
+ }
+ }
},
"bin": {
- "dev-toolkit": "bin/dev-toolkit.js"
+ "dev-toolkit": "dist/bin/index.js"
},
"repository": {
"type": "git",
- "url": "git+https://github.com/stoikerty/dev-toolkit.git"
- },
- "babel": {
- "presets": [
- "es2015",
- "stage-1",
- "react"
- ],
- "plugins": [
- "jsx-control-statements",
- "transform-class-properties"
- ]
+ "url": "https://github.com/stoikerty/dev-toolkit"
},
"keywords": [
"stoikerty",
@@ -38,7 +46,8 @@
"middleman",
"stk-toolkit",
"universal-dev-toolkit",
- "dev-toolkit"
+ "dev-toolkit",
+ "create-react-app"
],
"author": "Jorge Antunes @stoikerty",
"license": "ISC",
@@ -47,67 +56,40 @@
},
"homepage": "https://github.com/stoikerty/dev-toolkit#readme",
"dependencies": {
- "autoprefixer": "^6.3.7",
- "babel-cli": "^6.16.0",
- "babel-core": "^6.10.4",
- "babel-eslint": "^6.1.2",
- "babel-loader": "^6.2.4",
- "babel-plugin-transform-class-properties": "^6.10.2",
- "babel-plugin-transform-react-jsx-source": "^6.9.0",
- "babel-preset-es2015": "^6.16.0",
- "babel-preset-react": "^6.5.0",
- "babel-preset-stage-1": "^6.5.0",
- "babel-register": "^6.9.0",
- "body-parser": "^1.15.2",
- "browser-sync": "^2.17.5",
- "browser-sync-webpack-plugin": "^1.1.3",
- "bundle-loader": "^0.5.4",
- "chalk": "^1.1.3",
- "compression": "^1.6.2",
- "compression-webpack-plugin": "^0.3.1",
- "copy-webpack-plugin": "^3.0.1",
- "cross-env": "^2.0.0",
- "cross-spawn": "^4.0.0",
- "css-loader": "^0.23.1",
- "css-modules-require-hook": "^4.0.1",
- "dynamic-pages": "^0.3.0",
- "eazy-logger": "^3.0.2",
- "errorhandler": "^1.4.3",
+ "assets-webpack-plugin": "^3.5.1",
+ "babel-loader": "^7.1.2",
+ "babel-plugin-dynamic-import-node": "^1.0.2",
+ "babel-preset-env": "^1.6.0",
+ "babel-preset-stage-1": "^6.24.1",
+ "babel-runner": "1.0.0-beta-5",
+ "bundle-loader": "^0.5.5",
+ "cross-spawn": "^5.0.1",
+ "decomment": "^0.9.0",
+ "fs-extra": "^4.0.1",
+ "klaw-sync": "^3.0.0",
+ "ora": "^1.3.0",
+ "string-length": "^2.0.0",
+ "strip-comments": "^0.4.4",
+ "webpack": "^3.5.5",
+ "webpack-dev-middleware": "^1.12.0",
+ "webpack-hot-middleware": "^2.18.2",
+ "yargs": "^8.0.2"
+ },
+ "devDependencies": {
+ "babel-cli": "^6.26.0",
+ "babel-core": "^6.26.0",
+ "babel-eslint": "^7.2.3",
+ "better-npm-run": "^0.0.14",
+ "chai": "^3.5.0",
+ "dirty-chai": "^1.2.2",
"eslint": "^3.4.0",
- "eslint-config-airbnb": "^10.0.1",
- "eslint-import-resolver-webpack": "^0.5.1",
- "eslint-loader": "^1.5.0",
- "eslint-plugin-import": "^1.14.0",
- "eslint-plugin-jsx-a11y": "^2.2.1",
- "eslint-plugin-jsx-control-statements": "^2.1.1",
- "eslint-plugin-react": "^6.2.0",
- "express": "^4.14.0",
- "extract-text-webpack-plugin": "^1.0.1",
- "file-exists": "^2.0.0",
- "file-loader": "^0.9.0",
- "files-require-hook": "^1.0.0",
- "find-port": "^2.0.1",
- "handlebars": "^4.0.5",
- "handlebars-loader": "^1.3.0",
- "html-webpack-plugin": "^2.21.0",
- "image-webpack-loader": "^1.8.0",
- "jsdom": "^9.4.2",
- "json-loader": "^0.5.4",
- "jsx-control-statements": "^3.1.3",
- "manifest-revision-webpack-plugin": "^0.3.0",
- "method-override": "^2.3.6",
- "ncp": "^2.0.0",
- "node-jsx-babel": "^0.14.2",
- "node-sass": "^3.10.1",
- "postcss-loader": "^0.9.1",
- "progress-bar-webpack-plugin": "^1.8.0",
- "rimraf": "^2.5.4",
- "sass-loader": "^3.2.2",
- "script-ext-html-webpack-plugin": "^1.3.0",
- "style-loader": "^0.13.1",
- "webpack": "^1.13.1",
- "webpack-dev-middleware": "^1.6.1",
- "webpack-hot-middleware": "^2.10.0",
- "yargs": "^4.8.1"
+ "eslint-config-airbnb-base": "^11.3.1",
+ "eslint-config-prettier": "2.6.0",
+ "eslint-plugin-import": "^2.7.0",
+ "eslint-plugin-prettier": "2.3.1",
+ "mocha": "^3.5.0",
+ "prettier": "1.7.4",
+ "sinon": "^3.2.1",
+ "sinon-chai": "^2.13.0"
}
}
diff --git a/packages/dev-toolkit/settings.js b/packages/dev-toolkit/settings.js
index 8cba88a6..535b44db 100644
--- a/packages/dev-toolkit/settings.js
+++ b/packages/dev-toolkit/settings.js
@@ -1 +1 @@
-module.exports = require('./dist/src/settings');
+module.exports = require('./dist/npmExport/dev-toolkit/settings');
diff --git a/packages/dev-toolkit/src/_userSettings.js b/packages/dev-toolkit/src/_userSettings.js
deleted file mode 100644
index 2f18edec..00000000
--- a/packages/dev-toolkit/src/_userSettings.js
+++ /dev/null
@@ -1,111 +0,0 @@
-import fs from 'fs';
-import path from 'path';
-import fileExists from 'file-exists';
-
-import debug from './utils/debug';
-
-const requireOrNull = (requirePath) => (
- // eslint-disable-next-line global-require
- fileExists(requirePath) ? require(requirePath) : null
-);
-
-export const currentScript = global.toolkitScript;
-debug('currentScript', currentScript);
-
-export const scriptOptions = global.scriptOptions || {};
-debug('scriptOptions', scriptOptions);
-
-export const rootForProject = './';
-debug('rootForProject', rootForProject);
-
-export const rootForRequire = process.cwd();
-debug('rootForRequire', rootForRequire);
-
-export const rootForToolkit = path.resolve(__dirname, '../');
-debug('rootForToolkit', rootForToolkit);
-
-const pkg = requireOrNull(path.resolve(rootForRequire, 'package.json')) || {};
-export const sharedEnvs = pkg.toolkitSettings && pkg.toolkitSettings.sharedEnvs ?
- pkg.toolkitSettings.sharedEnvs : ['NODE_ENV'];
-debug('sharedEnvs', sharedEnvs);
-export const vendor = pkg.toolkitSettings && pkg.toolkitSettings.vendor ?
- pkg.toolkitSettings.vendor : [];
-debug('vendor', vendor);
-
-// NOTE: There's limited support for using these custom config escape hatches. You're on your own!
-export const overrideConfig = requireOrNull(
- path.resolve(
- rootForRequire,
- pkg.toolkitSettings.webpackConfigPath ?
- pkg.toolkitSettings.webpackConfigPath : 'customWebpackConfig.js'
- ));
-debug('overrideConfig', overrideConfig);
-
-// eslint-disable-next-line global-require
-const toolkitBabelConfig = requireOrNull(path.resolve(__dirname, '../babelrc.js')) || {};
-debug('toolkitBabelConfig', toolkitBabelConfig);
-
-// NOTE: There's limited support for using these custom config escape hatches. You're on your own!
-const overrideBabelConfig = requireOrNull(
- path.resolve(
- rootForRequire,
- pkg.toolkitSettings.babelConfigPath ? pkg.toolkitSettings.babelConfigPath : 'customBabelrc.js'
- )) || {};
-debug('overrideBabelConfig', overrideBabelConfig);
-if (overrideBabelConfig.presets) {
- toolkitBabelConfig.presets = toolkitBabelConfig.presets.concat(overrideBabelConfig.presets);
- delete overrideBabelConfig.presets;
-}
-if (overrideBabelConfig.plugins) {
- toolkitBabelConfig.plugins = toolkitBabelConfig.plugins.concat(overrideBabelConfig.plugins);
- delete overrideBabelConfig.plugins;
-}
-
-export const babelConfig = { ...toolkitBabelConfig, ...overrideBabelConfig };
-debug('babelConfig', babelConfig);
-
-const eslintProjectConfig = path.resolve(rootForProject, '.eslintrc');
-// eslint-disable-next-line global-require
-export const eslintConfig = JSON.parse(fs.readFileSync(eslintProjectConfig, 'utf8'));
-
-// environment variables & defaults
-export const env = {
- HOST: process.env.HOST || 'localhost',
- PORT: process.env.PORT || 2000,
- BROWSERSYNC_HOST: process.env.BROWSERSYNC_HOST || 'localhost',
- BROWSERSYNC_PORT: process.env.BROWSERSYNC_PORT || 3000,
- VERBOSE_LOGGING: process.env.VERBOSE_LOGGING || false,
-};
-
-const clientRoot = path.resolve(rootForProject, 'src/client');
-const serverRoot = path.resolve(rootForProject, 'src/server');
-const buildFolder = path.resolve(rootForProject, 'build');
-
-const clientAppEntryPoint = fileExists(path.resolve(clientRoot, 'app.js')) ?
- path.resolve(clientRoot, 'app.js') : path.resolve(clientRoot, 'app.jsx');
-const defaultPublicPath = '/';
-const publicPath = process.env.PUBLIC_PATH || defaultPublicPath;
-
-export const PATHS = {
- publicFilesFolder: path.resolve(serverRoot, 'public-files'),
- templateLocation: path.resolve(serverRoot, 'views/layout.hbs'),
- dynamicRenderFile: path.resolve(serverRoot, 'dynamicRender.js'),
-
- manifestRootAssetPath: './src/client',
- manifestFile: path.resolve(buildFolder, 'manifest.json'),
- eslintProjectConfig,
- scssIncludePaths: [clientRoot],
-
- clientRoot,
- serverRoot,
- clientAppEntryPoint,
- buildFolder,
- publicPath: (currentScript === 'watch') ? defaultPublicPath : publicPath,
-};
-debug('PATHS: ', PATHS);
-
-const watchNamingConvention = '[name]';
-export const buildNamingConvention = '[name].[chunkhash]';
-export const namingConvention =
- (currentScript === 'watch') ? watchNamingConvention : buildNamingConvention;
-export const cssChunkNaming = '[name]__[local]___[hash:base64:5]';
diff --git a/packages/dev-toolkit/src/bin/index.js b/packages/dev-toolkit/src/bin/index.js
new file mode 100644
index 00000000..28fd8d94
--- /dev/null
+++ b/packages/dev-toolkit/src/bin/index.js
@@ -0,0 +1,125 @@
+#!/usr/bin/env node
+import yargs from 'yargs';
+
+import { runCommand } from '../utilities';
+
+const devToolkit = ({ cmdArgs }) => {
+ // eslint-disable-next-line no-unused-expressions
+ yargs
+ .usage('\nUsage: dev-toolkit [options]')
+ .command({
+ command: 'init',
+ aliases: ['init', 'i'],
+ desc: 'Initializes a new project',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ projectName: argv._[1],
+ template: argv.template || false,
+ silent: argv.silent || false,
+ skipComments: argv.skipComments || argv['skip-comments'] || false,
+ },
+ command: 'init',
+ message: 'Initializing a new project',
+ }),
+ })
+ .command({
+ command: 'build',
+ aliases: ['build', 'b'],
+ desc: 'Generates a static build',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ silent: argv.silent || false,
+ skipPreRender:
+ argv.skipPreRender || argv['skip-prerender'] || argv['skip-pre-render'] || false,
+ },
+ command: 'build',
+ message: 'Generating a static build',
+ }),
+ })
+ .command({
+ command: 'version',
+ aliases: ['version', 'v', '-v'],
+ desc: 'Outputs current version number',
+ handler: () =>
+ runCommand({
+ options: {
+ programmatic: false,
+ },
+ command: 'version',
+ message: 'Output current version number',
+ skipPrimaryLog: true,
+ }),
+ })
+ .command({
+ command: 'watch',
+ aliases: ['watch', 'w'],
+ desc: 'Watches files for development',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ silent: argv.silent || false,
+ },
+ command: 'watch',
+ message: 'Watching files for development',
+ }),
+ })
+ .command({
+ command: 'serve',
+ aliases: ['serve', 's'],
+ desc: 'Serves the app',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ silent: argv.silent || false,
+ },
+ command: 'serve',
+ message: 'Serving app with `start`-method',
+ }),
+ })
+ .command({
+ command: 'preRender',
+ aliases: ['preRender', 'prerender', 'pre-render', 'p'],
+ desc: 'preRender the app',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ silent: argv.silent || false,
+ },
+ command: 'preRender',
+ message: 'Pre-rendering app with `preRender`-method',
+ }),
+ })
+ .command({
+ command: 'bootstrap',
+ aliases: ['bootstrap'],
+ desc:
+ 'Bootstraps a file with defined babel & nodeHooks configuration and makes dev-toolkit settings available for import',
+ handler: argv =>
+ runCommand({
+ options: {
+ programmatic: false,
+ silent: argv.silent || false,
+ file: argv.file || '',
+ },
+ command: 'bootstrap',
+ message: 'Bootstrap with universal configuration & dev-toolkit settings',
+ }),
+ })
+ .help().argv;
+
+ yargs.parse(cmdArgs);
+};
+
+// Run toolkit immediately using yargs if we're not testing it
+if (!process.env.TOOLKIT_TEST) {
+ devToolkit({ cmdArgs: process.argv });
+}
+
+export default devToolkit;
diff --git a/packages/dev-toolkit/src/bin/index.spec.js b/packages/dev-toolkit/src/bin/index.spec.js
new file mode 100644
index 00000000..0b64f4c2
--- /dev/null
+++ b/packages/dev-toolkit/src/bin/index.spec.js
@@ -0,0 +1,109 @@
+import { expect } from 'chai';
+import yargs from 'yargs';
+
+import sandbox from 'dist/utilities/testHelpers/sandbox';
+
+import { devToolkit } from './index';
+
+describe('dev-toolkit', () => {
+ describe('outputs current version', () => {
+ it('when given `-v` argument', () => {
+ sandbox.spy(console, 'log');
+ devToolkit({ cmdArgs: ['dev-toolkit', '-v'], runCommand: () => {} });
+ expect(console.log.calledOnce).to.equal(true);
+ });
+ it('when given `--version` argument', () => {
+ sandbox.spy(console, 'log');
+ devToolkit({ cmdArgs: ['dev-toolkit', '--version'], runCommand: () => {} });
+ expect(console.log.calledOnce).to.equal(true);
+ });
+ });
+
+ describe('runs the watch script', () => {
+ const processedArgs = yargs.alias('w', 'watch').parse(['dev-toolkit', '-w']);
+ const expectedOutput = {
+ script: 'watch',
+ message: 'Watching files for development',
+ args: [processedArgs.watch],
+ };
+
+ it('when given `-w` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '-w'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ it('when given `--watch` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '--watch'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ });
+
+ describe('runs the serve script', () => {
+ const processedArgs = yargs.alias('s', 'serve').parse(['dev-toolkit', '-s']);
+ const expectedOutput = {
+ script: 'serve',
+ message: 'Watching files for development',
+ args: [processedArgs.serve],
+ };
+
+ it('when given `-s` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '-s'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ it('when given `--serve` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '--serve'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ });
+
+ describe('runs the serveStatic script', () => {
+ const processedArgs = yargs.alias('static', 'serve-static').parse(['dev-toolkit', '--static']);
+ const expectedOutput = {
+ script: 'serveStatic',
+ message: 'Serving the /build folder using a minimal server',
+ args: [processedArgs['serve-static']],
+ };
+
+ it('when given `--static` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '--static'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ it('when given `--serve-static` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '--serve-static'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ });
+
+ describe('runs the init script', () => {
+ const processedArgs = yargs.alias('i', 'init').parse(['dev-toolkit', '-i']);
+ const expectedOutput = {
+ script: 'init',
+ message: 'Initializing new project',
+ args: [processedArgs.init],
+ };
+
+ it('when given `-i` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '-i'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ it('when given `--init` argument', () => {
+ const runCommand = sandbox.spy();
+
+ devToolkit({ cmdArgs: ['dev-toolkit', '--init'], runCommand });
+ expect(runCommand.calledWith(expectedOutput)).to.equal(true);
+ });
+ });
+});
diff --git a/packages/dev-toolkit/src/build.js b/packages/dev-toolkit/src/build.js
deleted file mode 100644
index e626e13d..00000000
--- a/packages/dev-toolkit/src/build.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import rimraf from 'rimraf';
-import webpack from 'webpack';
-import fileExists from 'file-exists';
-import DynamicPages from 'dynamic-pages';
-
-import debug from './utils/debug';
-import config from './webpack/config';
-import { scriptOptions, PATHS } from './_userSettings';
-
-// delete previous build folder & compile all files necessary for serving
-rimraf(PATHS.buildFolder, (error) => {
- if (error) {
- console.log(error);
- }
-
- if (scriptOptions.dynamic) {
- // Use similar setup as for a test-environment (but with NODE_ENV set to `production`)
- // eslint-disable-next-line global-require
- require('./utils/testHelpers/setupDOM');
-
- debug('dynamicRender.js exists?', fileExists(PATHS.dynamicRender));
- // The external render file needs to be imported before compilation, in case any stubs exist
- DynamicPages.importDynamicRenderFile({ dynamicRenderFile: PATHS.dynamicRenderFile });
-
- // eslint-disable-next-line global-require
- require('./utils/testHelpers/setupClientApp');
- }
-
- const compiler = webpack(config);
- compiler.run((err) => {
- if (err) {
- console.log(err);
- }
-
- if (scriptOptions.dynamic) {
- // Take index.html file and create an html-file for each route
- DynamicPages.generatePages({
- publicPath: PATHS.publicPath,
- buildFolder: PATHS.buildFolder,
- manifestFile: PATHS.manifestFile,
- doneCallback: () => console.log('\n โญ๏ธ Your build with dynamic pages is ready โญ๏ธ'),
- });
- } else {
- console.log(' โญ๏ธ Your build is ready โญ๏ธ');
- }
- });
-});
diff --git a/packages/dev-toolkit/src/commands/bootstrap.js b/packages/dev-toolkit/src/commands/bootstrap.js
new file mode 100644
index 00000000..d95fff82
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/bootstrap.js
@@ -0,0 +1,23 @@
+import path from 'path';
+import { pathExistsSync } from 'fs-extra';
+
+import { projectRoot } from '../webpack/projectSettings';
+import { help, log, bootstrap } from '../utilities';
+
+bootstrap({ skipServerImport: true }).then(() => {
+ // eslint-disable-next-line no-underscore-dangle
+ const file = global.__devToolkitCommandOptions.file || false;
+
+ if (file && typeof file === 'string') {
+ log({ message: 'Import your fileโฆ\n', useSeparator: true });
+ const pathName = path.resolve(projectRoot, file);
+
+ import(pathName).catch(error => {
+ help({
+ displayedWhen: file && !pathExistsSync(pathName),
+ warning: `File '${file}' doesn't exist.`,
+ error,
+ });
+ });
+ }
+});
diff --git a/packages/dev-toolkit/src/commands/build.js b/packages/dev-toolkit/src/commands/build.js
new file mode 100644
index 00000000..5f4545db
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/build.js
@@ -0,0 +1,49 @@
+import webpack from 'webpack';
+import { emptyDir } from 'fs-extra';
+
+import { buildFolder } from '../webpack/projectSettings';
+import generateConfig from '../webpack/config';
+import { log, bootstrap, preRender } from '../utilities';
+
+// eslint-disable-next-line no-underscore-dangle
+const skipPreRender = global.__devToolkitCommandOptions.skipPreRender || false;
+
+bootstrap().then(({ server, userSettings }) => {
+ const showSuccessMessage = () =>
+ log({ message: '\nโญ๏ธ Your build is ready โญ๏ธ\n', type: 'success' });
+
+ log({ message: 'Deleting previous build folderโฆ' });
+
+ // delete previous build folder & compile all files necessary for serving
+ emptyDir(buildFolder, error => {
+ log({ error });
+
+ let webpackAssets = {};
+ const config = generateConfig({
+ creatingBuild: true,
+ getWebpackAssets: assets => {
+ webpackAssets = assets;
+ return JSON.stringify(assets);
+ },
+ userSettings,
+ });
+
+ log({ message: 'Start Webpack & compile assetsโฆ' });
+
+ // Compile with middleware for hot-reloading
+ const compiler = webpack(config, webpackError => {
+ log({ error: webpackError });
+
+ compiler.run(compilerError => {
+ log({ error: compilerError });
+ log({ message: '\nโจ Finished compiling Assets.\n', type: 'success' });
+
+ if (userSettings.devToolkit.usePreRender && !skipPreRender) {
+ preRender({ server, webpackAssets, buildFolder }).then(showSuccessMessage);
+ } else {
+ showSuccessMessage();
+ }
+ });
+ });
+ });
+});
diff --git a/packages/dev-toolkit/src/commands/init.js b/packages/dev-toolkit/src/commands/init.js
new file mode 100644
index 00000000..bd6e43e0
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/init.js
@@ -0,0 +1,90 @@
+import { statSync, readdirSync } from 'fs';
+import { ensureDirSync, copySync, writeJson } from 'fs-extra';
+import { white } from 'chalk';
+import path from 'path';
+import spawn from 'cross-spawn';
+
+import {
+ generatedTemplates,
+ generatedTemplatesWithoutComments,
+ defaultTemplate,
+} from '../webpack/projectSettings';
+import { log, spinner } from '../utilities';
+
+/* eslint-disable no-underscore-dangle */
+const template = global.__devToolkitCommandOptions.template || '';
+const projectName = global.__devToolkitCommandOptions.projectName || 'my_app';
+const skipComments = global.__devToolkitCommandOptions.skipComments || false;
+
+const getTemplatesList = ({ folder }) => {
+ const onlyDirectories = file => statSync(path.join(folder, file)).isDirectory();
+ return readdirSync(generatedTemplates).filter(onlyDirectories);
+};
+const templatesList = getTemplatesList({ folder: generatedTemplates });
+const templateExists = templatesList.indexOf(template) > -1;
+const templateName = templateExists ? template : defaultTemplate;
+const isDefaultTemplate = templateName === defaultTemplate;
+
+if (template && !templateExists) {
+ log({ type: 'warning', message: `template files for '${template}' don't exist.` });
+ log({ message: 'You can use one of the following templates:' });
+ templatesList.forEach(name => log({ message: `โข ${name}` }));
+ log({
+ message: `\nProject will be initialized using default template files (${defaultTemplate}).`,
+ useSeparator: true,
+ });
+}
+
+const inputFolder = path.resolve(
+ skipComments ? generatedTemplatesWithoutComments : generatedTemplates,
+ templateName
+);
+const projectFolder = path.resolve(process.cwd(), projectName);
+
+ensureDirSync(projectFolder);
+copySync(inputFolder, projectFolder);
+
+const pkgPath = path.resolve(projectFolder, 'package.json');
+import(pkgPath).then(pkg => {
+ // Add name to generated project
+ writeJson(pkgPath, { ...pkg, name: projectName, description: projectName }, { spaces: 2 })
+ .then(() => {
+ log({ message: `Created project using ${white(templateName)} template in:` });
+ log({ message: `${projectFolder}\n` });
+
+ if (isDefaultTemplate) {
+ spinner.start({ message: `Installing NPM Dependencies for ${white(projectName)}` });
+ } else {
+ log({ message: `Installing NPM Dependencies for ${white(projectName)}โฆ\n` });
+ }
+
+ const spawnOptions = isDefaultTemplate
+ ? { cwd: projectFolder }
+ : {
+ cwd: projectFolder,
+ detached: true,
+ stdio: 'inherit',
+ };
+
+ spawn('npm', ['install'], spawnOptions).on('close', code => {
+ if (isDefaultTemplate) {
+ spinner.stop();
+ } else {
+ log({ message: ' ' });
+ }
+
+ if (code === 0) {
+ log({ type: 'success', message: `Dependencies for ${projectName} have been installed.` });
+ log({
+ message: `Get started by running \`${white(`cd ${projectName} && npm run dev`)}\``,
+ useSeparator: true,
+ });
+ } else {
+ log({ type: 'warning', message: `Failed to install Dependencies for ${projectName}.` });
+ }
+ });
+ })
+ .catch(error => {
+ log({ type: 'warning', message: `Failed create project with name ${projectName}.`, error });
+ });
+});
diff --git a/packages/dev-toolkit/src/commands/preRender.js b/packages/dev-toolkit/src/commands/preRender.js
new file mode 100644
index 00000000..24a00a32
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/preRender.js
@@ -0,0 +1,15 @@
+import { buildFolder } from '../webpack/projectSettings';
+import { log, bootstrap, getWebpackAssets, preRender } from '../utilities';
+
+bootstrap().then(({ server }) => {
+ log({ message: 'Starting your Server Appโฆ\n', useSeparator: true });
+ try {
+ getWebpackAssets().then(({ assets }) => {
+ preRender({ server, webpackAssets: assets, buildFolder }).then(() =>
+ log({ message: '\nโญ๏ธ PreRender finished โญ๏ธ\n', type: 'success' })
+ );
+ });
+ } catch (error) {
+ log({ message: 'Unable to preRender', error });
+ }
+});
diff --git a/packages/dev-toolkit/src/commands/serve.js b/packages/dev-toolkit/src/commands/serve.js
new file mode 100644
index 00000000..77e4d006
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/serve.js
@@ -0,0 +1,17 @@
+import { buildFolder } from '../webpack/projectSettings';
+import { help, log, bootstrap, getWebpackAssets } from '../utilities';
+
+bootstrap().then(({ server }) => {
+ log({ message: 'Starting your Server Appโฆ\n', useSeparator: true });
+ try {
+ getWebpackAssets().then(({ assets }) => server.start({ assets, buildFolder }));
+ } catch (error) {
+ help({
+ displayedWhen: server && typeof server.start !== 'function',
+ warning: 'Your server needs a `start`-method.',
+ instruction: 'Example: `start({ assets }) { this.express.listen(2000); }`',
+ link: '/dev-toolkit#custom-server',
+ error,
+ });
+ }
+});
diff --git a/packages/dev-toolkit/src/commands/version.js b/packages/dev-toolkit/src/commands/version.js
new file mode 100644
index 00000000..3e0f3b2e
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/version.js
@@ -0,0 +1,7 @@
+import chalk from 'chalk';
+
+import pkg from '../../package.json';
+import { log } from '../utilities';
+
+// Outputs current version number from `package.json`
+log({ message: `You are running ${chalk.green(`${pkg.name} v${pkg.version}`)}\n` });
diff --git a/packages/dev-toolkit/src/commands/watch.js b/packages/dev-toolkit/src/commands/watch.js
new file mode 100644
index 00000000..ea902b7f
--- /dev/null
+++ b/packages/dev-toolkit/src/commands/watch.js
@@ -0,0 +1,70 @@
+import webpack from 'webpack';
+import webpackDevMiddleware from 'webpack-dev-middleware';
+import webpackHotMiddleware from 'webpack-hot-middleware';
+
+import { buildFolder } from '../webpack/projectSettings';
+import generateConfig from '../webpack/config';
+import { help, log, bootstrap } from '../utilities';
+
+bootstrap().then(({ server, userSettings }) => {
+ let webpackAssets = {};
+ const config = generateConfig({
+ creatingBuild: false,
+ getWebpackAssets: assets => {
+ webpackAssets = assets;
+ return JSON.stringify(assets);
+ },
+ userSettings,
+ });
+
+ log({ message: 'Starting Webpackโฆ' });
+
+ // Compile with middleware for hot-reloading
+ const compiler = webpack({
+ ...config,
+ devtool: 'source-map',
+ entry: {
+ ...config.entry,
+ app: ['webpack-hot-middleware/client'].concat(config.entry.app),
+ },
+ });
+
+ log({ message: 'Compiling initial bundleโฆ\n' });
+
+ const webpackDevMiddlewareInstance = webpackDevMiddleware(compiler, {
+ noInfo: true,
+ publicPath: config.output.publicPath,
+ });
+ const webpackHotMiddlewareInstance = webpackHotMiddleware(compiler);
+
+ webpackDevMiddlewareInstance.waitUntilValid(() => {
+ log({ message: '\nโจ Initial compilation has finished.', type: 'success' });
+
+ log({ message: 'Attaching dev-middleware & hot-middlewareโฆ' });
+ try {
+ server.express.use(webpackDevMiddlewareInstance);
+ server.express.use(webpackHotMiddlewareInstance);
+ } catch (error) {
+ help({
+ displayedWhen: server && !server.express,
+ warning: 'Your server needs a `this.express` to be set for attaching webpack middleware.',
+ instruction: 'Example: `constructor() { this.express = express(); }`',
+ link: '/dev-toolkit#custom-server',
+ error,
+ });
+ }
+
+ log({ message: 'Starting your Server Appโฆ\n', useSeparator: true });
+ try {
+ server.start({ assets: webpackAssets, buildFolder });
+ } catch (error) {
+ help({
+ displayedWhen: server && typeof server.start !== 'function',
+ warning: 'Your server needs a `start`-method.',
+ instruction: 'Example: `start({ assets }) { this.express.listen(2000); }`',
+ link: '/dev-toolkit#custom-server',
+ error,
+ });
+ }
+ });
+});
diff --git a/packages/dev-toolkit/src/npmExport/dev-toolkit/index.js b/packages/dev-toolkit/src/npmExport/dev-toolkit/index.js
new file mode 100644
index 00000000..dcbda2ee
--- /dev/null
+++ b/packages/dev-toolkit/src/npmExport/dev-toolkit/index.js
@@ -0,0 +1,6 @@
+/* eslint-disable no-underscore-dangle */
+import { runCommand } from '../../utilities';
+
+export default ({ command, options }) => {
+ runCommand({ command, options, programmatic: true });
+};
diff --git a/packages/dev-toolkit/src/npmExport/dev-toolkit/settings.js b/packages/dev-toolkit/src/npmExport/dev-toolkit/settings.js
new file mode 100644
index 00000000..5e5f3473
--- /dev/null
+++ b/packages/dev-toolkit/src/npmExport/dev-toolkit/settings.js
@@ -0,0 +1,37 @@
+/* eslint-disable no-undef, no-underscore-dangle */
+
+// Shared settings between client and server.
+//
+// A global handed over by a webpack plugin allows us to retrieve environment variables.
+// eslint-disable-next-line no-undef
+export const creatingBuild = typeof devToolkitSettings !== typeof undefined;
+
+// Warn if the initial node-command wasn't spawned via the `dev-toolkit`-cli
+if (!creatingBuild && typeof global.__devToolkitSettings === typeof undefined) {
+ console.log(
+ '\nโ ๏ธ Could not get shared dev-toolkit settings. Are you using the `dev-toolkit`-cli?\n'
+ );
+}
+
+// Get Settings via Node global
+const devToolkitSettingsServer = !creatingBuild && global.__devToolkitSettings;
+
+// If we're not creating a build, we're server-rendering the client app.
+// Therefore we'll want to use `process.env` instead of the build settings.
+export const sharedEnvs = creatingBuild
+ ? devToolkitSettings.sharedEnvs
+ : devToolkitSettingsServer.sharedEnvs;
+
+// Make usePreRender setting available
+export const usePreRender = creatingBuild
+ ? devToolkitSettings.usePreRender
+ : devToolkitSettingsServer.usePreRender;
+
+// Assign booleans for each environment we might be in
+export const isProd = sharedEnvs.NODE_ENV === 'production';
+export const isDev = sharedEnvs.NODE_ENV === 'development';
+export const isTest = sharedEnvs.NODE_ENV === 'test';
+
+// Detect whether the client-app is being rendered on the client or on the server
+export const isServer = !creatingBuild && sharedEnvs.NODE_ENV !== 'test';
+export const isClient = !isServer;
diff --git a/packages/dev-toolkit/src/postinstall-prepare/copy-templates.js b/packages/dev-toolkit/src/postinstall-prepare/copy-templates.js
new file mode 100644
index 00000000..e440fb8e
--- /dev/null
+++ b/packages/dev-toolkit/src/postinstall-prepare/copy-templates.js
@@ -0,0 +1,61 @@
+import path from 'path';
+import { ensureDirSync, copySync, removeSync, readFile, outputFile } from 'fs-extra';
+import klawSync from 'klaw-sync';
+import decomment from 'decomment';
+
+import {
+ originalTemplates,
+ generatedTemplates,
+ generatedTemplatesWithoutComments,
+} from '../webpack/projectSettings';
+import { log } from '../utilities';
+
+log({
+ title: 'prepare',
+ message: 'Copy templates into dev-toolkit distribution',
+ useSeparator: true,
+});
+
+const ignoreDevFolders = item => item.indexOf('node_modules') < 0 && item.indexOf('build') < 0;
+
+const removeDevFiles = ({ directory }) => {
+ const devFiles = item => item && item.path && item.path.indexOf('package-lock') >= 0;
+ const allFiles = klawSync(directory, { nodir: true, filter: devFiles });
+ const allFilePaths = Object.keys(allFiles).map(item => allFiles[item].path);
+
+ allFilePaths.forEach(filePath => {
+ removeSync(filePath);
+ });
+};
+
+const removeCommentsFromJSFiles = ({ directory }) => {
+ const onlyJSFiles = item => item && item.path && path.extname(item.path) === '.js';
+ const allFiles = klawSync(directory, { nodir: true, filter: onlyJSFiles });
+ const allFilePaths = Object.keys(allFiles).map(item => allFiles[item].path);
+
+ allFilePaths.forEach(filePath => {
+ readFile(filePath, 'utf8')
+ .then(data => {
+ // Uncomment files as if they were plain text files (avoiding issues with jsx)
+ outputFile(filePath, decomment.text(data));
+ })
+ .catch(err => {
+ console.error(err);
+ });
+ });
+};
+
+log({ message: 'Copying templates into dist folder...' });
+removeSync(generatedTemplates);
+ensureDirSync(generatedTemplates);
+copySync(originalTemplates, generatedTemplates, { filter: ignoreDevFolders });
+removeDevFiles({ directory: generatedTemplates });
+
+log({ message: 'Creating an templates-folder in dist that has comments stripped out...' });
+removeSync(generatedTemplatesWithoutComments);
+ensureDirSync(generatedTemplatesWithoutComments);
+copySync(originalTemplates, generatedTemplatesWithoutComments, { filter: ignoreDevFolders });
+removeDevFiles({ directory: generatedTemplatesWithoutComments });
+removeCommentsFromJSFiles({ directory: generatedTemplatesWithoutComments });
+
+log({ message: 'Finished templates task\n', useSeparator: true });
diff --git a/packages/dev-toolkit/src/serve.js b/packages/dev-toolkit/src/serve.js
deleted file mode 100644
index 8c64f1ea..00000000
--- a/packages/dev-toolkit/src/serve.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import webpack from 'webpack';
-import path from 'path';
-
-import config from './webpack/config';
-import { rootForRequire } from './_userSettings';
-
-// compile all files necessary for serving
-const compiler = webpack(config);
-compiler.run((err, stats) => {
- // output what's happening within webpack
- console.log(stats.toString(config.stats));
- const message = '\n\n ๐ฐ Your build files are ready, starting Server ๐ช\n';
- console.log(message);
-
- // Use the express production server
- // eslint-disable-next-line global-require
- const ServerApp = require(path.join(rootForRequire, '/src/server/app')).default;
- const server = new ServerApp();
-
- // start the server
- server.start({ serveBuild: true });
-});
diff --git a/packages/dev-toolkit/src/serveStatic.js b/packages/dev-toolkit/src/serveStatic.js
deleted file mode 100644
index 065c47ce..00000000
--- a/packages/dev-toolkit/src/serveStatic.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import path from 'path';
-import express from 'express';
-import compression from 'compression';
-import bodyParser from 'body-parser';
-import errorHandler from 'errorhandler';
-import methodOverride from 'method-override';
-
-import { PATHS } from './_userSettings';
-
-class ServeStatic {
- constructor() {
- // server config
- this.hostname = process.env.HOST || 'localhost';
- this.port = process.env.PORT || 4000;
- this.publicDirectory = PATHS.buildFolder;
-
- // bind class methods
- this.start = this.start.bind(this);
-
- // Create express server instance & initialize
- this.express = express();
- this.start();
- }
-
- start() {
- this.express.get('/', (req, res) => {
- res.sendFile(path.join(this.publicDirectory, '/index.html'));
- });
-
- this.express.use(compression());
- this.express.use(methodOverride());
- this.express.use(bodyParser.json());
- this.express.use(bodyParser.urlencoded({ extended: true }));
- this.express.use(express.static(this.publicDirectory));
- this.express.use(errorHandler({ dumpExceptions: true, showStack: true }));
-
- console.log(`\n==> ๐ Listening on http://${this.hostname}:${this.port}\n`);
-
- this.express.listen(this.port, this.hostname);
- }
-}
-
-export default new ServeStatic();
diff --git a/packages/dev-toolkit/src/src/settings.js b/packages/dev-toolkit/src/src/settings.js
deleted file mode 100644
index 5d87014f..00000000
--- a/packages/dev-toolkit/src/src/settings.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Detect whether the app is being rendered on the client or on the server
-const creatingBuild = typeof buildSettings !== typeof undefined; // eslint-disable-line no-undef
-
-export const env = creatingBuild ? buildSettings.env : process.env; // eslint-disable-line no-undef
-export const isDev = env.NODE_ENV === 'development';
-export const isServer = !creatingBuild && env.NODE_ENV !== 'test';
-export const isClient = !isServer;
-
-export default {
- env,
- isDev,
- isServer,
- isClient,
-};
diff --git a/packages/dev-toolkit/src/utilities/bootstrap/defineGlobalDevToolkitSettings.js b/packages/dev-toolkit/src/utilities/bootstrap/defineGlobalDevToolkitSettings.js
new file mode 100644
index 00000000..ea8a9bce
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/bootstrap/defineGlobalDevToolkitSettings.js
@@ -0,0 +1,5 @@
+// Make sharedEnv's globally available for universal import of `dev-toolkit/settings` to work
+export default ({ settings }) => {
+ // eslint-disable-next-line no-underscore-dangle
+ global.__devToolkitSettings = settings;
+};
diff --git a/packages/dev-toolkit/src/utilities/bootstrap/extractedSharedEnvs.js b/packages/dev-toolkit/src/utilities/bootstrap/extractedSharedEnvs.js
new file mode 100644
index 00000000..533c6fc6
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/bootstrap/extractedSharedEnvs.js
@@ -0,0 +1,4 @@
+export default ({ withEnvs, fromEnvs }) =>
+ Object.keys(fromEnvs)
+ .filter(key => withEnvs.indexOf(key) !== -1)
+ .reduce((obj, key) => ({ [key]: fromEnvs[key], ...obj }), {});
diff --git a/packages/dev-toolkit/src/utilities/bootstrap/getUserSettings.js b/packages/dev-toolkit/src/utilities/bootstrap/getUserSettings.js
new file mode 100644
index 00000000..e1d785be
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/bootstrap/getUserSettings.js
@@ -0,0 +1,54 @@
+import { pathExistsSync } from 'fs-extra';
+
+import log from '../log';
+import { userSettingsPath } from '../../webpack/projectSettings';
+import defineGlobalDevToolkitSettings from './defineGlobalDevToolkitSettings';
+import extractedSharedEnvs from './extractedSharedEnvs';
+
+export default () => {
+ // 1) Get User settings from a specified file
+ // ----
+ const settingsExist = pathExistsSync(userSettingsPath);
+ if (settingsExist) log({ message: 'Using settings from `dev-toolkit.config.js`' });
+ // We're expecting a classic Node.js module declared with `module.exports`
+ // NOTE: Using `require` here is necessary so that using settings with an import like
+ // `import { sharedEnvs} from 'dev-toolkit/settings'` doesn't become an async dependency
+ // eslint-disable-next-line import/no-dynamic-require, global-require
+ const userSettings = settingsExist ? require(userSettingsPath) : {};
+
+ // 2) Format settings & generate a safe final version for consumption via node and webpack
+ // ----
+ const webpack = userSettings.webpack || {};
+ const devToolkit = userSettings.devToolkit || {};
+ const sharedEnvs = {
+ // extract only explicitly declared environment variables from `process.env`
+ ...extractedSharedEnvs({
+ withEnvs:
+ devToolkit.sharedEnvs && Array.isArray(devToolkit.sharedEnvs) ? devToolkit.sharedEnvs : [],
+ fromEnvs: process.env,
+ }),
+ // make NODE_ENV always available
+ NODE_ENV: process.env.NODE_ENV,
+ };
+ const finalSettings = {
+ webpack: {
+ loaders:
+ webpack.loaders && typeof webpack.loaders === 'function' ? webpack.loaders : () => [],
+ plugins:
+ webpack.plugins && typeof webpack.plugins === 'function' ? webpack.plugins : () => [],
+ customize:
+ webpack.customize && typeof webpack.customize === 'function'
+ ? webpack.customize
+ : config => config,
+ },
+ devToolkit: {
+ usePreRender: typeof devToolkit.usePreRender === 'boolean' ? devToolkit.usePreRender : true,
+ sharedEnvs,
+ },
+ };
+
+ // 3) Define settings in Node so we can use `dev-toolkit/settings` both on the client & server
+ // ----
+ defineGlobalDevToolkitSettings({ settings: finalSettings.devToolkit });
+ return finalSettings;
+};
diff --git a/packages/dev-toolkit/src/utilities/bootstrap/importServerApp.js b/packages/dev-toolkit/src/utilities/bootstrap/importServerApp.js
new file mode 100644
index 00000000..a6a0a491
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/bootstrap/importServerApp.js
@@ -0,0 +1,24 @@
+import { pathExistsSync } from 'fs-extra';
+
+import log from '../log';
+import help from '../help';
+import { serverAppEntryPoint } from '../../webpack/projectSettings';
+
+export default () =>
+ new Promise(resolve => {
+ log({ message: 'Importing Server Appโฆ' });
+ import(serverAppEntryPoint)
+ .then(module => {
+ const server = module.default;
+ resolve({ server });
+ })
+ .catch(error => {
+ help({
+ displayedWhen: !pathExistsSync(serverAppEntryPoint),
+ warning: 'You need a server app entry point.',
+ instruction: 'Do you have the file `src/server/index.js`?',
+ link: '/dev-toolkit#custom-server',
+ error,
+ });
+ });
+ });
diff --git a/packages/dev-toolkit/src/utilities/bootstrap/index.js b/packages/dev-toolkit/src/utilities/bootstrap/index.js
new file mode 100644
index 00000000..c19448ab
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/bootstrap/index.js
@@ -0,0 +1,16 @@
+import getUserSettings from './getUserSettings';
+import importServerApp from './importServerApp';
+
+export default ({ skipServerImport } = { skipServerImport: false }) => {
+ const userSettings = getUserSettings();
+
+ return new Promise((resolve, reject) => {
+ if (skipServerImport) {
+ resolve({ userSettings });
+ } else {
+ importServerApp()
+ .then(({ server }) => resolve({ server, userSettings }))
+ .catch(reject);
+ }
+ });
+};
diff --git a/packages/dev-toolkit/src/utilities/getWebpackAssets.js b/packages/dev-toolkit/src/utilities/getWebpackAssets.js
new file mode 100644
index 00000000..edbe82d1
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/getWebpackAssets.js
@@ -0,0 +1,20 @@
+import { pathExistsSync } from 'fs-extra';
+
+import log from './log';
+import { assetsManifestFile } from '../webpack/projectSettings';
+
+export default () =>
+ new Promise(resolve => {
+ if (pathExistsSync(assetsManifestFile)) {
+ import(assetsManifestFile)
+ .then(json => {
+ resolve({ assets: json });
+ })
+ .catch(error => {
+ log({ message: "Couldn't read `assets-manifest.json`", error });
+ });
+ } else {
+ log({ message: '`assets-manifest.json` not found. ' });
+ resolve({ assets: {} });
+ }
+ });
diff --git a/packages/dev-toolkit/src/utilities/help.js b/packages/dev-toolkit/src/utilities/help.js
new file mode 100644
index 00000000..4a6ab2a7
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/help.js
@@ -0,0 +1,21 @@
+import log from './log';
+
+export default ({ displayedWhen, warning, instruction, link, error }) => {
+ if (displayedWhen) {
+ log({ message: warning, type: 'warning' });
+ if (instruction) {
+ log({ message: instruction, type: 'success' });
+ }
+ if (link) {
+ // TODO: add once there is more documentation
+ // log({ message: `see: https://github.com/stoikerty${link}\n` });
+ }
+ if (error) {
+ log({ error });
+ }
+
+ process.exit();
+ } else {
+ log({ error });
+ }
+};
diff --git a/packages/dev-toolkit/src/utilities/index.js b/packages/dev-toolkit/src/utilities/index.js
new file mode 100644
index 00000000..ec229bf9
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/index.js
@@ -0,0 +1,7 @@
+export { default as runCommand } from './runCommand';
+export { default as log } from './log';
+export { default as help } from './help';
+export { default as bootstrap } from './bootstrap';
+export { default as getWebpackAssets } from './getWebpackAssets';
+export { default as preRender } from './preRender';
+export { default as spinner } from './spinner';
diff --git a/packages/dev-toolkit/src/utilities/log/error.js b/packages/dev-toolkit/src/utilities/log/error.js
new file mode 100644
index 00000000..7604a194
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/log/error.js
@@ -0,0 +1,8 @@
+import chalk from 'chalk';
+
+export default ({ error }) => {
+ if (error) {
+ const errorType = /^.*(Error: )/gi;
+ console.log(`${chalk.red(error.stack.match(errorType))}${error.stack.replace(errorType, '')}`);
+ }
+};
diff --git a/packages/dev-toolkit/src/utilities/log/index.js b/packages/dev-toolkit/src/utilities/log/index.js
new file mode 100644
index 00000000..cd7984fc
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/log/index.js
@@ -0,0 +1,20 @@
+import logMessage from './message';
+import logError from './error';
+
+export default ({ message, error, type, title, useSeparator }) => {
+ /* eslint-disable no-underscore-dangle */
+ const silent =
+ (global.__devToolkitCommandOptions && global.__devToolkitCommandOptions.silent) || false;
+
+ // Silence out any logs if necessary
+ if (!silent) {
+ if (message) {
+ logMessage({ message, type, title, useSeparator });
+ }
+ }
+
+ // Keep logging errors though
+ if (error) {
+ logError({ error });
+ }
+};
diff --git a/packages/dev-toolkit/src/utilities/log/message.js b/packages/dev-toolkit/src/utilities/log/message.js
new file mode 100644
index 00000000..b0f0a902
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/log/message.js
@@ -0,0 +1,32 @@
+import chalk from 'chalk';
+import stringLength from 'string-length';
+
+export default ({ message, type, title, useSeparator }) => {
+ const hasLinebreakAtEnd = message.lastIndexOf('\n') === message.length - 1;
+ let outputMessage = hasLinebreakAtEnd ? message.substring(0, message.lastIndexOf('\n')) : message;
+
+ switch (type) {
+ case 'success':
+ outputMessage = chalk.green(outputMessage);
+ break;
+ case 'warning':
+ outputMessage = chalk.yellow(`โ ๏ธ ${outputMessage}`);
+ break;
+ default:
+ if (title) {
+ outputMessage = `${chalk.magenta(`\n[ ${title} ]`)} ${chalk.grey(`- ${outputMessage}`)}`;
+ } else {
+ outputMessage = chalk.grey(outputMessage);
+ }
+ }
+
+ if (useSeparator) {
+ console.log(outputMessage);
+ console.log(
+ chalk.grey('ยท'.repeat(stringLength(outputMessage) + (hasLinebreakAtEnd ? 1 : 0))),
+ hasLinebreakAtEnd ? '\n' : ''
+ );
+ } else {
+ console.log(outputMessage, hasLinebreakAtEnd ? '\n' : '');
+ }
+};
diff --git a/packages/dev-toolkit/src/utilities/preRender.js b/packages/dev-toolkit/src/utilities/preRender.js
new file mode 100644
index 00000000..2b2b3f9d
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/preRender.js
@@ -0,0 +1,23 @@
+import help from './help';
+import log from './log';
+
+export default ({ server, webpackAssets, buildFolder }) =>
+ new Promise(resolve => {
+ log({ message: 'Rendering html using Server Appโฆ ', useSeparator: true });
+ help({
+ displayedWhen: server && typeof server.preRender !== 'function',
+ warning: 'Your server needs a `preRender`-method to create a build.',
+ instruction:
+ 'Example: `preRender({ assets, buildFolder }) { return new Promise(() => { ... }); }`',
+ link: '/dev-toolkit#custom-server',
+ });
+ const renderPromise = server.preRender({ assets: webpackAssets, buildFolder });
+ help({
+ displayedWhen: typeof renderPromise.then !== 'function',
+ warning: "The server `preRender`-method must return a Promise to say it's finished.",
+ instruction:
+ 'Example: `preRender({ assets, buildFolder }) { return new Promise(() => { ... }); }`',
+ link: '/dev-toolkit#custom-server',
+ });
+ renderPromise.then(resolve).catch(buildError => log({ error: buildError }));
+ });
diff --git a/packages/dev-toolkit/src/utilities/runCommand.js b/packages/dev-toolkit/src/utilities/runCommand.js
new file mode 100644
index 00000000..55d46c23
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/runCommand.js
@@ -0,0 +1,28 @@
+/* eslint-disable no-underscore-dangle */
+import path from 'path';
+import babelRunner from 'babel-runner';
+
+import { log } from '../utilities';
+
+export default ({ command, message, options, programmatic, skipPrimaryLog }) => {
+ // Pass options down to specific command
+ global.__devToolkitCommandOptions = options || {};
+
+ // Display message to user, making it clear what's going on
+ log({
+ title: programmatic ? 'dev-toolkit' : command,
+ message: programmatic ? `Running command \`${command}\`` : message,
+ useSeparator: true,
+ });
+
+ if (!skipPrimaryLog) {
+ log({ message: 'Adding universal configurationโฆ' });
+ }
+ try {
+ babelRunner({
+ fileToRun: path.resolve(__dirname, `../commands/${command}`),
+ });
+ } catch (error) {
+ log({ error });
+ }
+};
diff --git a/packages/dev-toolkit/src/utilities/spinner.js b/packages/dev-toolkit/src/utilities/spinner.js
new file mode 100644
index 00000000..bc1dc5d9
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/spinner.js
@@ -0,0 +1,48 @@
+import ora from 'ora';
+import { grey, blue, magenta, green } from 'chalk';
+
+export default new class {
+ constructor() {
+ this.spinner = ora({
+ text: grey('Loading'),
+ spinner: {
+ interval: 130,
+ frames: [
+ grey('ยท') + blue('ยท') + grey(' ') + grey(' '),
+ grey(' ') + grey('ยท') + blue('ยท') + grey(' '),
+ grey(' ') + grey(' ') + grey('ยท') + blue('ยท'),
+ grey(' ') + grey(' ') + grey(' ') + blue('โข'),
+ grey(' ') + grey(' ') + blue('ยท') + grey('ยท'),
+ grey(' ') + blue('ยท') + grey('ยท') + grey(' '),
+ blue('ยท') + grey('ยท') + grey(' ') + grey(' '),
+ blue('โข') + grey(' ') + grey(' ') + grey(' '),
+
+ grey('ยท') + magenta('ยท') + grey(' ') + grey(' '),
+ grey(' ') + grey('ยท') + magenta('ยท') + grey(' '),
+ grey(' ') + grey(' ') + grey('ยท') + magenta('ยท'),
+ grey(' ') + grey(' ') + grey(' ') + magenta('โข'),
+ grey(' ') + grey(' ') + magenta('ยท') + grey('ยท'),
+ grey(' ') + magenta('ยท') + grey('ยท') + grey(' '),
+ magenta('ยท') + grey('ยท') + grey(' ') + grey(' '),
+ magenta('โข') + grey(' ') + grey(' ') + grey(' '),
+
+ grey('ยท') + green('ยท') + grey(' ') + grey(' '),
+ grey(' ') + grey('ยท') + green('ยท') + grey(' '),
+ grey(' ') + grey(' ') + grey('ยท') + green('ยท'),
+ grey(' ') + grey(' ') + grey(' ') + green('โข'),
+ grey(' ') + grey(' ') + green('ยท') + grey('ยท'),
+ grey(' ') + green('ยท') + grey('ยท') + grey(' '),
+ green('ยท') + grey('ยท') + grey(' ') + grey(' '),
+ green('โข') + grey(' ') + grey(' ') + grey(' '),
+ ],
+ },
+ });
+ }
+
+ start({ message }) {
+ this.spinner.start(grey(message));
+ }
+ stop() {
+ this.spinner.stop();
+ }
+}();
diff --git a/packages/dev-toolkit/src/utilities/testHelpers/sandbox.js b/packages/dev-toolkit/src/utilities/testHelpers/sandbox.js
new file mode 100644
index 00000000..805dbc47
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/testHelpers/sandbox.js
@@ -0,0 +1,66 @@
+import sinon from 'sinon';
+
+// This class will serve as our proxy for creating and restoring each sandbox
+// We can either use the sandbox globally or only within a specified `describe`-block
+class Sandbox {
+ constructor(options = { global: false }) {
+ this.instance = null;
+ this.useSandbox = false;
+ this.useGlobalSandbox = options.global;
+ }
+
+ use(beforeCallback, afterCallback) {
+ beforeCallback(() => {
+ this.useSandbox = true;
+ });
+ afterCallback(() => {
+ this.useSandbox = false;
+ });
+ }
+ create() {
+ if (this.useGlobalSandbox || this.useSandbox) {
+ this.instance = sinon.sandbox.create();
+ }
+ }
+ restore() {
+ if (this.useGlobalSandbox || this.useSandbox) {
+ this.instance.restore();
+ }
+ }
+
+ // Replicate sinon's `sandbox` methods
+ // see: http://sinonjs.org/docs/#sinon-sandbox
+ spy(...args) {
+ return this.instance && this.instance.spy(...args);
+ }
+ stub(...args) {
+ return this.instance && this.instance.stub(...args);
+ }
+ mock(...args) {
+ return this.instance && this.instance.mock(...args);
+ }
+ useFakeTimers(...args) {
+ return this.instance && this.instance.useFakeTimers(...args);
+ }
+ useFakeXMLHttpRequest(...args) {
+ return this.instance && this.instance.useFakeXMLHttpRequest(...args);
+ }
+ useFakeServer(...args) {
+ return this.instance && this.instance.useFakeServer(...args);
+ }
+}
+
+// 1. Instantiate class
+const sandbox = new Sandbox({ global: false });
+
+// 2. Use sandbox's methods in mocha's "Root-Level Hooks"
+// see: https://mochajs.org/#root-level-hooks
+beforeEach(() => {
+ sandbox.create();
+});
+afterEach(() => {
+ sandbox.restore();
+});
+
+// 3. Export class to use as sandbox replacement
+export default sandbox;
diff --git a/packages/dev-toolkit/src/utilities/testHelpers/setupTests.js b/packages/dev-toolkit/src/utilities/testHelpers/setupTests.js
new file mode 100644
index 00000000..f50f86e1
--- /dev/null
+++ b/packages/dev-toolkit/src/utilities/testHelpers/setupTests.js
@@ -0,0 +1,5 @@
+// Additional tests-configuration
+import chai from 'chai';
+import sinonChai from 'sinon-chai';
+
+chai.use(sinonChai);
diff --git a/packages/dev-toolkit/src/utils/debug.js b/packages/dev-toolkit/src/utils/debug.js
deleted file mode 100644
index ed5fb289..00000000
--- a/packages/dev-toolkit/src/utils/debug.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import debug from '../../bin/utils/debug';
-
-export default debug;
diff --git a/packages/dev-toolkit/src/utils/testHelpers/setupClientApp.js b/packages/dev-toolkit/src/utils/testHelpers/setupClientApp.js
deleted file mode 100644
index 292a8eb2..00000000
--- a/packages/dev-toolkit/src/utils/testHelpers/setupClientApp.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import path from 'path';
-import { rootForRequire } from '../../_userSettings';
-
-// Setup `app`-object globally so it's same as on the client
-// eslint-disable-next-line global-require
-require(path.join(rootForRequire, '/src/client/app'));
-global.app = window.app;
diff --git a/packages/dev-toolkit/src/utils/testHelpers/setupDOM.js b/packages/dev-toolkit/src/utils/testHelpers/setupDOM.js
deleted file mode 100644
index 0fa35cd7..00000000
--- a/packages/dev-toolkit/src/utils/testHelpers/setupDOM.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Setup jsdom to be used all throughout mocha tests
-// Using suggested version from: https://github.com/facebook/react/issues/5046
-import { jsdom } from 'jsdom';
-
-global.document = jsdom('');
-global.window = document.defaultView;
-global.navigator = global.window.navigator;
diff --git a/packages/dev-toolkit/src/utils/testHelpers/setupTests.js b/packages/dev-toolkit/src/utils/testHelpers/setupTests.js
deleted file mode 100644
index ce7ef717..00000000
--- a/packages/dev-toolkit/src/utils/testHelpers/setupTests.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Additional tests-configuration
-import chai from 'chai';
-import sinonChai from 'sinon-chai';
-import chaiImmutable from 'chai-immutable';
-import chaiAsPromised from 'chai-as-promised';
-import chaiEnzyme from 'chai-enzyme';
-
-chai.use(sinonChai);
-chai.use(chaiImmutable);
-chai.use(chaiAsPromised);
-chai.use(chaiEnzyme());
diff --git a/packages/dev-toolkit/src/watch.js b/packages/dev-toolkit/src/watch.js
deleted file mode 100644
index 9c3e5d1c..00000000
--- a/packages/dev-toolkit/src/watch.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import webpack from 'webpack';
-import path from 'path';
-import webpackDevMiddleware from 'webpack-dev-middleware';
-import webpackHotMiddleware from 'webpack-hot-middleware';
-
-import config from './webpack/config';
-import { rootForRequire } from './_userSettings';
-
-// Use the express production server
-const ServerApp = require(path.join(rootForRequire, '/src/server/app')).default;
-const server = new ServerApp();
-
-// Compile with webpack & bind middleware for hot-reloading
-config.devtool = 'source-map';
-config.entry.app = ['webpack-hot-middleware/client'].concat(config.entry.app);
-const compiler = webpack(config);
-server.use(webpackDevMiddleware(compiler, { noInfo: true, publicPath: config.output.publicPath }));
-server.use(webpackHotMiddleware(compiler));
-
-server.start({
- message: '==> Browsersync should be launched soon. Use one of the Access URLs for development.',
-});
diff --git a/packages/dev-toolkit/src/webpack/config.js b/packages/dev-toolkit/src/webpack/config.js
index 112f8a8a..ec956cc3 100644
--- a/packages/dev-toolkit/src/webpack/config.js
+++ b/packages/dev-toolkit/src/webpack/config.js
@@ -1,73 +1,109 @@
-import plugins from './config/plugins';
-import { cssHook, filesHook } from './config/extensionHooks';
-import loaders, { sass, postcss, eslint } from './config/loaders';
-import resolve from './config/resolve';
-import resolveLoader from './config/resolveLoader';
-import stats from './config/stats';
+import path from 'path';
+import AssetsPlugin from 'assets-webpack-plugin';
+import { DefinePlugin, HotModuleReplacementPlugin, NoEmitOnErrorsPlugin, optimize } from 'webpack';
+import { babelrc } from 'babel-runner';
import {
- PATHS,
- env,
- currentScript,
- vendor,
- overrideConfig,
- namingConvention,
-} from '../_userSettings';
+ devToolkitRoot,
+ projectRoot,
+ assetsPath,
+ entryPoint,
+ publicPath,
+ assetsManifestFolder,
+ assetsManifestName,
+} from './projectSettings';
-// Set up server-rendering for file-extensions
-cssHook();
-filesHook();
+export default ({ getWebpackAssets, creatingBuild, userSettings } = { creatingBuild: true }) => {
+ const namingConvention = creatingBuild ? '[name].[chunkhash]' : '[name]';
+ const customizationOptions = {
+ projectRoot,
+ creatingBuild,
+ namingConvention,
+ assetsPath,
+ publicPath,
+ babelrc,
+ };
-// This is an escape-hatch for overriding the webpack config with your custom one.
-// NOTE: There's limited support for using these custom config escape hatches. You're on your own!
-const createConfig = (config) => {
- const override = overrideConfig && overrideConfig.default ?
- overrideConfig.default : overrideConfig;
- return typeof override === 'function' ?
- override({ config, paths: PATHS, env, currentScript }) : config;
-};
-
-// Resulting webpack config
-// ---
-export default createConfig({
- // The entry and ouput configuration for the bundle(s)
- entry: {
- app: [PATHS.clientAppEntryPoint],
- vendor,
- },
- output: {
- path: PATHS.buildFolder,
- filename: `${namingConvention}.js`,
- chunkFilename: `${namingConvention}.js`,
- publicPath: PATHS.publicPath,
- },
-
- // Webpack plugins
- plugins,
-
- // Webpack module-loaders
- module: { loaders },
+ // Allow completely extending webpack with `webpack.customize`
+ return userSettings.webpack.customize(
+ {
+ entry: {
+ app: [entryPoint],
+ },
+ output: {
+ path: assetsPath,
+ filename: `${namingConvention}.js`,
+ chunkFilename: `${namingConvention}.js`,
+ publicPath,
+ },
+ module: {
+ loaders: [
+ {
+ test: /\.jsx?$/,
+ loaders: [`babel-loader?${JSON.stringify(babelrc)}`],
+ exclude: /(node_modules)|\.route.jsx?$|\.dynamic.jsx?$/,
+ },
+ {
+ test: /\.route.jsx?$|\.dynamic.jsx?$/,
+ loaders: [
+ // `bundle`-loader automatically uses module directly when code is run on the server
+ 'bundle-loader?lazy&name=[name]',
+ `babel-loader?${JSON.stringify(babelrc)}`,
+ ],
+ exclude: /(node_modules)/,
+ },
+ ].concat(
+ // Add any user settings from `webpack.loaders`
+ userSettings.webpack.loaders(customizationOptions)
+ ),
+ },
+ plugins: [
+ new DefinePlugin({
+ devToolkitSettings: JSON.stringify(userSettings.devToolkit),
+ // React & Redux rely on this to be set explicitly
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
+ }),
+ ]
+ .concat(
+ getWebpackAssets
+ ? [
+ new AssetsPlugin({
+ path: assetsManifestFolder,
+ filename: assetsManifestName,
+ processOutput: getWebpackAssets,
+ }),
+ ]
+ : []
+ )
+ .concat(
+ creatingBuild
+ ? [new optimize.UglifyJsPlugin()]
+ : [new HotModuleReplacementPlugin(), new NoEmitOnErrorsPlugin()]
+ )
+ .concat(
+ // Add any user settings from `webpack.plugins`
+ userSettings.webpack.plugins(customizationOptions)
+ ),
+ resolve: {
+ modules: [
+ // Resolve dev-toolkit related modules like 'webpack-hot-middleware/client'
+ path.resolve(devToolkitRoot, 'node_modules'),
+ // Resolve all other modules from client app
+ path.resolve(projectRoot, 'node_modules'),
+ 'node_modules',
+ ],
+ },
+ resolveLoader: {
+ modules: [
+ // Resolve dev-toolkit related webpack loaders like 'babel-loader'
+ path.resolve(devToolkitRoot, 'node_modules'),
+ // Resolve webpack loaders related to project
+ path.resolve(projectRoot, 'node_modules'),
+ 'node_modules',
+ ],
+ },
+ },
- // Specific config for loaders. `sass-loader`, `postcss-loader`, `eslint-loader`
- sassLoader: sass,
- postcss,
- eslint,
-
- // Manage directories for dependencies with `resolve` & `resolveLoader`
- resolve,
- resolveLoader,
-
- // How much information webpack should output
- stats,
-
- // Ignore some node-specific packages on the client
- node: {
- fs: 'empty',
- net: 'empty',
- tls: 'empty',
- path: 'empty',
- chalk: 'empty',
- mkdirp: 'empty',
- fileExists: 'empty',
- },
-});
+ customizationOptions
+ );
+};
diff --git a/packages/dev-toolkit/src/webpack/config/extensionHooks/cssHook.js b/packages/dev-toolkit/src/webpack/config/extensionHooks/cssHook.js
deleted file mode 100644
index 56490cd1..00000000
--- a/packages/dev-toolkit/src/webpack/config/extensionHooks/cssHook.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import path from 'path';
-import cssHook from 'css-modules-require-hook';
-import sass from 'node-sass';
-
-import {
- PATHS,
- cssChunkNaming,
-} from '../../../_userSettings';
-
-// Set up server-side rendering of scss files
-// ---
-// Implement a hook in node for `.scss`-imports that uses
-// the same settings as the webpack config.
-const preprocessCss = (cssFileData, cssFilePath) => {
- // Include any paths that are part of the config,
- // as well as the current path where css-file resides.
- const includePaths = [].concat(PATHS.scssIncludePaths);
- includePaths.push(path.dirname(cssFilePath));
-
- return sass.renderSync({
- data: cssFileData,
- includePaths,
- }).css;
-};
-
-export default () => {
- // Allow vanilla css-modules
- cssHook({
- extensions: ['.css'],
-
- // Share naming-convention of `css-loader`
- generateScopedName: cssChunkNaming,
- });
-
- // Separate processing for scss
- cssHook({
- extensions: ['.scss'],
-
- // Share naming-convention of `css-loader`
- generateScopedName: cssChunkNaming,
-
- // Process files with same settings as `sass-loader` and return css.
- preprocessCss,
- });
-};
diff --git a/packages/dev-toolkit/src/webpack/config/extensionHooks/filesHook.js b/packages/dev-toolkit/src/webpack/config/extensionHooks/filesHook.js
deleted file mode 100644
index 071947b3..00000000
--- a/packages/dev-toolkit/src/webpack/config/extensionHooks/filesHook.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import filesHook from 'files-require-hook';
-
-import {
- rootForRequire,
-} from '../../../_userSettings';
-
-// Set up server-side rendering of image files
-// ---
-// Implement a hook that uses a file-path for node
-// NOTE:
-// For the build-process it is likely that the files should first
-// be copied into the build dir and then referenced from there instead of
-// using the original file-path. Similar to `webpack-isomorphic-tools`.
-// see: https://github.com/halt-hammerzeit/webpack-isomorphic-tools#getting-down-to-business
-export default () => {
- filesHook({
- extensions: ['jpg', 'jpeg', 'png', 'gif', 'svg'],
- base: rootForRequire,
- });
-};
diff --git a/packages/dev-toolkit/src/webpack/config/extensionHooks/index.js b/packages/dev-toolkit/src/webpack/config/extensionHooks/index.js
deleted file mode 100644
index 27854d72..00000000
--- a/packages/dev-toolkit/src/webpack/config/extensionHooks/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export cssHook from './cssHook';
-export filesHook from './filesHook';
diff --git a/packages/dev-toolkit/src/webpack/config/loaders.js b/packages/dev-toolkit/src/webpack/config/loaders.js
deleted file mode 100644
index a2bff0ad..00000000
--- a/packages/dev-toolkit/src/webpack/config/loaders.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import ExtractTextPlugin from 'extract-text-webpack-plugin';
-
-import {
- currentScript,
- babelConfig,
- eslintConfig,
- cssChunkNaming,
-} from '../../_userSettings';
-
-// Style configuration
-// ---
-const styleLoaders = [
- `css-loader?modules&importLoaders=1&localIdentName=${cssChunkNaming}`,
- 'postcss-loader',
-];
-const sassLoaders = styleLoaders.concat(['sass-loader']);
-
-export eslint from './loaders/eslint';
-export postcss from './loaders/postcss';
-export sass from './loaders/sass';
-
-export default [
- { test: /\.hbs$/, loader: 'handlebars-loader' },
- { test: /\.json$/, loader: 'json-loader' },
- {
- test: /\.jsx?$/,
- loaders: [
- `babel-loader?${JSON.stringify(babelConfig)}`,
- `eslint-loader?${JSON.stringify(eslintConfig)}`,
- ],
- exclude: /(node_modules)|\.route.jsx?$|\.dynamic.jsx?$/,
- },
- {
- test: /\.route.jsx?$|\.dynamic.jsx?$/,
- loaders: [
- // The`bundle`-loader automatically uses module directly when code is run on the server
- 'bundle?lazy&name=[name]',
- `babel-loader?${JSON.stringify(babelConfig)}`,
- `eslint-loader?${JSON.stringify(eslintConfig)}`,
- ],
- exclude: /(node_modules)/,
- },
- {
- test: /\.(jpe?g|png|gif|svg)$/i,
- loaders: [
- 'file?hash=sha512&digest=hex&name=[hash].[ext]',
- 'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false',
- ],
- },
-
- // Use separate style-tags for development,
- // extract CSS into one file for production.
- currentScript === 'watch' ? {
- test: /\.css$/,
- loaders: ['style-loader'].concat(styleLoaders),
- } : {
- test: /\.css$/,
- loader: ExtractTextPlugin.extract('style-loader', styleLoaders),
- },
- // Allow scss to be used as well
- currentScript === 'watch' ? {
- test: /\.scss$/,
- loaders: ['style-loader'].concat(sassLoaders),
- } : {
- test: /\.scss$/,
- loader: ExtractTextPlugin.extract('style-loader', sassLoaders),
- },
-];
diff --git a/packages/dev-toolkit/src/webpack/config/loaders/eslint.js b/packages/dev-toolkit/src/webpack/config/loaders/eslint.js
deleted file mode 100644
index fcd21acb..00000000
--- a/packages/dev-toolkit/src/webpack/config/loaders/eslint.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import {
- currentScript,
-} from '../../../_userSettings';
-
-// Ignore custom import temporarily so text-editors work with `eslint-plugin-import`
-// see: https://github.com/AtomLinter/linter-eslint/issues/610
-const sharedRules = {
- 'import/no-unresolved': [
- 'error',
- {
- ignore: ['src/'],
- },
- ],
-};
-
-export default {
- // Override any settings from the configFile
- rules: currentScript === 'watch' ? {
- // only warn for debugging statements while developing
- 'no-debugger': [
- 'warn',
- ],
-
- ...sharedRules,
- } : { ...sharedRules },
-};
diff --git a/packages/dev-toolkit/src/webpack/config/loaders/postcss.js b/packages/dev-toolkit/src/webpack/config/loaders/postcss.js
deleted file mode 100644
index 2786daf0..00000000
--- a/packages/dev-toolkit/src/webpack/config/loaders/postcss.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import autoprefixer from 'autoprefixer';
-
-export default [
- // Supported Browsers via `Autoprefixer`
- // see: https://github.com/ai/browserslist
- autoprefixer({
- browsers: [
- '> 0.8%',
- 'last 2 versions',
- 'Explorer >= 9',
- ],
- }),
-];
diff --git a/packages/dev-toolkit/src/webpack/config/loaders/sass.js b/packages/dev-toolkit/src/webpack/config/loaders/sass.js
deleted file mode 100644
index 87ff3f42..00000000
--- a/packages/dev-toolkit/src/webpack/config/loaders/sass.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import {
- PATHS,
-} from '../../../_userSettings';
-
-export default {
- includePaths: PATHS.scssIncludePaths,
-};
diff --git a/packages/dev-toolkit/src/webpack/config/plugins.js b/packages/dev-toolkit/src/webpack/config/plugins.js
deleted file mode 100644
index edfe3950..00000000
--- a/packages/dev-toolkit/src/webpack/config/plugins.js
+++ /dev/null
@@ -1,117 +0,0 @@
-import webpack from 'webpack';
-import CopyWebpackPlugin from 'copy-webpack-plugin';
-import BrowserSyncPlugin from 'browser-sync-webpack-plugin';
-import ExtractTextPlugin from 'extract-text-webpack-plugin';
-import HtmlWebpackPlugin from 'html-webpack-plugin';
-import ScriptExtHtmlWebpackPlugin from 'script-ext-html-webpack-plugin';
-import CompressionPlugin from 'compression-webpack-plugin';
-import ProgressBarPlugin from 'progress-bar-webpack-plugin';
-import ManifestRevisionPlugin from 'manifest-revision-webpack-plugin';
-
-import {
- PATHS,
- env,
- sharedEnvs,
- currentScript,
- scriptOptions,
- namingConvention,
- buildNamingConvention,
-} from '../../_userSettings';
-
-const extractedSharedEnvs = Object.keys(process.env)
- .filter(key => sharedEnvs.indexOf(key) !== -1)
- .reduce((obj, key) => ({ [key]: process.env[key], ...obj }), {});
-
-const sharedPlugins = [
- new ProgressBarPlugin({ width: 40 }),
- new webpack.optimize.CommonsChunkPlugin('vendor', `${namingConvention}.js`),
- new CopyWebpackPlugin([{ from: PATHS.publicFilesFolder }]),
- new webpack.DefinePlugin({
- // For redux and react only, force `production` when creating a build or serving files
- 'process.env.NODE_ENV': JSON.stringify(
- (currentScript === 'build') || (currentScript === 'serve')
- ? 'production'
- : process.env.NODE_ENV
- ),
- // All other environment variables are passed through via `buildSettings` if defined in `sharedEnvs`
- buildSettings: {
- env: JSON.stringify(extractedSharedEnvs),
- },
- }),
-];
-
-const developmentPlugins = [
- // Use hot-reload middleware, browsersync for development
- new webpack.optimize.OccurenceOrderPlugin(),
- new webpack.HotModuleReplacementPlugin(),
-
- new BrowserSyncPlugin(
- {
- // BrowserSync options - see: http://www.browsersync.io/docs/options/
-
- // Use http://localhost:3000/ for development, proxy Dev Server.
- host: env.BROWSERSYNC_HOST,
- port: env.BROWSERSYNC_PORT,
- proxy: `http://${env.HOST}:${env.PORT}/`,
- // Stop the browser from automatically opening.
- open: false,
- // Scrolls & Form inputs on any device will be mirrored to all others.
- ghostMode: {
- clicks: false,
- scroll: true,
- forms: true,
- },
- // Show what browsers are connected.
- logConnections: true,
- },
- {
- // Webpack Plugin options
-
- // Prevent BrowserSync from reloading the page
- // and let Webpack Dev Server take care of this.
- reload: false,
- }
- ),
-];
-
-const productionPlugins = [
- // Extract css into one file for production, minify javascript
- new ExtractTextPlugin(`${buildNamingConvention}.css`, { allChunks: true }),
- new webpack.optimize.UglifyJsPlugin({ minimize: true, compress: { warnings: false } }),
- new HtmlWebpackPlugin({
- inject: false,
- template: PATHS.templateLocation,
-
- reactHtml: scriptOptions.dynamic ? '' : '',
- creatingBuild: true,
- env: process.env,
- }),
- new ScriptExtHtmlWebpackPlugin({
- async: ['app'],
- defer: ['app'],
- defaultAttribute: 'sync',
- }),
- new ManifestRevisionPlugin(
- PATHS.manifestFile,
- {
- rootAssetPath: PATHS.manifestRootAssetPath,
- ignorePaths: [],
- extensionsRegex: /\.(jpe?g|png|gif|svg)$/i,
- }
- ),
-];
-
-// TODO: extract out
-if (process.env.USE_COMPRESSION_PLUGIN) {
- productionPlugins.push(
- new CompressionPlugin({
- asset: '[path]',
- test: new RegExp(process.env.COMPRESSION_PLUGIN_REGEX),
- minRatio: 0,
- })
- );
-}
-
-export default currentScript === 'watch' ?
- sharedPlugins.concat(developmentPlugins)
- : sharedPlugins.concat(productionPlugins);
diff --git a/packages/dev-toolkit/src/webpack/config/resolve.js b/packages/dev-toolkit/src/webpack/config/resolve.js
deleted file mode 100644
index ea522e87..00000000
--- a/packages/dev-toolkit/src/webpack/config/resolve.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import path from 'path';
-
-import {
- rootForProject,
- rootForRequire,
- rootForToolkit,
-} from '../../_userSettings';
-
-// Files in these directories can be imported without a relative path
-export default {
- extensions: ['', '.js', '.jsx'],
- root: path.resolve(__dirname, rootForRequire),
- // the alias will allow us to get files relative to the `src`-folder
- // exmaple: `import { myUtil } from 'src/client/utils';`
- alias: {
- src: 'src',
- },
-
- modulesDirectories: [
- path.resolve(rootForProject, 'node_modules'),
- path.resolve(rootForToolkit, 'node_modules'),
- 'node_modules',
- ],
-};
diff --git a/packages/dev-toolkit/src/webpack/config/resolveLoader.js b/packages/dev-toolkit/src/webpack/config/resolveLoader.js
deleted file mode 100644
index fea48a66..00000000
--- a/packages/dev-toolkit/src/webpack/config/resolveLoader.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import path from 'path';
-
-import {
- rootForProject,
- rootForToolkit,
-} from '../../_userSettings';
-
-export default {
- modulesDirectories: [
- path.resolve(rootForProject, 'node_modules'),
- path.resolve(rootForToolkit, 'node_modules'),
- 'node_modules',
- ],
-};
diff --git a/packages/dev-toolkit/src/webpack/config/stats.js b/packages/dev-toolkit/src/webpack/config/stats.js
deleted file mode 100644
index b17dc96c..00000000
--- a/packages/dev-toolkit/src/webpack/config/stats.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import { env } from '../../_userSettings';
-
-export default {
- colors: true,
- timings: true,
- reasons: true,
-
- assets: env.VERBOSE_LOGGING,
- modules: env.VERBOSE_LOGGING,
- source: env.VERBOSE_LOGGING,
- errorDetails: env.VERBOSE_LOGGING,
- children: env.VERBOSE_LOGGING,
- hash: env.VERBOSE_LOGGING,
- version: env.VERBOSE_LOGGING,
- chunks: env.VERBOSE_LOGGING,
- chunkModules: env.VERBOSE_LOGGING,
- cached: env.VERBOSE_LOGGING,
- cachedAssets: env.VERBOSE_LOGGING,
-};
diff --git a/packages/dev-toolkit/src/webpack/projectSettings.js b/packages/dev-toolkit/src/webpack/projectSettings.js
new file mode 100644
index 00000000..7a5f107a
--- /dev/null
+++ b/packages/dev-toolkit/src/webpack/projectSettings.js
@@ -0,0 +1,34 @@
+import path from 'path';
+
+// dev-toolkit specific Folders
+export const devToolkitRoot = path.resolve(__dirname, '../../');
+export const devToolkitDistribution = path.resolve(devToolkitRoot, 'dist');
+export const gitRepoRoot = path.resolve(devToolkitRoot, '../../');
+export const originalTemplates = path.resolve(gitRepoRoot, 'templates');
+export const generatedTemplates = path.resolve(
+ devToolkitDistribution,
+ 'generated-templates/original'
+);
+export const generatedTemplatesWithoutComments = path.resolve(
+ devToolkitDistribution,
+ 'generated-templates/skipped-comments'
+);
+export const defaultTemplate = 'standard';
+
+// User Project Related Folders & Settings
+export const projectRoot = process.cwd();
+export const buildFolder = path.resolve(projectRoot, 'build');
+export const serverAppEntryPoint = path.resolve(projectRoot, 'src/server/index.js');
+export const userSettingsPath = path.resolve(projectRoot, 'dev-toolkit.config.js');
+
+export const assetsManifestFolder = buildFolder;
+export const assetsManifestName = 'assets-manifest.json';
+export const assetsManifestFile = path.resolve(assetsManifestFolder, assetsManifestName);
+
+export const entryPoint = './src/client/index.js';
+// Make sure leading slash & trailing slash is present (otherwise source-map won't work)
+export const publicPath = (process.env.ASSETS_PATH || '/assets')
+ .replace(/^\/?/, '/')
+ .replace(/\/?$/, '/');
+// Remove leading slash from public path to create correct file-path
+export const assetsPath = path.resolve(buildFolder, publicPath.replace(/^\//, ''));
diff --git a/packages/dev-toolkit/starting-point/.eslintrc b/packages/dev-toolkit/starting-point/.eslintrc
deleted file mode 100644
index bb9aa91a..00000000
--- a/packages/dev-toolkit/starting-point/.eslintrc
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "plugins": [
- "jsx-control-statements"
- ],
- "extends": [
- "airbnb",
- "plugin:jsx-control-statements/recommended"
- ],
- "parser": "babel-eslint",
- "rules": {
- "no-multiple-empty-lines": [
- "error",
- {
- "max": 1
- }
- ],
- "import/no-extraneous-dependencies": 0,
- "import/no-unresolved": [
- "error",
- {
- "ignore": [ "src/" ]
- }
- ]
- },
-
- "env": {
- "browser": true,
- "mocha": true
- }
-}
diff --git a/packages/dev-toolkit/starting-point/.gitignore b/packages/dev-toolkit/starting-point/.gitignore
deleted file mode 100644
index c8d61631..00000000
--- a/packages/dev-toolkit/starting-point/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-#############
-## Generated Files
-#############
-
-build/
-dist/
-
-#############
-## Node
-#############
-
-node_modules/
-npm-debug.log
diff --git a/packages/dev-toolkit/starting-point/package.json b/packages/dev-toolkit/starting-point/package.json
deleted file mode 100644
index a0466bd1..00000000
--- a/packages/dev-toolkit/starting-point/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "dev-toolkit-starter",
- "version": "1.0.0",
- "description": "dev-toolkit starting point",
- "main": "index.js",
- "scripts": {
- "dev": "dev-toolkit --watch",
- "build": "dev-toolkit --build"
- },
- "author": "",
- "license": "ISC",
- "toolkitSettings": {
- "vendor": [
- "react",
- "react-dom",
- "react-router"
- ]
- },
- "dependencies": {
- "compression": "^1.6.2",
- "domready": "^1.0.8",
- "express": "^4.14.0",
- "express-handlebars": "^3.0.0",
- "react": "^15.1.0",
- "react-dom": "^15.1.0",
- "react-router": "^2.4.1",
- "redbox-react": "^1.2.8",
- "serve-static": "^1.11.1"
- },
- "devDependencies": {
- "babel-eslint": "^6.1.2",
- "eslint": "^3.4.0",
- "eslint-config-airbnb": "^10.0.1",
- "eslint-import-resolver-webpack": "^0.5.1",
- "eslint-plugin-import": "^1.14.0",
- "eslint-plugin-jsx-a11y": "^2.2.1",
- "eslint-plugin-jsx-control-statements": "^2.1.1",
- "eslint-plugin-react": "^6.2.0"
- }
-}
diff --git a/packages/dev-toolkit/starting-point/src/client/RouterContainer.jsx b/packages/dev-toolkit/starting-point/src/client/RouterContainer.jsx
deleted file mode 100644
index b7af7b56..00000000
--- a/packages/dev-toolkit/starting-point/src/client/RouterContainer.jsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from 'react';
-import { Router, browserHistory, RouterContext } from 'react-router';
-
-import routes from './routes';
-
-// `RouterContainer.js`
-// --------------------
-// The root-container of our App that manages the configured routes. If you use
-// Redux, the component should wrap the below. Note how
-// this file uses capitalized camel-case to denote that it is a React-component.
-
-export default class RouterContainer extends React.Component {
- constructor(props) {
- super(props);
- this.displayName = 'RouterContainer';
-
- this.state = {};
- }
-
- render() {
- return (
- }
- />
- );
- }
-}
diff --git a/packages/dev-toolkit/starting-point/src/client/app.jsx b/packages/dev-toolkit/starting-point/src/client/app.jsx
deleted file mode 100644
index 3fabd747..00000000
--- a/packages/dev-toolkit/starting-point/src/client/app.jsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import domready from 'domready';
-import RedBox from 'redbox-react';
-
-// Note: `RouterContainer`-module is required inline
-
-// `app.js`
-// --------
-// This file is responsible mainly for handling hot-reloading. It reloads the main root container
-// (RouterContainer) whenever one of the files that gets imported by that container change.
-// An error is displayed if something goes wrong or a syntax-error occurs.
-
-// Create a Client-App with hot-reloading capabilities
-class App {
- constructor() {
- this.renderApp = this.renderApp.bind(this);
- this.hotReRender = this.hotReRender.bind(this);
- this.renderError = this.renderError.bind(this);
- this.rootElement = null;
-
- // Only proceed with rendering if we're not using a test-framework
- if (document.body.id !== 'mock-dom') {
- // When browser has finished loading, retrieve app-body element and render
- domready(() => {
- this.rootElement = document.querySelector('[data-jshook~="app-body"]');
- this.renderApp();
-
- // Support hot reloading of components by rerendering via vanilla webpack
- // HMR (Hot-Module-Replacement) & setTimeout
- if (module.hot) {
- module.hot.accept('./RouterContainer', () => {
- setTimeout(this.hotReRender);
- });
- }
- });
- }
- }
-
- // Render App with fresh version of required Routing module
- renderApp() {
- // eslint-disable-next-line global-require
- const RootComponent = require('./RouterContainer').default;
-
- ReactDOM.render(
- ,
- this.rootElement
- );
- }
-
- // Re-render after hot-reloading a module,
- // display error if something during the compilation goes wrong.
- hotReRender() {
- try {
- this.renderApp();
- } catch (error) {
- this.renderError(error);
- }
- }
-
- // Risplay an overlay for runtime errors
- renderError(error) {
- ReactDOM.render(
- ,
- this.rootElement
- );
- }
-}
-
-// start up the app immediately
-window.app = new App();
diff --git a/packages/dev-toolkit/starting-point/src/client/routes.jsx b/packages/dev-toolkit/starting-point/src/client/routes.jsx
deleted file mode 100644
index f911aeb2..00000000
--- a/packages/dev-toolkit/starting-point/src/client/routes.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react';
-import { Route, IndexRoute } from 'react-router';
-
-import Shell from './views/Shell';
-import Home from './views/features/Home';
-
-// `routes.js`
-// -----------
-// This looks like a component but is in effect just a routing definition.
-// These routes are rendered both on the client and on the server, therefore
-// they are imported in `RouterContainer` and in `server/router.js`.
-
-// NOTE: Even if you think you "don't need" server-rendering, you probably will do
-// if you have any intention of statically rendering your markup and using
-// react-router's dynamic routing.
-
-// Use Shell as surrounding container for all routes
-export default (
-
-
- {/* A view for the home page */}
-
-
-);
diff --git a/packages/dev-toolkit/starting-point/src/client/style/_config.scss b/packages/dev-toolkit/starting-point/src/client/style/_config.scss
deleted file mode 100644
index 8391fc93..00000000
--- a/packages/dev-toolkit/starting-point/src/client/style/_config.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-// ---
-// Caution! these have an effect on a lot of elements
-// --
-
-// use pixels for breakpoints
-$use-em-breakpoints : false;
-
-// Define repsonsive breakpoints for application
-$breakpoint-phone : 0px;
-$breakpoint-smart : 300px;
-$breakpoint-tablet7 : 440px;
-$breakpoint-tablet10 : 768px;
-$breakpoint-pcsmall : 992px;
-$breakpoint-pclarge : 1200px;
-
-// Share these variables in javascript
-:export {
- breakpointPhone: $breakpoint-phone;
- breakpointSmart: $breakpoint-smart;
- breakpointTablet7: $breakpoint-tablet7;
- breakpointTablet10: $breakpoint-tablet10;
- breakpointPcsmall: $breakpoint-pcsmall;
- breakpointPclarge: $breakpoint-pclarge;
-}
-
-// useful helper mixins
-@import 'mixins/_helpers.scss';
-
-// font-settings for app (get passed through mixin as defaults)
-$text-color-default : #333;
-$font-xxxlarge : 37px;
-$font-xxlarge : 26px;
-$font-xlarge : 21px;
-$font-large : 18px;
-$font-medium : 16px;
-$font-small : 14px;
-$font-xsmall : 12px;
-
-$header-font-family : 'Source Serif Pro', 'Times New Roman', Times, 'Georgia', serif;
-$body-font-family : 'Source Sans Pro', Verdana, Arial, sans-serif;
-@import 'mixins/_font-settings.scss';
-
-// a common variable for use throughout the app as simple grid-system
-$grid : 8px;
-
-// New brand colors (Use your own or inherit from mixins/_helpers)
-$brand-green : $green;
-$brand-red : $red;
-$brand-blue : $blue;
-$brand-orange : $orange;
-$brand-yellow : $yellow;
diff --git a/packages/dev-toolkit/starting-point/src/client/style/global.scss b/packages/dev-toolkit/starting-point/src/client/style/global.scss
deleted file mode 100644
index 045fb373..00000000
--- a/packages/dev-toolkit/starting-point/src/client/style/global.scss
+++ /dev/null
@@ -1,41 +0,0 @@
-// retrieve configuration
-@import './config.scss';
-
-// Global-style defaults specific to the application
-// NOTE:
-// Please consult with the team before you make changes in here. These are
-// defaults and can potentially break a lot of things or have side-effects!!
-:global body{
- // Remove margin & make sure body is not transparent
- margin : 0;
- background-color : white;
- // Use 'Open Sans' font, with native font as fallback (Wordpress Default)
- // see: https://bitsofco.de/the-new-system-font-stack/
- font-family: 'Open Sans',
- -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans,
- Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
-
- // Use border-box & make sure images don't overflow.
- *{ box-sizing : border-box; }
- img{ max-width : 100%; }
-
- // Remove 300ms click-delay for IE11+
- a[href], button, .btn, .button { touch-action: manipulation; }
-
- // use standard font
- font-family : $body-font-family;
- @include font(medium, $text-color-default, normal);
- line-height : 1.4em;
-
- // Prevent iOS Safari from freely adjusting font-size (Ex: on rotation)
- -webkit-text-size-adjust: 100%;
-
- // make fonts look nicer
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-:global(#__bs_notify__){
- opacity : 0.2!important;
- pointer-events: none!important;
-}
diff --git a/packages/dev-toolkit/starting-point/src/client/style/mixins/_font-settings.scss b/packages/dev-toolkit/starting-point/src/client/style/mixins/_font-settings.scss
deleted file mode 100644
index e45ddcc5..00000000
--- a/packages/dev-toolkit/starting-point/src/client/style/mixins/_font-settings.scss
+++ /dev/null
@@ -1,64 +0,0 @@
-// Defaults for font-sizes
-// don't change these, override them via style/_config
-$text-color-default : #333 !default;
-$font-xxxlarge : 37px !default;
-$font-xxlarge : 26px !default;
-$font-xlarge : 21px !default;
-$font-large : 18px !default;
-$font-medium : 16px !default;
-$font-small : 14px !default;
-$font-xsmall : 12px !default;
-
-// use mixin for font-sizes throughout app
-@mixin font($font-size: auto, $color: auto, $font-weight: auto){
- @if $font-size != auto {
- @if $font-size == default { font-size : $font-medium; }
- @else if $font-size == xxxlarge { font-size : $font-xxxlarge; }
- @else if $font-size == xxlarge { font-size : $font-xxlarge; }
- @else if $font-size == xlarge { font-size : $font-xlarge; }
- @else if $font-size == large { font-size : $font-large; }
- @else if $font-size == medium { font-size : $font-medium; }
- @else if $font-size == small { font-size : $font-small; }
- @else if $font-size == xsmall { font-size : $font-xsmall; }
- @else { font-size : $font-size; }
- }
- @if $color != auto {
- @if $color == default { color : $text-color-default; }
- @else { color : $color; }
- }
- @if $font-weight != auto {
- font-weight: $font-weight;
- }
-}
-
-@mixin importFont(
- $family,
- $path,
- $filename,
- $hash: 'v1',
- $font-weight: normal,
- $font-style: normal,
- $include-woff2 : false
-){
- @font-face{
- font-family : $family;
- // NOTE:
- // don't hash on eot-files, prevents `OTS parsing error: invalid version tag`
- @if $include-woff2 == true {
- src : url($path + "/" + $filename + ".eot"),
- url($path + "/" + $filename + ".eot?" + $hash + "#iefix") format("embedded-opentype"),
- url($path + "/" + $filename + ".woff2?" + $hash) format("woff2"),
- url($path + "/" + $filename + ".woff?" + $hash) format("woff"),
- url($path + "/" + $filename + ".ttf?" + $hash) format("truetype"),
- url($path + "/" + $filename + ".svg?" + $hash + "#" + $filename) format("svg");
- } @else {
- src : url($path + "/" + $filename + ".eot"),
- url($path + "/" + $filename + ".eot?" + $hash + "#iefix") format("embedded-opentype"),
- url($path + "/" + $filename + ".woff?" + $hash) format("woff"),
- url($path + "/" + $filename + ".ttf?" + $hash) format("truetype"),
- url($path + "/" + $filename + ".svg?" + $hash + "#" + $filename) format("svg");
- }
- font-weight : $font-weight;
- font-style : $font-style;
- }
-}
diff --git a/packages/dev-toolkit/starting-point/src/client/style/mixins/_helpers.scss b/packages/dev-toolkit/starting-point/src/client/style/mixins/_helpers.scss
deleted file mode 100644
index ca6febc9..00000000
--- a/packages/dev-toolkit/starting-point/src/client/style/mixins/_helpers.scss
+++ /dev/null
@@ -1,425 +0,0 @@
-// These are helper-mixins, -variables etc
-// ---
-
-@mixin resetList{
- // remove the list style
- list-style : none;
- // margin-reset is optional
-}
-// mixin for crisp image-rednering
-@mixin crisp-image{
- image-rendering : optimizeSpeed; // Fallback
- -ms-interpolation-mode : nearest-neighbor; // IE8+
- image-rendering : -o-crisp-edges; // Opera
- image-rendering : -moz-crisp-edges; // Firefox
- image-rendering : -webkit-optimize-contrast; // Chrome (and eventually Safari)
- image-rendering : optimize-contrast; // CSS3 Proposed
-}
-
-// Micro Clearfix by Nicolas Gallagher
-// http://nicolasgallagher.com/micro-clearfix-hack/
-@mixin micro-clearfix{
- &:before,
- &:after {
- content : "";
- display : table;
- }
- &:after {
- clear : both;
- }
-
- zoom : 1; // For IE 6/7 (trigger hasLayout)
-}
-
-// A tiny clearfix from CSS-Tricks
-// https://css-tricks.com/snippets/css/clear-fix/
-@mixin clearfix{
- &:after{
- content: "";
- display: table;
- clear: both;
- }
-}
-
-// create a positioned Element, crossbrowser
-@mixin position($position: relative, $display: auto, $width: "", $height: ""){
- position : $position;
-
- @if $display != auto { display : $display; }
- @if $width != "" { width : $width; }
- @if $height != "" { height : $height; }
-}
-
-// Definition for animated elements
-@mixin isAnimated{
- // CAUTION:
- // This breaks `position: fixed;`-elements and will make them
- // behave like `absolute`-elements! (won't fix them to the viewport)
- transform : translate3d(0,0,0);
- perspective : 1000;
-
- // Setting the origin for transformations of an element:
- // transform-origin: 50% 50%;
-}
-
-// remove chrome jagged edges for pngs
-// http://stackoverflow.com/questions/6492027/css-transform-jagged-edges-in-chrome
-@mixin removeJaggedEdges{
- outline: 1px solid transparent;
- backface-visibility: hidden;
- transform-style: preserve-3d;
-}
-
-@mixin disableContextMenu{
- user-select : none;
- -webkit-user-select : none; // disable selection/Copy of UIWebView
- -webkit-user-callout : none; // disable the IOS popup when long-press on a link
- -webkit-touch-callout : none; // disable the IOS popup when long-press on a link
-}
-
-// Definition for button elements
-@mixin isButton{
- // change the cursor to a hand
- cursor : pointer;
- // set text defaults
- text-decoration : none;
- vertical-align : middle;
- // disable user selection and webkit highlight on tap
- user-select : none;
- -ms-user-select : none;
- -webkit-user-select : none;
- -webkit-tap-highlight-color : transparent;
-
- // Fix for the Firefox padding issue on focus
- &::-moz-focus-inner{
- padding : 0 !important;
- margin : -1px !important;
- }
-}
-
-// Prototype mixins for debuggind elements
-$proto-enabled : true;
-
-// color an element
-@mixin proto($id: 1, $opacity : 1){
- $enabled : $proto-enabled;
-
- @if $enabled {
- @if (($id == 0 ) or ($id == 'blue')) { background-color : rgba($blue, $opacity); }
- @elseif (($id == 1 ) or ($id == 'blue-light')) { background-color : rgba($blue-light, $opacity); }
- @elseif (($id == 2 ) or ($id == 'yellow')) { background-color : rgba($yellow-light, $opacity); }
- @elseif (($id == 3 ) or ($id == 'green-light')) { background-color : rgba($green-light, $opacity); }
- @elseif (($id == 4 ) or ($id == 'orange')) { background-color : rgba($orange-light, $opacity); }
- @elseif (($id == 5 ) or ($id == 'red-light')) { background-color : rgba($red-light, $opacity); }
- @elseif (($id == 6 ) or ($id == 'blue-dark')) { background-color : rgba($blue-dark, $opacity); }
- @elseif (($id == 7 ) or ($id == 'yellow-light')) { background-color : rgba($yellow-light, $opacity); }
- @elseif (($id == 8 ) or ($id == 'green')) { background-color : rgba($green-dark, $opacity); }
- @elseif (($id == 9 ) or ($id == 'orange-light')) { background-color : rgba($orange-light, $opacity); }
- @elseif (($id == 10) or ($id == 'red')) { background-color : rgba($red-dark, $opacity); }
- @else{
- //background-color : rgba($nr, 0.8);
- @include background-image(linear-gradient(left, rgba($id, 1), rgba($id, 0.9)));
- }
- }
-}
-
-// make sure element has a height (don't collapse), even if it has no content
-@mixin emptyHeight($height : 1.4em){
- line-height : $height;
- min-height : $height;
-}
-
-// make text fade out
-@mixin fontFading($color : #fff, $size : 20px, $distance : 0, $disabled : false, $position : right, $wrapper : after){
- $fading-container : '';
-
- // create pseudo-element, or an element using a classname
- @if ($wrapper == after) or ($wrapper == before) {
- $fading-container : '&:' + $wrapper;
- } @else {
- $fading-container : $wrapper;
- }
-
- @if $disabled == false {
- #{$fading-container}{
- @include position(absolute, block);
- @if ($wrapper == after) or ($wrapper == before) {
- content : ' ';
- pointer-events : none;
- }
-
- @if $position == top {
- width : 100%;
- height : $size;
- top : $distance;
- right : initial;
- bottom : initial;
- left : 0;
- @include background-image(linear-gradient(top, rgba($color, 1), rgba($color, 0) 95%));
- }
- @if $position == right {
- width : $size;
- height : 100%;
- top : 0;
- right : $distance;
- bottom : initial;
- left : initial;
- @include background-image(linear-gradient(right, rgba($color, 1), rgba($color, 0) 95%));
- }
- @if $position == bottom {
- width : 100%;
- height : $size;
- top : initial;
- right : initial;
- bottom : $distance;
- left : 0;
- @include background-image(linear-gradient(bottom, rgba($color, 1), rgba($color, 0) 95%));
- }
- @if $position == left {
- width : $size;
- height : 100%;
- top : 0;
- right : initial;
- bottom : initial;
- left : $distance;
- @include background-image(linear-gradient(left, rgba($color, 1), rgba($color, 0) 95%));
- }
- }
- } @else {
- #{$fading-container}{ display : none; }
- }
-}
-
-// easing definitions
-$ease-in : ease-in;
-$ease-out : ease-out;
-$ease-in-out : ease-in-out;
-
-$ease-in-quart : cubic-bezier(0.895, 0.030, 0.685, 0.220);
-$ease-out-quart : cubic-bezier(0.165, 0.840, 0.440, 1.000);
-$ease-in-out-quart : cubic-bezier(0.770, 0.000, 0.175, 1.000);
-
-$ease-in-quint : cubic-bezier(0.755, 0.050, 0.855, 0.060);
-$ease-out-quint : cubic-bezier(0.230, 1.000, 0.320, 1.000);
-$ease-in-out-quint : cubic-bezier(0.860, 0.000, 0.070, 1.000);
-
-$ease-in-expo : cubic-bezier(0.950, 0.050, 0.795, 0.035);
-$ease-out-expo : cubic-bezier(0.190, 1.000, 0.220, 1.000);
-$ease-in-out-expo : cubic-bezier(1.000, 0.000, 0.000, 1.000);
-
-$ease-in-back : cubic-bezier(0.600, -0.280, 0.735, 0.045);
-$ease-out-back : cubic-bezier(0.175, 0.885, 0.320, 1.275);
-$ease-in-out-back : cubic-bezier(0.680, -0.550, 0.265, 1.550);
-
-//// Predefined Colors ////
-$white-5 : lighten(#000, 5%); // #0d0d0d
-$white-10 : lighten(#000, 10%); // #1a1a1a
-$white-15 : lighten(#000, 15%); // #262626
-$white-20 : lighten(#000, 20%); // #333333
-$white-25 : lighten(#000, 25%); // #404040
-$white-30 : lighten(#000, 30%); // #4d4d4d
-$white-35 : lighten(#000, 35%); // #595959
-$white-40 : lighten(#000, 40%); // #666666
-$white-45 : lighten(#000, 45%); // #737373
-$white-50 : lighten(#000, 50%); // #808080
-$white-55 : lighten(#000, 55%); // #8c8c8c
-$white-60 : lighten(#000, 60%); // #999999
-$white-65 : lighten(#000, 65%); // #a6a6a6
-$white-70 : lighten(#000, 70%); // #b3b3b3
-$white-75 : lighten(#000, 75%); // #bfbfbf
-$white-80 : lighten(#000, 80%); // #cccccc
-$white-85 : lighten(#000, 85%); // #d9d9d9
-// more subtle shades for near-white
-$white-90 : lighten(#000, 90%); // #e6e6e6
-$white-91 : lighten(#000, 91%); // #e8e8e8
-$white-92 : lighten(#000, 92%); // #ebebeb
-$white-93 : lighten(#000, 93%); // #ededed
-$white-94 : lighten(#000, 94%); // #f0f0f0
-$white-95 : lighten(#000, 95%); // #f2f2f2
-$white-96 : lighten(#000, 96%); // #f5f5f5
-$white-97 : lighten(#000, 97%); // #f7f7f7
-$white-98 : lighten(#000, 98%); // #fafafa
-$white-99 : lighten(#000, 99%); // #fcfcfc
-
-$blue-light : #268ce6;
-$blue : #1177db;
-$blue-dark : #0c68c3;
-
-$dark_blue-light : shade($blue-light, 16%);
-$dark_blue : shade($blue, 16%);
-$dark_blue-dark : shade($blue-dark, 16%);
-
-$light_blue-light : #50b4dc;
-$light_blue : #3fa9d2;
-$light_blue-dark : #2b92b9;
-
-$yellow-light : #fed829;
-$yellow : #fecf06;
-$yellow-dark : #eebd01;
-
-$orange-light : #fd9b3e;
-$orange : #fc8c1f;
-$orange-dark : #ea7e0f;
-
-$green-light : #56c35d;
-$green : #40b547;
-$green-dark : #38a03e;
-
-$red-light : #e5584d;
-$red : #d83d30;
-$red-dark : #bc2d20;
-
-$red_orange-light : tint(mix($red-light, $orange-light, 26%), 2%);
-$red_orange : tint(mix($red, $orange, 26%), 2%);
-$red_orange-dark : tint(mix($red-dark, $orange-dark, 26%), 2%);
-
-$pink-light : #fb6abe;
-$pink : #f254b1;
-$pink-dark : #d8479e;
-
-
-// RWD - Responsive Web Design Additions
-// --
-// em's will be used instead of pixels
-// http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/
-
-// !default allows breakpoint to be set beforehand
-// see: http://sass-lang.com/documentation/file.SASS_REFERENCE.html#variable_defaults_
-$use-em-breakpoints : true !default;
-$body-px : 16px !default;
-
-// The breakpoints to use
-$breakpoint-phone : 220px !default; // 240
-$breakpoint-smart : 300px !default; // 320
-$breakpoint-tablet7 : 460px !default; // 480
-$breakpoint-tablet10 : 750px !default; // 768
-$breakpoint-pcsmall : 960px !default; // 1024
-$breakpoint-pclarge : 1260px !default; // 1280
-
-// remove units from a number
-@function stripUnits($number) {
- @return $number / ($number * 0 + 1);
-}
-
-// Convert pixels to em
-@function toEm($px){
- $basepx : $body-px;
-
- @if $use-em-breakpoints { @return stripUnits($px)/stripUnits($basepx) + 0em; }
- @else { @return $px; }
-}
-
-// convert to em's for better compatibility
-// see: http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/
-$phone : toEm($breakpoint-phone);
-$smart : toEm($breakpoint-smart);
-$tablet7 : toEm($breakpoint-tablet7);
-$tablet10 : toEm($breakpoint-tablet10);
-$pcsmall : toEm($breakpoint-pcsmall);
-$pclarge : toEm($breakpoint-pclarge);
-
-// Breakpoint functionality
-// media-devices can be given in random order
-@mixin breakpoint($media) {
- // define minimum and maximum width for each device
- $phone-min : $phone;
- $phone-max : $smart;
-
- $smart-min : $smart;
- $smart-max : $tablet7;
-
- $tablet7-min : $tablet7;
- $tablet7-max : $tablet10;
-
- $tablet10-min : $tablet10;
- $tablet10-max : $pcsmall;
-
- $pcsmall-min : $pcsmall;
- $pcsmall-max : $pclarge;
-
- $pclarge-min : $pclarge;
- $pclarge-max : "none";
-
- $min-width : toEm($pclarge); // start with the largest value for reducing later
- $max-width : toEm($phone); // start with the smallest value for increasing later
-
- // scan all the devices given, use the smallest min-width and largest max-width
- @for $i from 1 through length($media) {
- $device : nth($media, $i);
-
- // Display the css for the default device (any)
- @if $device == "default" {
- @content;
- } @else {
- // Or display the css for each given device using media Breakbpoints
-
- @if ($device == "phone") {
- @if ($min-width > $phone-min) { $min-width : $phone-min; }
- @if ($max-width < $phone-max) { $max-width : $phone-max; }
- }
-
- @else if ($device == "smart") {
- @if ($min-width > $smart-min) { $min-width : $smart-min; }
- @if ($max-width < $smart-max) { $max-width : $smart-max; }
- }
-
- @else if ($device == "tablet7") {
- @if ($min-width > $tablet7-min) { $min-width : $tablet7-min; }
- @if ($max-width < $tablet7-max) { $max-width : $tablet7-max; }
- }
-
- @else if ($device == "tablet10") {
- @if ($min-width > $tablet10-min) { $min-width : $tablet10-min; }
- @if ($max-width < $tablet10-max) { $max-width : $tablet10-max; }
- }
-
- @else if ($device == "pcsmall") {
- @if ($min-width > $pcsmall-min) { $min-width : $pcsmall-min; }
- @if ($max-width < $pcsmall-max) { $max-width : $pcsmall-max; }
- }
-
- @else if ($device == "pclarge") {
- @if ($min-width > $pclarge-min) { $min-width : $pclarge-min; }
- $max-width : $pclarge-max;
- // does not have a max-width
- }
- }
- }
-
- // Use this for seeing the results of media query in console
- // @debug $media;
- // @debug min $min-width max $max-width;
-
- // create a single media query
- @if ($max-width == $pclarge-max) {
- // don't set a max width if highest-resolution device is targeted
- @media (min-width: $min-width) { @content; }
- } @else {
- @media (min-width: $min-width) and (max-width: $max-width) { @content; }
- }
-}
-
-@mixin checkerPattern{
- $light-color : transparent;
- $dark-color : rgba(gray, 0.14);
- $size : $grid * 2;
-
- background-color: $light-color;
- background-image:
- linear-gradient(45deg, $dark-color 25%, transparent 25%, transparent 75%, $dark-color 75%, $dark-color),
- linear-gradient(45deg, $dark-color 25%, transparent 25%, transparent 75%, $dark-color 75%, $dark-color),
- ;
- background-size: $size $size;
- background-position: 0 0, ($size / 2) ($size / 2);
-}
-
-// Misc Documentation
-//
-// - min-height doesn't work on tables
-// height is the equivalent
-// see: http://stackoverflow.com/questions/7790222/css-display-table-min-height-not-working
-//
-//
-
-// -----------------------------------------------------------------
-// > @stoikerty https://github.com/stoikerty/universal-dev-toolkit
diff --git a/packages/dev-toolkit/starting-point/src/client/views/Shell.jsx b/packages/dev-toolkit/starting-point/src/client/views/Shell.jsx
deleted file mode 100644
index d9facadd..00000000
--- a/packages/dev-toolkit/starting-point/src/client/views/Shell.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import React, { PropTypes } from 'react';
-
-import s from './Shell/_style.scss';
-
-// `Shell.js`
-// --------------------
-// Having a Shell is perfect if you want to transition between different features of your app or
-// managing scroll-state and navigation.
-
-const displayName = 'Shell';
-const defaultProps = {};
-const propTypes = {
- children: PropTypes.node,
-};
-
-const component = (props) => (
-
- {'Shell'}
- {props.children}
-
-);
-
-component.displayName = displayName;
-component.defaultProps = defaultProps;
-component.propTypes = propTypes;
-export default component;
diff --git a/packages/dev-toolkit/starting-point/src/client/views/Shell/_style.scss b/packages/dev-toolkit/starting-point/src/client/views/Shell/_style.scss
deleted file mode 100644
index e2737c6b..00000000
--- a/packages/dev-toolkit/starting-point/src/client/views/Shell/_style.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-// Import global config in every file
-@import 'style/config';
-
-// Import global style once
-@import 'style/global';
-
-.shell{
- // Positioning mixin. Better have a positioned element than regretting it later...
- @include position(relative, block, 100%);
- float : left;
- padding : $grid;
-
- // Use proto to design prototype component with random background-color & opacity
- // you will see this as yellow
- @include proto(2, 0.2);
-}
diff --git a/packages/dev-toolkit/starting-point/src/client/views/features/Home.jsx b/packages/dev-toolkit/starting-point/src/client/views/features/Home.jsx
deleted file mode 100644
index 6fdb59e9..00000000
--- a/packages/dev-toolkit/starting-point/src/client/views/features/Home.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react';
-
-import s from './Home/_style.scss';
-
-const displayName = 'Home';
-const defaultProps = {};
-const propTypes = {};
-
-const component = () => (
-
- {'Home Feature'}
-
-);
-
-component.displayName = displayName;
-component.defaultProps = defaultProps;
-component.propTypes = propTypes;
-export default component;
diff --git a/packages/dev-toolkit/starting-point/src/client/views/features/Home/_style.scss b/packages/dev-toolkit/starting-point/src/client/views/features/Home/_style.scss
deleted file mode 100644
index 0f440ec2..00000000
--- a/packages/dev-toolkit/starting-point/src/client/views/features/Home/_style.scss
+++ /dev/null
@@ -1,11 +0,0 @@
-@import 'style/config';
-
-.home{
- @include position(relative, block, 100%);
- float : left;
- margin : $grid 0 0;
- padding : $grid;
-
- // you will see this as transparent-blue
- @include proto(1, 0.3);
-}
diff --git a/packages/dev-toolkit/starting-point/src/server/app.js b/packages/dev-toolkit/starting-point/src/server/app.js
deleted file mode 100644
index 32319b20..00000000
--- a/packages/dev-toolkit/starting-point/src/server/app.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// The application constructor is separate
-import App from './bootstrap';
-
-// NOTE:
-// The toolkit expects the `start` an `use`-methods below to be available.
-// It will use the methods for the development middleware, for running
-// the server and for generating static-rendered builds.
-
-// Launch server later with webpack using an exported class
-// The class needs `start` & `use`-methods
-export default class {
- // Use this to start the server
- start(options = { message: null }) {
- App.start({ message: options.message });
- }
-
- // Bind the express middleware for webpack, this method should
- // redirect to & act in the same way as the express `use`-method.
- use(...middlewareOptions) {
- App.use(...middlewareOptions);
- }
-}
diff --git a/packages/dev-toolkit/starting-point/src/server/bootstrap.js b/packages/dev-toolkit/starting-point/src/server/bootstrap.js
deleted file mode 100644
index 9a83665f..00000000
--- a/packages/dev-toolkit/starting-point/src/server/bootstrap.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import express from 'express';
-import compression from 'compression';
-import serveStatic from 'serve-static';
-import hbs from 'express-handlebars';
-import router from './router';
-
-export default new class App {
- constructor() {
- // server config
- this.hostname = process.env.HOST || 'localhost';
- this.port = process.env.PORT || 2000;
-
- // bind class methods
- this.init = this.init.bind(this);
- this.start = this.start.bind(this);
- this.use = this.use.bind(this);
-
- // Create express server instance & initialize
- this.express = express();
- this.init();
-
- // Create application logging functionality.
- // A neat console wrapper that keeps the correct line number.
- // http://stackoverflow.com/questions/13815640/a-proper-wrapper-for-console-log-with-correct-line-number
- /* eslint-disable no-console */
- this.log = (function log() {
- return console.log.bind(console);
- }());
- /* eslint-enable no-console */
- }
-
- init() {
- this.express.engine('hbs', hbs({ extname: 'hbs' }));
- this.express.set('views', `${process.cwd()}/src/server/views`);
- this.express.set('view engine', 'hbs');
- this.express.locals.settings['x-powered-by'] = false;
- this.express.disable('x-powered-by');
- }
-
- // Launch express server with react-router
- start(options = { message: null, serveBuild: false }) {
- // use gzip compression
- this.express.use(compression());
-
- if (options.serveBuild) {
- // serve build folder
- this.express.use(serveStatic('build'));
- }
-
- // Listen on specified port
- this.express.listen(this.port, (error) => {
- if (error) {
- this.express.error(error);
- } else {
- this.log(`\n==> ๐ Listening on http://${this.hostname}:${this.port}\n`);
- if (options.message) {
- this.log(options.message);
- }
- }
- });
-
- // start react-router
- this.express.use(router);
- }
-
- // bind express middleware
- use(...middlewareOptions) {
- this.express.use(...middlewareOptions);
- }
-};
diff --git a/packages/dev-toolkit/starting-point/src/server/public-files/Favicon.png b/packages/dev-toolkit/starting-point/src/server/public-files/Favicon.png
deleted file mode 100644
index fd76d825..00000000
Binary files a/packages/dev-toolkit/starting-point/src/server/public-files/Favicon.png and /dev/null differ
diff --git a/packages/dev-toolkit/starting-point/src/server/public-files/favicon.ico b/packages/dev-toolkit/starting-point/src/server/public-files/favicon.ico
deleted file mode 100644
index cf0776c0..00000000
Binary files a/packages/dev-toolkit/starting-point/src/server/public-files/favicon.ico and /dev/null differ
diff --git a/packages/dev-toolkit/starting-point/src/server/router.jsx b/packages/dev-toolkit/starting-point/src/server/router.jsx
deleted file mode 100644
index 1378d67a..00000000
--- a/packages/dev-toolkit/starting-point/src/server/router.jsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import React from 'react';
-import ReactDOM from 'react-dom/server';
-import { match, RouterContext } from 'react-router';
-
-import { useServerRendering } from 'src/settings';
-import routes from '../client/routes';
-
-// React Router Boilerplate
-// Note:
-// Adapted from server-rendering example: https://github.com/rackt/react-router/blob/latest/docs/guides/advanced/ServerRendering.md
-export default (req, res) => {
- match({ routes, location: req.url }, (error, redirectLocation, renderProps) => {
- if (error) {
- res.status(500).send(error.message);
- } else if (redirectLocation) {
- res.redirect(302, redirectLocation.pathname + redirectLocation.search);
- } else if (renderProps) {
- const reactHtml = useServerRendering ?
- ReactDOM.renderToString( ) : '';
-
- // Render `layout`-template using Handlebars
- res.status(200).render('layout', {
- reactHtml,
- isDev: global.isDev,
- });
- } else {
- res.status(404).send('Not found');
- }
- });
-};
diff --git a/packages/dev-toolkit/starting-point/src/server/views/layout.hbs b/packages/dev-toolkit/starting-point/src/server/views/layout.hbs
deleted file mode 100644
index 38584324..00000000
--- a/packages/dev-toolkit/starting-point/src/server/views/layout.hbs
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
- Universal App
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{{#if htmlWebpackPlugin.options.creatingBuild}}
-
- {{#each htmlWebpackPlugin.files.css}}
-
- {{/each}}
-{{/if}}
-
-
-
-
- {{{reactHtml}}}
-
-
-{{#if htmlWebpackPlugin.options.creatingBuild}}
- {{#each htmlWebpackPlugin.files.chunks}}
-
- {{/each}}
-{{else}}
-
-
-{{/if}}
-
-
diff --git a/packages/dev-toolkit/starting-point/src/settings.js b/packages/dev-toolkit/starting-point/src/settings.js
deleted file mode 100644
index 5fb0f17d..00000000
--- a/packages/dev-toolkit/starting-point/src/settings.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Shared settings between client and server
-
-export const useServerRendering = false;
-export const removeMe = true;
diff --git a/packages/dynamic-pages/.eslintignore b/packages/dynamic-pages/.eslintignore
deleted file mode 100644
index 5e3db2aa..00000000
--- a/packages/dynamic-pages/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-**/dist/*.js
diff --git a/packages/dynamic-pages/.npmignore b/packages/dynamic-pages/.npmignore
deleted file mode 100644
index 3bbdd9bb..00000000
--- a/packages/dynamic-pages/.npmignore
+++ /dev/null
@@ -1,6 +0,0 @@
-#############
-## Node
-#############
-
-node_modules/
-npm-debug.log
diff --git a/packages/dynamic-pages/Readme.md b/packages/dynamic-pages/Readme.md
deleted file mode 100644
index 9f3b36c9..00000000
--- a/packages/dynamic-pages/Readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-#### Dynamic Pages
-Dynamic page-loading utilities for react-router.
-See [this gist](https://gist.github.com/stoikerty/40a668e8fd4e2919034fd1eed2252bcb) for how to implement.
-
-Similar to [PRPL](https://www.polymer-project.org/1.0/toolbox/server)
-PRPL = Push critical resources for the initial route, Render initial route, Pre-cache remaining routes, Lazy-load and create remaining routes on demand.
-
-*see related project: [stoikerty/dev-toolkit](https://github.com/stoikerty/dev-toolkit)*
diff --git a/packages/dynamic-pages/package.json b/packages/dynamic-pages/package.json
deleted file mode 100644
index 9b630c16..00000000
--- a/packages/dynamic-pages/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "dynamic-pages",
- "version": "0.3.0",
- "description": "Dynamic page-loading utilities for react-router",
- "main": "dist/dynamicPages.js",
- "scripts": {
- "prepublish": "npm run build",
- "build": "babel src --presets es2015 --out-dir dist",
- "watch": "babel src --presets es2015 --watch --out-dir dist",
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/stoikerty/dev-toolkit.git"
- },
- "keywords": [
- "react",
- "isomorphic",
- "react-router",
- "dev-toolkit",
- "universal",
- "javascript"
- ],
- "author": "Jorge Antunes @stoikerty",
- "license": "ISC",
- "bugs": {
- "url": "https://github.com/stoikerty/dev-toolkit/issues"
- },
- "homepage": "https://github.com/stoikerty/dev-toolkit#readme",
- "dependencies": {
- "chalk": "^1.1.3",
- "file-exists": "^2.0.0",
- "lodash.foreach": "^4.5.0",
- "mkdirp": "^0.5.1"
- },
- "devDependencies": {
- "babel-cli": "^6.16.0",
- "babel-preset-es2015": "^6.16.0"
- }
-}
diff --git a/packages/dynamic-pages/src/dynamicPages.js b/packages/dynamic-pages/src/dynamicPages.js
deleted file mode 100644
index 68b5f527..00000000
--- a/packages/dynamic-pages/src/dynamicPages.js
+++ /dev/null
@@ -1,202 +0,0 @@
-import each from 'lodash.foreach';
-import GenerateFiles from './dynamicPages/generateFiles';
-
-// TODO:
-// # getComponents
-// - handle any amount of components, not just `header` & `content`
-// # generateScripts
-// - what about unique scripts, modules that use the same filename & displayname
-// - what about images that are not lazily loaded?
-// Possible solution could be to use `images-require-hook` instead of filesHook
-// see: https://github.com/ptshih/images-require-hook
-// # find a way to separate server-only packages inside `generateFiles` from being bundled on client
-
-export default new class DynamicPages {
- constructor() {
- this.isClient = false;
- this.prefetchComponents = [];
- this.definedRoutes = [];
- }
-
- init({ isClient }) {
- // Is the utility running on the client or the server?
- this.isClient = isClient || this.isClient;
- }
-
- // Utility for retrieving displayName of component
- getComponentName(component) {
- return component.WrappedComponent ?
- component.WrappedComponent.displayName : component.displayName;
- }
-
- // Utility for checking if a given path has parameters
- hasPathParameters(renderPath) {
- return renderPath.indexOf('/:') !== -1;
- }
-
- // Build an array of components to be prefetched
- addToPrefetch({ components }) {
- this.prefetchComponents.push(...components);
- }
-
- // Fetch all components previously added to the `prefetchComponents`-array
- runPrefetch({ logActivity }) {
- if (this.isClient) {
- // eslint-disable-next-line no-console
- const log = console && console.info ? console.info : console.log;
-
- // Fetch all components into browser cache, using callback
- this.prefetchComponents.forEach((component) => {
- if (typeof component === 'object') {
- const multipleComponents = component;
-
- each(multipleComponents, (value, key) => {
- multipleComponents[key]((module) => {
- const name = this.getComponentName(module.default);
- if (logActivity) {
- log(`Cached dynamic component "${name}"`);
- }
- });
- });
- } else {
- component((module) => {
- const name = this.getComponentName(module.default);
- if (logActivity) {
- // eslint-disable-next-line no-console
- log(`Cached dynamic component "${name}"`);
- }
- });
- }
- });
- } else {
- // Components are already loaded, no prefetching is needed
- }
- }
-
- // Save the route and returns needed props to react-router
- defineRoute({ renderPath, components, dynamicData }) {
- this.definedRoutes.push({ renderPath, components, dynamicData });
-
- // Make it work with react-router by returning necessary props
- // see: https://github.com/ReactTraining/react-router/blob/master/docs/guides/DynamicRouting.md
- return this.isClient
- // React-Router's `getComponents` fetches the components asynchronously when on the client.
- ? { getComponents: this.getComponents(components) }
- // On the Server, React-Router only forwards components to the parent view when `components`
- // is set, otherwise it is unable to forward individual component variables.
- : { components };
- }
-
- //
- getComponents(components) {
- return (location, cb) => {
- if (typeof components === 'object') {
- if (this.isClient) {
- // see: https://github.com/reactjs/react-router/blob/master/docs/API.md#getcomponentnextstate-callback
- const fetchedComponents = {};
-
- each(components, (value, key) => {
- components[key]((component) => {
- fetchedComponents[key] = component.default;
- const fetchedLastComponent =
- Object.keys(fetchedComponents).length === Object.keys(components).length;
-
- // use callback only if all components have been fetched
- if (fetchedLastComponent) {
- cb(null, fetchedComponents);
- }
- });
- });
-
- // TODO: This `if` is a hack, needs to handle any amount of components, not hardcoded ones
- if (components && components.header) {
- components.header(header => {
- components.content(content => {
- cb(null, { header: header.default, content: content.default });
- });
- });
- } else {
- const singleComponent = components;
- singleComponent.content(content => {
- cb(null, { content: content.default });
- });
- }
- } else {
- // component modules can be used directly
- each(components, (value, key) => {
- cb(null, components[key]);
- });
- }
- } else {
- if (this.isClient) {
- // component module is fetched first, via callback
- components((module) => {
- cb(null, module.default);
- });
- } else {
- const singleComponent = components;
- // component module can be used directly
- cb(null, singleComponent);
- }
- }
- };
- }
-
- // Create scripts for each component to insert into html
- // NOTE: Server-usage only
- generateScripts({ renderPath }) {
- let scripts = '';
-
- if (!this.isClient) {
- const currentRoute = this.definedRoutes.find(route => {
- let isCurrentRoute = false;
-
- // Does the current route have any parameters? Parameters start with `/:`
- if (this.hasPathParameters(route.renderPath)) {
- // Let's strip the parameter part out of the route
- const routePath =
- route.renderPath.substring(0, route.renderPath.indexOf('/:')).toLowerCase();
- // check whether the given `renderPath` begins with the defined `routePath`
- if (renderPath.toLowerCase().lastIndexOf(routePath, 0) === 0) {
- isCurrentRoute = true;
- }
- } else if (route.renderPath.toLowerCase() === renderPath.toLowerCase()) {
- isCurrentRoute = true;
- }
-
- return isCurrentRoute;
- });
-
- if (currentRoute) {
- each(currentRoute.components, (component) => {
- // Support ES2015-style modules
- const currentComponent = component.default ? component.default : component;
- // support wrapped components / HOC (Higher Order Components)
- const name = this.getComponentName(currentComponent);
- scripts = `${scripts}\n`;
- });
- }
- }
-
- return scripts;
- }
-
- // The Dynamic Page Generator
- // NOTE: Server-usage only
- importDynamicRenderFile({ dynamicRenderFile }) {
- GenerateFiles.setupDynamicRenderFile({ dynamicRenderFile });
- }
- generatePages({ publicPath, buildFolder, manifestFile, doneCallback }) {
- if (!this.isClient) {
- GenerateFiles.startRendering({
- publicPath,
- buildFolder,
- manifestFile,
- definedRoutes: this.definedRoutes,
- getComponentName: this.getComponentName,
- hasPathParameters: this.hasPathParameters,
- doneCallback,
- });
- }
- }
-};
diff --git a/packages/dynamic-pages/src/dynamicPages/generateFiles.js b/packages/dynamic-pages/src/dynamicPages/generateFiles.js
deleted file mode 100644
index 34962da6..00000000
--- a/packages/dynamic-pages/src/dynamicPages/generateFiles.js
+++ /dev/null
@@ -1,296 +0,0 @@
-/* eslint-disable-file no-console, global-require */
-
-import fs from 'fs';
-import path from 'path';
-import each from 'lodash.foreach';
-import mkdirp from 'mkdirp';
-import chalk from 'chalk';
-import fileExists from 'file-exists';
-
-// TODO:
-// - cover case of `renderedRoutes` without dynamic component(s)
-// - cover case of multiple dynamic components (add all script urls to html)
-// -
-
-// Compile all files necessary for serving
-export default new class GenerateFiles {
- constructor() {
- this.readManifestFile = this.readManifestFile.bind(this);
- this.readIndexHtml = this.readIndexHtml.bind(this);
- this.createPagesFromCompiledData = this.createPagesFromCompiledData.bind(this);
- this.createPage = this.createPage.bind(this);
- this.renderRoute = this.renderRoute.bind(this);
- this.writeFile = this.writeFile.bind(this);
- }
-
- setupDynamicRenderFile({ dynamicRenderFile }) {
- this.dynamicRender = null;
-
- if (!fileExists(dynamicRenderFile)) {
- console.log(
- chalk.yellow('To make use of dynamic pages, add the `dynamicRender.js`-file'),
- chalk.yellow('\nsee:'),
- chalk.yellow.underline('https://github.com/stoikerty/dev-toolkit/wiki/dynamic-pages'),
- '\nCreating a regular static build.');
- } else {
- try {
- // The expression `'' + ` is a webpack hack to avoid an error when compiling for the client.
- // "the request of a dependency is an expression"
- // see: https://github.com/webpack/webpack/issues/196
- // https://github.com/webpack/webpack/issues/198
- this.dynamicRender = require('' + dynamicRenderFile).default;
- this.onRouteRender = require('' + dynamicRenderFile).onRouteRender;
- this.beforeRender = require('' + dynamicRenderFile).beforeRender;
- this.afterRender = require('' + dynamicRenderFile).afterRender;
- this.beforeRouteRender = require('' + dynamicRenderFile).beforeRouteRender;
- this.afterRouteRender = require('' + dynamicRenderFile).afterRouteRender;
- } catch (e) {
- if (e) {
- console.log(e);
- }
- }
- }
- }
-
- startRendering({
- publicPath,
- buildFolder,
- manifestFile,
- definedRoutes,
- getComponentName,
- hasPathParameters,
- doneCallback,
- }) {
- // save given options for later
- this.publicPath = publicPath;
- this.buildFolder = buildFolder;
- this.manifestFile = manifestFile;
- this.definedRoutes = definedRoutes;
- this.getComponentName = getComponentName;
- this.hasPathParameters = hasPathParameters;
- this.doneCallback = doneCallback;
-
- if (this.beforeRender) {
- console.log(chalk.blue('โฉ'), ` beforeRender`);
- this.beforeRender({ definedRoutes }).then(() => this.renderRoutes());
- } else {
- this.renderRoutes();
- }
- }
-
- renderRoutes(){
- if (this.dynamicRender || this.onRouteRender) {
- try {
- console.log('Generating', chalk.magenta('index.html'), 'for each route...');
-
- this.readManifestFile()
- .then(this.readIndexHtml)
- .then(this.createPagesFromCompiledData)
- .then(() => {
- if (this.afterRender) {
- console.log(chalk.blue('โช'), ` afterRender`);
- this.afterRender({ definedRoutes: this.definedRoutes });
- } else {
- if (this.doneCallback) {
- this.doneCallback();
- }
- }
- });
- } catch (e) {
- if (e) {
- console.log(e);
- }
- }
- }
- }
-
- readManifestFile() {
- return new Promise((resolve) => {
- fs.readFile(this.manifestFile, 'utf8', (error, manifestData) => {
- if (error) throw error;
- resolve({ manifestData });
- });
- });
- }
-
- readIndexHtml({ manifestData }) {
- return new Promise((resolve) => {
- fs.readFile(path.resolve(this.buildFolder, 'index.html'), 'utf8', (error, indexData) => {
- if (error) throw error;
- resolve({ manifestData, indexData });
- });
- });
- }
-
- createPagesFromCompiledData({ manifestData, indexData }) {
- return new Promise((resolve) => {
- const promises = this.definedRoutes.map(({ renderPath, components, dynamicData }) =>
- this.createPage({ renderPath, components, dynamicData, manifestData, indexData }));
-
- Promise.all(promises).then(resolve);
- });
- }
-
- createPage({ renderPath, components, dynamicData, manifestData, indexData }) {
- return new Promise((resolve) => {
- const afterRouteRender = ({ routePath }) => {
- if (this.afterRouteRender) {
- console.log(chalk.gray('โฆ'), ` afterRouteRender (${chalk.blue(renderPath)})`);
- this.afterRouteRender({
- renderPath,
- components,
- dynamicData,
- manifestData,
- indexData,
- routePath,
- }).then(resolve);
- } else {
- resolve();
- }
- };
-
- // Only render routes that have no parameters
- if (!this.hasPathParameters(renderPath)) {
- if (this.beforeRouteRender) {
- console.log(chalk.gray('โฅ'), ` beforeRouteRender (${chalk.blue(renderPath)})`);
- this.beforeRouteRender({
- renderPath,
- components,
- dynamicData,
- manifestData,
- indexData,
- }).then(() =>
- this.renderRoute({ renderPath, components, dynamicData, manifestData, indexData })
- .then(afterRouteRender)
- );
- } else {
- this.renderRoute({ renderPath, components, dynamicData, manifestData, indexData })
- .then(afterRouteRender);
- }
- } else {
- resolve();
- }
- })
- }
-
- renderRoute({ renderPath, components, dynamicData, manifestData, indexData }) {
- return new Promise((resolve) => {
- const routePath = path.resolve(this.buildFolder, renderPath.substring(1));
- const names = (() => {
- let componentNames = '';
- each(components, (component, index) => {
- componentNames += chalk.magenta(this.getComponentName(component)) + ', ';
- });
- return componentNames.slice(0, -2);
- })();
-
- mkdirp(routePath, (mkdirError) => {
- if (mkdirError) {
- console.error(mkdirError);
- } else {
- const renderAndResolve = ({ reactHtml, additionalData }) => {
- if (reactHtml) {
- const htmlWithAssets = this.convertAssetPaths(manifestData, reactHtml);
- const componentPaths = this.extractComponentPaths({ manifestData, components });
- const completeHtml = this.injectMarkupIntoTemplate({
- indexData,
- htmlWithAssets,
- componentPaths,
- additionalData,
- });
- this.writeFile({ routePath, completeHtml }).then(() => resolve({ routePath }))
- } else {
- console.log(
- `Route "${renderPath}" doesn't exist, rendering resulted in \`null\`.`,
- 'No HTML was rendered.'
- );
- resolve({ routePath });
- }
- };
-
- if (this.dynamicRender) {
- // synchronous rendering
- console.log(
- chalk.blue('>'), `Rendering route ${chalk.magenta(renderPath)} with: ${names}`);
- const { reactHtml, additionalData } = this.dynamicRender(renderPath, dynamicData);
- renderAndResolve({ reactHtml, additionalData });
- } else if (this.onRouteRender) {
- // asynchronous rendering, expects a promise
- console.log(
- chalk.blue('โคณ'), ` onRouteRender ${chalk.magenta(renderPath)} with: ${names}`);
- this.onRouteRender({ renderPath, components, dynamicData, manifestData, indexData })
- .then(renderAndResolve);
- }
- }
- });
- });
- }
-
- writeFile({ routePath, completeHtml }) {
- return new Promise((resolve) => {
- fs.writeFile(path.resolve(routePath, 'index.html'), completeHtml, (writeError) => {
- if (writeError) {
- throw writeError;
- }
- resolve();
- });
- });
- }
-
- convertAssetPaths(manifestData, html) {
- let result = html;
- const data = JSON.parse(manifestData);
- const assets = data.assets;
- const isWin = process && process.platform === 'win32';
-
- each(assets, (value, key) => {
- // TODO: use rootAssetPath?
- const path = `src/client/${key}`;
- const normalizedPath = isWin ? path.replace(/\//g, '\\') : path;
- // TODO: check for publicPath?
- result = result.replace(normalizedPath, `/${value}`);
- });
-
- return result;
- };
-
- extractComponentPaths({ manifestData, components }) {
- const extractedPaths = [];
- const data = JSON.parse(manifestData);
- const assets = data.assets;
-
- each(components, (component) => {
- each(assets, (value, key) => {
- const componentName = this.getComponentName(component);
- if (key.startsWith(componentName)) {
- extractedPaths.push(value);
- }
- });
- });
-
- return extractedPaths;
- }
-
- injectMarkupIntoTemplate({ indexData, htmlWithAssets, componentPaths, additionalData }) {
- const dynamicComponents = componentPaths.map(dynamicComponentPath => (
- ``
- )).join('\n\t\t');
-
- let formattedData = indexData.replace(
- '',
- htmlWithAssets
- ).replace(
- '',
- dynamicComponents,
- );
-
- each(additionalData, (value, key) => {
- formattedData = formattedData.replace(
- ``,
- value,
- );
- });
-
- return formattedData;
- };
-}
diff --git a/packages/eslint-config-dev-toolkit/.prettierrc b/packages/eslint-config-dev-toolkit/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/packages/eslint-config-dev-toolkit/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/packages/eslint-config-dev-toolkit/Readme.md b/packages/eslint-config-dev-toolkit/Readme.md
new file mode 100644
index 00000000..5549e884
--- /dev/null
+++ b/packages/eslint-config-dev-toolkit/Readme.md
@@ -0,0 +1,3 @@
+# eslint-config-dev-toolkit
+
+eslint preset for [dev-toolkit](https://github.com/stoikerty/dev-toolkit)
diff --git a/packages/eslint-config-dev-toolkit/index.js b/packages/eslint-config-dev-toolkit/index.js
new file mode 100644
index 00000000..99e188f4
--- /dev/null
+++ b/packages/eslint-config-dev-toolkit/index.js
@@ -0,0 +1,25 @@
+'use strict';
+
+// Use require.resolve to prevent issues when using npm link
+// see: https://github.com/babel/babel-loader/issues/149
+
+module.exports = {
+ rules: {
+ 'react/jsx-filename-extension': 0,
+ 'import/no-unresolved': [
+ 'error',
+ {
+ ignore: ['src/'],
+ },
+ ],
+ 'import/no-extraneous-dependencies': ['off'],
+ 'import/extensions': ['off', 'never'],
+ },
+ parser: 'babel-eslint',
+ settings: {
+ 'import/resolver': {
+ 'babel-module': {},
+ },
+ },
+ env: { browser: true },
+};
diff --git a/packages/eslint-config-dev-toolkit/package-lock.json b/packages/eslint-config-dev-toolkit/package-lock.json
new file mode 100644
index 00000000..389cd3e2
--- /dev/null
+++ b/packages/eslint-config-dev-toolkit/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "eslint-config-dev-toolkit",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "prettier": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz",
+ "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==",
+ "dev": true
+ }
+ }
+}
diff --git a/packages/eslint-config-dev-toolkit/package.json b/packages/eslint-config-dev-toolkit/package.json
new file mode 100644
index 00000000..82532f6e
--- /dev/null
+++ b/packages/eslint-config-dev-toolkit/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "eslint-config-dev-toolkit",
+ "version": "1.0.0",
+ "description": "essential eslint config for dev-toolkit",
+ "main": "index.js",
+ "scripts": {
+ "lint": "prettier --write './**/*.js'",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/stoikerty/dev-toolkit/tree/master/packages/eslint-config-dev-toolkit"
+ },
+ "keywords": [
+ "eslint",
+ "eslintconfig",
+ "babel",
+ "babel-preset",
+ "dev-toolkit",
+ "universal",
+ "universal javascript",
+ "import",
+ "root-relative require",
+ "root-relative import"
+ ],
+ "author": "Jorge Antunes @stoikerty",
+ "license": "MIT",
+ "dependencies": {},
+ "peerDependencies": {
+ "babel-eslint": ">= 8",
+ "eslint": ">= 4",
+ "eslint-import-resolver-babel-module": ">= 2",
+ "eslint-plugin-import": ">= 2.7",
+ "eslint-plugin-react": ">= 7"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "devDependencies": {
+ "prettier": "^1.7.4"
+ }
+}
diff --git a/templates/minimal/.babelrc b/templates/minimal/.babelrc
new file mode 100644
index 00000000..adb9e998
--- /dev/null
+++ b/templates/minimal/.babelrc
@@ -0,0 +1 @@
+{ "presets": ["dev-toolkit"] }
diff --git a/templates/minimal/.gitignore b/templates/minimal/.gitignore
new file mode 100644
index 00000000..fb8e5e34
--- /dev/null
+++ b/templates/minimal/.gitignore
@@ -0,0 +1,7 @@
+# Generated Files
+build/
+dist/
+
+# Node
+node_modules/
+npm-debug.log
diff --git a/templates/minimal/.prettierrc b/templates/minimal/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/templates/minimal/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/templates/minimal/package.json b/templates/minimal/package.json
new file mode 100644
index 00000000..d55305a4
--- /dev/null
+++ b/templates/minimal/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "dev-toolkit-minimal-template",
+ "version": "1.0.0",
+ "description": "universal app",
+ "author": "",
+ "scripts": {
+ "start": "npm run build && npm run serve",
+ "dev": "cross-env NODE_ENV=development dev-toolkit watch",
+ "build": "cross-env NODE_ENV=production dev-toolkit build",
+ "serve": "cross-env NODE_ENV=production SERVER_PORT=8080 dev-toolkit serve",
+ "lint": "prettier --write './**/*.js'"
+ },
+ "dependencies": {
+ "babel-preset-dev-toolkit": "1.0.0",
+ "cross-env": "^5.0.5",
+ "dev-toolkit": "6.0.2",
+ "express": "^4.15.5",
+ "express-handlebars": "^3.0.0",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0"
+ },
+ "devDependencies": {
+ "prettier": "1.7.4"
+ }
+}
diff --git a/templates/minimal/src/client/RootComponent.js b/templates/minimal/src/client/RootComponent.js
new file mode 100644
index 00000000..3e7aaa56
--- /dev/null
+++ b/templates/minimal/src/client/RootComponent.js
@@ -0,0 +1,12 @@
+// This is the main component that both the client & the server touch first.
+//
+// It's likely that this component will stay mostly empty since it sits at the root.
+// It might contain your chosen routing solution or redux-provider.
+import React from 'react';
+import App from './views/App';
+
+const displayName = 'RootComponent';
+const component = () => ;
+
+component.displayName = displayName;
+export default component;
diff --git a/templates/minimal/src/client/index.js b/templates/minimal/src/client/index.js
new file mode 100644
index 00000000..e48ccaf2
--- /dev/null
+++ b/templates/minimal/src/client/index.js
@@ -0,0 +1,23 @@
+// NOTE: This File is only run on the client only.
+// The server imports `RootComponent` directly.
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const hotReRender = () => {
+ // Dynamically require module inline for hot-reloading
+ import('./RootComponent').then(module => {
+ const RootComponent = module.default;
+ // Render the newly required module to the DOM
+ ReactDOM.hydrate( , document.querySelector('[data-jshook~="app-body"]'));
+ });
+};
+
+// Start the app by rendering it for the first time
+hotReRender();
+
+// Support hot-reloading of components by rerendering using webpack's included HMR.
+// HMR stands for "Hot-Module-Replacement", sometimes referred as "vanilla HMR"
+if (module.hot) {
+ // After accepting the new module from webpack, we rerender on the next tick
+ module.hot.accept('./RootComponent', () => setTimeout(hotReRender));
+}
diff --git a/templates/minimal/src/client/views/App.js b/templates/minimal/src/client/views/App.js
new file mode 100644
index 00000000..194c0212
--- /dev/null
+++ b/templates/minimal/src/client/views/App.js
@@ -0,0 +1,4 @@
+import React from 'react';
+
+// Use this as the entry-point for your app.
+export default () => {'Minimal App'}
;
diff --git a/templates/minimal/src/server/index.js b/templates/minimal/src/server/index.js
new file mode 100644
index 00000000..6bef0392
--- /dev/null
+++ b/templates/minimal/src/server/index.js
@@ -0,0 +1,75 @@
+import express from 'express';
+import expressHandlebars from 'express-handlebars';
+import path from 'path';
+import fs from 'fs';
+import React from 'react';
+import { renderToString } from 'react-dom/server';
+import { isDev } from 'dev-toolkit/settings';
+
+// Unlike the client app, the server app can only ever be run in Node.js
+// we therefore have direct access to Node-specific things like `process`
+const serverPort = process.env.SERVER_PORT || 3000;
+const serverViews = path.resolve(process.cwd(), 'src/server/views');
+const rootComponentPath = path.resolve(process.cwd(), 'src/client/RootComponent');
+
+export default new class {
+ constructor() {
+ // Let dev-toolkit know about express by setting `this.express`,
+ // this allows dev-toolkit to attach the dev-server middleware to webpack
+ this.express = express();
+
+ // Handlebars is used for server-rendering the html template in `src/server/views`
+ this.handlebarsInstance = expressHandlebars.create();
+
+ // Use Handlebars as the view engine in express
+ this.express.engine('hbs', this.handlebarsInstance.engine);
+ this.express.set('views', serverViews).set('view engine', 'hbs');
+ }
+
+ // Ability to launch server later (allows dev-toolkit to bind webpack-middleware before start)
+ start({ assets, buildFolder }) {
+ // Provide a simple health-check endpoint to see if the server is alive
+ this.express.get('/health', (req, res) => res.send('OK'));
+
+ if (isDev) {
+ // Render template with no prerendered html in development mode
+ this.express.use((req, res) =>
+ res.status(200).render('template', { assets, renderedHtml: '' })
+ );
+ } else {
+ // Make assets in build folder available to the client.
+ this.express.use(express.static(buildFolder));
+ }
+
+ // Run the express server by listening on the specified port
+ this.serverInstance = this.express.listen(serverPort, () => {
+ // eslint-disable-next-line no-console
+ console.log(`Server is listening on port ${serverPort}`);
+ });
+ }
+
+ // Rendering of the html on build happens through this preRender-method
+ preRender({ assets, buildFolder }) {
+ // return a Promise to dev-toolkit
+ return new Promise((resolve, reject) => {
+ // Load Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ // Here handlebars is used to generate the html without express and without webpack
+ this.handlebarsInstance
+ .render(path.join(serverViews, 'template.hbs'), {
+ assets,
+ renderedHtml: renderToString( ),
+ })
+ .then(html => {
+ // Generated html is written to html file in build folder
+ fs.writeFile(
+ path.join(buildFolder, 'index.html'),
+ html,
+ error => (error ? reject(error) : resolve())
+ );
+ });
+ });
+ });
+ }
+}();
diff --git a/templates/minimal/src/server/views/template.hbs b/templates/minimal/src/server/views/template.hbs
new file mode 100644
index 00000000..9ba6fd79
--- /dev/null
+++ b/templates/minimal/src/server/views/template.hbs
@@ -0,0 +1,12 @@
+
+
+
+
+
+ {{{ renderedHtml }}}
+
+
+
+
+
+
diff --git a/templates/serverless/.babelrc b/templates/serverless/.babelrc
new file mode 100644
index 00000000..adb9e998
--- /dev/null
+++ b/templates/serverless/.babelrc
@@ -0,0 +1 @@
+{ "presets": ["dev-toolkit"] }
diff --git a/templates/serverless/.gitignore b/templates/serverless/.gitignore
new file mode 100644
index 00000000..fb8e5e34
--- /dev/null
+++ b/templates/serverless/.gitignore
@@ -0,0 +1,7 @@
+# Generated Files
+build/
+dist/
+
+# Node
+node_modules/
+npm-debug.log
diff --git a/templates/serverless/.prettierrc b/templates/serverless/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/templates/serverless/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/templates/serverless/handler.js b/templates/serverless/handler.js
new file mode 100644
index 00000000..c4ea3fff
--- /dev/null
+++ b/templates/serverless/handler.js
@@ -0,0 +1,9 @@
+const path = require('path');
+
+// Example of programmatic usage of dev-toolkit with a serverless-type application
+require('dev-toolkit').default({
+ command: 'preRender',
+ options: {
+ entryPoint: path.resolve(process.cwd(), 'src/server/preRender'),
+ },
+});
diff --git a/templates/serverless/package.json b/templates/serverless/package.json
new file mode 100644
index 00000000..14594be8
--- /dev/null
+++ b/templates/serverless/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "dev-toolkit-serverless-template",
+ "version": "1.0.0",
+ "description": "universal app",
+ "author": "",
+ "scripts": {
+ "start": "npm run build && npm run serve",
+ "dev": "cross-env NODE_ENV=development dev-toolkit watch",
+ "build": "cross-env NODE_ENV=production dev-toolkit build",
+ "serve": "cross-env NODE_ENV=production SERVER_PORT=8080 dev-toolkit serve",
+ "lint": "prettier --write './**/*.js'"
+ },
+ "dependencies": {
+ "babel-preset-dev-toolkit": "1.0.0",
+ "clear-module": "^2.1.0",
+ "cross-env": "^5.0.5",
+ "dev-toolkit": "6.0.2",
+ "express": "^4.15.5",
+ "express-handlebars": "^3.0.0",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0"
+ },
+ "devDependencies": {
+ "prettier": "1.7.4"
+ }
+}
diff --git a/templates/serverless/src/client/RootComponent.js b/templates/serverless/src/client/RootComponent.js
new file mode 100644
index 00000000..3e7aaa56
--- /dev/null
+++ b/templates/serverless/src/client/RootComponent.js
@@ -0,0 +1,12 @@
+// This is the main component that both the client & the server touch first.
+//
+// It's likely that this component will stay mostly empty since it sits at the root.
+// It might contain your chosen routing solution or redux-provider.
+import React from 'react';
+import App from './views/App';
+
+const displayName = 'RootComponent';
+const component = () => ;
+
+component.displayName = displayName;
+export default component;
diff --git a/templates/serverless/src/client/index.js b/templates/serverless/src/client/index.js
new file mode 100644
index 00000000..e48ccaf2
--- /dev/null
+++ b/templates/serverless/src/client/index.js
@@ -0,0 +1,23 @@
+// NOTE: This File is only run on the client only.
+// The server imports `RootComponent` directly.
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const hotReRender = () => {
+ // Dynamically require module inline for hot-reloading
+ import('./RootComponent').then(module => {
+ const RootComponent = module.default;
+ // Render the newly required module to the DOM
+ ReactDOM.hydrate( , document.querySelector('[data-jshook~="app-body"]'));
+ });
+};
+
+// Start the app by rendering it for the first time
+hotReRender();
+
+// Support hot-reloading of components by rerendering using webpack's included HMR.
+// HMR stands for "Hot-Module-Replacement", sometimes referred as "vanilla HMR"
+if (module.hot) {
+ // After accepting the new module from webpack, we rerender on the next tick
+ module.hot.accept('./RootComponent', () => setTimeout(hotReRender));
+}
diff --git a/templates/serverless/src/client/views/App.js b/templates/serverless/src/client/views/App.js
new file mode 100644
index 00000000..ae39813e
--- /dev/null
+++ b/templates/serverless/src/client/views/App.js
@@ -0,0 +1,4 @@
+import React from 'react';
+
+// Use this as the entry-point for your app.
+export default () => {'Serverless App'}
;
diff --git a/templates/serverless/src/server/index.js b/templates/serverless/src/server/index.js
new file mode 100644
index 00000000..1d29d145
--- /dev/null
+++ b/templates/serverless/src/server/index.js
@@ -0,0 +1,57 @@
+import express from 'express';
+import expressHandlebars from 'express-handlebars';
+import path from 'path';
+import fs from 'fs';
+import React from 'react';
+import { renderToString } from 'react-dom/server';
+import clearModule from 'clear-module';
+import { isDev } from 'dev-toolkit/settings';
+
+// Unlike the client app, the server app can only ever be run in Node.js
+// we therefore have direct access to Node-specific things like `process`
+const serverPort = process.env.SERVER_PORT || 3000;
+const serverViews = path.resolve(process.cwd(), 'src/server/views');
+const rootComponentPath = path.resolve(process.cwd(), 'src/client/RootComponent');
+
+export default new class {
+ constructor() {
+ // Let dev-toolkit know about express by setting `this.express`,
+ // this allows dev-toolkit to attach the dev-server middleware to webpack
+ this.express = express();
+
+ // Use Handlebars as the view engine in express
+ this.express.engine('hbs', expressHandlebars.create().engine);
+ this.express.set('views', serverViews).set('view engine', 'hbs');
+ }
+
+ // Ability to launch server later (allows dev-toolkit to bind webpack-middleware before start)
+ start({ assets, buildFolder }) {
+ // Only server-render during development
+ if (isDev) {
+ // Render the template-file on any incoming requests
+ this.express.use((req, res) => {
+ // Remove Client App from cache (cheap server-side Hot-Reload)
+ if (isDev) {
+ clearModule(rootComponentPath);
+ }
+ // Load newest version of Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ res.status(200).render('template', {
+ assets,
+ renderedHtml: renderToString( ),
+ });
+ });
+ });
+ } else {
+ // Make assets in build folder available to the client.
+ this.express.use(express.static(buildFolder));
+ }
+
+ // Run the express server by listening on the specified port
+ this.serverInstance = this.express.listen(serverPort, () => {
+ // eslint-disable-next-line no-console
+ console.log(`Server is listening on port ${serverPort}`);
+ });
+ }
+}();
diff --git a/templates/serverless/src/server/preRender.js b/templates/serverless/src/server/preRender.js
new file mode 100644
index 00000000..db7f3786
--- /dev/null
+++ b/templates/serverless/src/server/preRender.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import path from 'path';
+import { renderToString } from 'react-dom/server';
+
+const serverViews = path.resolve(process.cwd(), 'src/server/views');
+const rootComponentPath = path.resolve(process.cwd(), 'src/client/RootComponent');
+const handlebarsInstance = expressHandlebars.create().engine;
+
+// This file is called individually via programmatic usage in `handler.js`
+export default ({ assets, buildFolder }) => {
+ // return a Promise to dev-toolkit
+ return new Promise((resolve, reject) => {
+ // Load Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ // Here handlebars is used to generate the html without express and without webpack
+ this.handlebarsInstance
+ .render(path.join(serverViews, 'template.hbs'), {
+ assets,
+ renderedHtml: renderToString( ),
+ })
+ .then(html => {
+ // Generated html is written to html file in build folder
+ console.log('html: ', html);
+ });
+ });
+ });
+};
diff --git a/templates/serverless/src/server/views/template.hbs b/templates/serverless/src/server/views/template.hbs
new file mode 100644
index 00000000..9ba6fd79
--- /dev/null
+++ b/templates/serverless/src/server/views/template.hbs
@@ -0,0 +1,12 @@
+
+
+
+
+
+ {{{ renderedHtml }}}
+
+
+
+
+
+
diff --git a/templates/standard/.babelrc b/templates/standard/.babelrc
new file mode 100644
index 00000000..adb9e998
--- /dev/null
+++ b/templates/standard/.babelrc
@@ -0,0 +1 @@
+{ "presets": ["dev-toolkit"] }
diff --git a/templates/standard/.gitignore b/templates/standard/.gitignore
new file mode 100644
index 00000000..fb8e5e34
--- /dev/null
+++ b/templates/standard/.gitignore
@@ -0,0 +1,7 @@
+# Generated Files
+build/
+dist/
+
+# Node
+node_modules/
+npm-debug.log
diff --git a/templates/standard/.prettierrc b/templates/standard/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/templates/standard/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/templates/standard/dev-toolkit.config.js b/templates/standard/dev-toolkit.config.js
new file mode 100644
index 00000000..9bdc5e7f
--- /dev/null
+++ b/templates/standard/dev-toolkit.config.js
@@ -0,0 +1,16 @@
+module.exports = {
+ devToolkit: {
+ usePreRender: true,
+ sharedEnvs: ['MY_CUSTOM_ENV'],
+ },
+
+ // Use custom webpack configuration here
+ webpack: {
+ loaders: function(options) {
+ return [];
+ },
+ plugins: function(options) {
+ return [];
+ },
+ },
+};
diff --git a/templates/standard/package.json b/templates/standard/package.json
new file mode 100644
index 00000000..a9ff77a5
--- /dev/null
+++ b/templates/standard/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "dev-toolkit-standard-template",
+ "version": "1.0.0",
+ "description": "universal app",
+ "author": "",
+ "scripts": {
+ "start": "npm run build && npm run serve",
+ "dev": "better-npm-run development",
+ "build": "better-npm-run create-build",
+ "serve": "better-npm-run run-server",
+ "lint": "prettier --write './**/*.js'"
+ },
+ "betterScripts": {
+ "development": {
+ "command": "dev-toolkit watch",
+ "env": {
+ "NODE_ENV": "development",
+ "MY_CUSTOM_ENV": "foo"
+ }
+ },
+ "create-build": {
+ "command": "dev-toolkit build",
+ "env": {
+ "NODE_ENV": "production"
+ }
+ },
+ "run-server": {
+ "command": "dev-toolkit serve",
+ "env": {
+ "NODE_ENV": "production",
+ "SERVER_PORT": "8080"
+ }
+ }
+ },
+ "dependencies": {
+ "babel-preset-dev-toolkit": "1.0.0",
+ "better-npm-run": "^0.1.0",
+ "clear-module": "^2.1.0",
+ "dev-toolkit": "6.0.2",
+ "express": "^4.15.5",
+ "express-handlebars": "^3.0.0",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0"
+ },
+ "devDependencies": {
+ "prettier": "1.7.4"
+ }
+}
diff --git a/templates/standard/src/client/RootComponent.js b/templates/standard/src/client/RootComponent.js
new file mode 100644
index 00000000..8fad13e9
--- /dev/null
+++ b/templates/standard/src/client/RootComponent.js
@@ -0,0 +1,17 @@
+// This is the main component that both the client & the server touch first.
+//
+// It's likely that this component will stay mostly empty since it sits at the root.
+// It might contain your chosen routing solution or redux-provider.
+import React from 'react';
+
+import { isClient } from 'dev-toolkit/settings';
+import App from './views/App';
+
+// This should log both on the client and the server, remove once you understand how it works.
+console.log(`Client App has run on ${isClient ? 'Client' : 'Server'}... (remove-me)`);
+
+const displayName = 'RootComponent';
+const component = () => ;
+
+component.displayName = displayName;
+export default component;
diff --git a/templates/standard/src/client/index.js b/templates/standard/src/client/index.js
new file mode 100644
index 00000000..e48ccaf2
--- /dev/null
+++ b/templates/standard/src/client/index.js
@@ -0,0 +1,23 @@
+// NOTE: This File is only run on the client only.
+// The server imports `RootComponent` directly.
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const hotReRender = () => {
+ // Dynamically require module inline for hot-reloading
+ import('./RootComponent').then(module => {
+ const RootComponent = module.default;
+ // Render the newly required module to the DOM
+ ReactDOM.hydrate( , document.querySelector('[data-jshook~="app-body"]'));
+ });
+};
+
+// Start the app by rendering it for the first time
+hotReRender();
+
+// Support hot-reloading of components by rerendering using webpack's included HMR.
+// HMR stands for "Hot-Module-Replacement", sometimes referred as "vanilla HMR"
+if (module.hot) {
+ // After accepting the new module from webpack, we rerender on the next tick
+ module.hot.accept('./RootComponent', () => setTimeout(hotReRender));
+}
diff --git a/templates/standard/src/client/views/App.js b/templates/standard/src/client/views/App.js
new file mode 100644
index 00000000..bd16f975
--- /dev/null
+++ b/templates/standard/src/client/views/App.js
@@ -0,0 +1,18 @@
+import React from 'react';
+
+import { isProd, isDev } from 'dev-toolkit/settings';
+import { customEnvContent } from 'src/settings';
+
+// Use this as the entry-point for your app.
+export default () => (
+
+ {'App View running in:'}
+ {`Production? ${isProd}`}
+
+ {`Development? ${isDev}`}
+
+
+ {`customEnvContent: ${customEnvContent}`}
+
+
+);
diff --git a/templates/standard/src/server/index.js b/templates/standard/src/server/index.js
new file mode 100644
index 00000000..171e511e
--- /dev/null
+++ b/templates/standard/src/server/index.js
@@ -0,0 +1,103 @@
+import express from 'express';
+import expressHandlebars from 'express-handlebars';
+import path from 'path';
+import fs from 'fs';
+import React from 'react';
+import { renderToString } from 'react-dom/server';
+import clearModule from 'clear-module';
+import { isDev, isProd, usePreRender } from 'dev-toolkit/settings';
+
+// Unlike the client app, the server app can only ever be run in Node.js
+// we therefore have direct access to Node-specific things like `process`
+const serverPort = process.env.SERVER_PORT || 3000;
+const projectDirectory = process.cwd();
+const clientFolder = path.resolve(projectDirectory, 'src/client');
+const serverViews = path.resolve(projectDirectory, 'src/server/views');
+const rootComponentPath = path.resolve(clientFolder, 'RootComponent');
+
+export default new class {
+ constructor() {
+ // Let dev-toolkit know about express by setting `this.express`,
+ // this allows dev-toolkit to attach the dev-server middleware to webpack
+ this.express = express();
+
+ // Handlebars is used for server-rendering the html template in `src/server/views`
+ this.handlebarsInstance = expressHandlebars.create();
+
+ // Use Handlebars as the view engine in express
+ this.express.engine('hbs', this.handlebarsInstance.engine);
+ this.express.set('views', serverViews).set('view engine', 'hbs');
+
+ // Prevent express from sending powered-by header
+ this.express.disable('x-powered-by');
+ }
+
+ // Ability to launch server later (allows dev-toolkit to bind webpack-middleware before start)
+ start({ assets, buildFolder }) {
+ // Provide a simple health-check endpoint to see if the server is alive
+ this.express.get('/health', (req, res) => res.send('OK'));
+
+ // Make assets in build folder available to the client.
+ // In development, the `webpack-dev-middleware` used by dev-toolkit takes care of this.
+ if (!isDev) {
+ this.express.use(express.static(buildFolder));
+ }
+
+ // By default, dev-toolkit serves the build folder with pre-rendered files.
+ if (isDev || (isProd && !usePreRender)) {
+ // Render the template-file on any incoming requests
+ this.express.use((req, res) => {
+ // Remove Client App from cache (cheap server-side Hot-Reload)
+ if (isDev) {
+ // NOTE: We need to explicitly clear all the modules in the client directory.
+ // It's a nice to have. Not guaranteed to always work, take it with a grain of salt.
+ clearModule.match(new RegExp(`^${clientFolder}`, 'i'));
+ }
+ // Load newest version of Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ res.status(200).render('template', {
+ assets,
+ renderedHtml: renderToString( ),
+ });
+ });
+ });
+ }
+
+ // Run the express server by listening on the specified port
+ this.serverInstance = this.express.listen(serverPort, () => {
+ // eslint-disable-next-line no-console
+ console.log(`Server is listening on port ${serverPort}`);
+ });
+ }
+
+ // A way to stop and shut-down the server, you might need this for things like e2e-tests
+ stop() {
+ this.serverInstance.close();
+ }
+
+ // Rendering of the html on build happens through this preRender-method
+ preRender({ assets, buildFolder }) {
+ // return a Promise to dev-toolkit
+ return new Promise((resolve, reject) => {
+ // Load Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ // Here handlebars is used to generate the html without express and without webpack
+ this.handlebarsInstance
+ .render(path.join(serverViews, 'template.hbs'), {
+ assets,
+ renderedHtml: renderToString( ),
+ })
+ .then(html => {
+ // Generated html is written to html file in build folder
+ fs.writeFile(
+ path.join(buildFolder, 'index.html'),
+ html,
+ error => (error ? reject(error) : resolve())
+ );
+ });
+ });
+ });
+ }
+}();
diff --git a/templates/standard/src/server/views/template.hbs b/templates/standard/src/server/views/template.hbs
new file mode 100644
index 00000000..9ba6fd79
--- /dev/null
+++ b/templates/standard/src/server/views/template.hbs
@@ -0,0 +1,12 @@
+
+
+
+
+
+ {{{ renderedHtml }}}
+
+
+
+
+
+
diff --git a/templates/standard/src/settings.js b/templates/standard/src/settings.js
new file mode 100644
index 00000000..df7d308d
--- /dev/null
+++ b/templates/standard/src/settings.js
@@ -0,0 +1,9 @@
+// Get environment variables shared between the client & server
+// NOTE: `NODE_ENV` is available by default but for security reasons, all other
+// environment variables must be declared explicitly in `dev-toolkit.config.js`.
+import { sharedEnvs } from 'dev-toolkit/settings';
+
+// Example of explicitly declared env which will be bundled into client-bundle.
+// Make sure you understand how these envs flow through the app & into the client.
+// Hint: Try running `npm run dev` and compare output with `npm run start`
+export const customEnvContent = sharedEnvs.MY_CUSTOM_ENV;
diff --git a/templates/with-eslint/.babelrc b/templates/with-eslint/.babelrc
new file mode 100644
index 00000000..adb9e998
--- /dev/null
+++ b/templates/with-eslint/.babelrc
@@ -0,0 +1 @@
+{ "presets": ["dev-toolkit"] }
diff --git a/templates/with-eslint/.eslintrc b/templates/with-eslint/.eslintrc
new file mode 100644
index 00000000..9c9beec4
--- /dev/null
+++ b/templates/with-eslint/.eslintrc
@@ -0,0 +1,8 @@
+{
+ "extends": ["airbnb", "dev-toolkit", "prettier"],
+ "plugins": ["prettier"],
+ "rules": {
+ "prettier/prettier": "error",
+ "import/prefer-default-export": "off"
+ }
+}
diff --git a/templates/with-eslint/.gitignore b/templates/with-eslint/.gitignore
new file mode 100644
index 00000000..fb8e5e34
--- /dev/null
+++ b/templates/with-eslint/.gitignore
@@ -0,0 +1,7 @@
+# Generated Files
+build/
+dist/
+
+# Node
+node_modules/
+npm-debug.log
diff --git a/templates/with-eslint/.prettierrc b/templates/with-eslint/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/templates/with-eslint/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/templates/with-eslint/dev-toolkit.config.js b/templates/with-eslint/dev-toolkit.config.js
new file mode 100644
index 00000000..9bdc5e7f
--- /dev/null
+++ b/templates/with-eslint/dev-toolkit.config.js
@@ -0,0 +1,16 @@
+module.exports = {
+ devToolkit: {
+ usePreRender: true,
+ sharedEnvs: ['MY_CUSTOM_ENV'],
+ },
+
+ // Use custom webpack configuration here
+ webpack: {
+ loaders: function(options) {
+ return [];
+ },
+ plugins: function(options) {
+ return [];
+ },
+ },
+};
diff --git a/templates/with-eslint/package.json b/templates/with-eslint/package.json
new file mode 100644
index 00000000..b435e1c6
--- /dev/null
+++ b/templates/with-eslint/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "dev-toolkit-with-eslint-template",
+ "version": "1.0.0",
+ "description": "universal app",
+ "author": "",
+ "scripts": {
+ "start": "npm run build && npm run serve",
+ "dev": "better-npm-run development",
+ "build": "better-npm-run create-build",
+ "serve": "better-npm-run run-server",
+ "lint": "prettier --write './**/*.js' && eslint 'src/**/*.js'"
+ },
+ "betterScripts": {
+ "development": {
+ "command": "dev-toolkit watch",
+ "env": {
+ "NODE_ENV": "development",
+ "MY_CUSTOM_ENV": "foo"
+ }
+ },
+ "create-build": {
+ "command": "dev-toolkit build",
+ "env": {
+ "NODE_ENV": "production"
+ }
+ },
+ "run-server": {
+ "command": "dev-toolkit serve",
+ "env": {
+ "NODE_ENV": "production",
+ "SERVER_PORT": "8080"
+ }
+ }
+ },
+ "dependencies": {
+ "babel-preset-dev-toolkit": "1.0.0",
+ "better-npm-run": "^0.1.0",
+ "clear-module": "^2.1.0",
+ "dev-toolkit": "6.0.2",
+ "express": "^4.15.5",
+ "express-handlebars": "^3.0.0",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0"
+ },
+ "devDependencies": {
+ "babel-eslint": "8.0.1",
+ "eslint": "^4.8.0",
+ "eslint-config-airbnb": "^16.0.0",
+ "eslint-config-dev-toolkit": "1.0.0",
+ "eslint-config-prettier": "2.6.0",
+ "eslint-import-resolver-babel-module": "2.2.1",
+ "eslint-plugin-import": "^2.7.0",
+ "eslint-plugin-jsx-a11y": "^6.0.2",
+ "eslint-plugin-prettier": "2.3.1",
+ "eslint-plugin-react": "^7.4.0",
+ "prettier": "1.7.4"
+ }
+}
diff --git a/templates/with-eslint/src/client/RootComponent.js b/templates/with-eslint/src/client/RootComponent.js
new file mode 100644
index 00000000..8fad13e9
--- /dev/null
+++ b/templates/with-eslint/src/client/RootComponent.js
@@ -0,0 +1,17 @@
+// This is the main component that both the client & the server touch first.
+//
+// It's likely that this component will stay mostly empty since it sits at the root.
+// It might contain your chosen routing solution or redux-provider.
+import React from 'react';
+
+import { isClient } from 'dev-toolkit/settings';
+import App from './views/App';
+
+// This should log both on the client and the server, remove once you understand how it works.
+console.log(`Client App has run on ${isClient ? 'Client' : 'Server'}... (remove-me)`);
+
+const displayName = 'RootComponent';
+const component = () => ;
+
+component.displayName = displayName;
+export default component;
diff --git a/templates/with-eslint/src/client/index.js b/templates/with-eslint/src/client/index.js
new file mode 100644
index 00000000..e48ccaf2
--- /dev/null
+++ b/templates/with-eslint/src/client/index.js
@@ -0,0 +1,23 @@
+// NOTE: This File is only run on the client only.
+// The server imports `RootComponent` directly.
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const hotReRender = () => {
+ // Dynamically require module inline for hot-reloading
+ import('./RootComponent').then(module => {
+ const RootComponent = module.default;
+ // Render the newly required module to the DOM
+ ReactDOM.hydrate( , document.querySelector('[data-jshook~="app-body"]'));
+ });
+};
+
+// Start the app by rendering it for the first time
+hotReRender();
+
+// Support hot-reloading of components by rerendering using webpack's included HMR.
+// HMR stands for "Hot-Module-Replacement", sometimes referred as "vanilla HMR"
+if (module.hot) {
+ // After accepting the new module from webpack, we rerender on the next tick
+ module.hot.accept('./RootComponent', () => setTimeout(hotReRender));
+}
diff --git a/templates/with-eslint/src/client/views/App.js b/templates/with-eslint/src/client/views/App.js
new file mode 100644
index 00000000..bd16f975
--- /dev/null
+++ b/templates/with-eslint/src/client/views/App.js
@@ -0,0 +1,18 @@
+import React from 'react';
+
+import { isProd, isDev } from 'dev-toolkit/settings';
+import { customEnvContent } from 'src/settings';
+
+// Use this as the entry-point for your app.
+export default () => (
+
+ {'App View running in:'}
+ {`Production? ${isProd}`}
+
+ {`Development? ${isDev}`}
+
+
+ {`customEnvContent: ${customEnvContent}`}
+
+
+);
diff --git a/templates/with-eslint/src/server/index.js b/templates/with-eslint/src/server/index.js
new file mode 100644
index 00000000..171e511e
--- /dev/null
+++ b/templates/with-eslint/src/server/index.js
@@ -0,0 +1,103 @@
+import express from 'express';
+import expressHandlebars from 'express-handlebars';
+import path from 'path';
+import fs from 'fs';
+import React from 'react';
+import { renderToString } from 'react-dom/server';
+import clearModule from 'clear-module';
+import { isDev, isProd, usePreRender } from 'dev-toolkit/settings';
+
+// Unlike the client app, the server app can only ever be run in Node.js
+// we therefore have direct access to Node-specific things like `process`
+const serverPort = process.env.SERVER_PORT || 3000;
+const projectDirectory = process.cwd();
+const clientFolder = path.resolve(projectDirectory, 'src/client');
+const serverViews = path.resolve(projectDirectory, 'src/server/views');
+const rootComponentPath = path.resolve(clientFolder, 'RootComponent');
+
+export default new class {
+ constructor() {
+ // Let dev-toolkit know about express by setting `this.express`,
+ // this allows dev-toolkit to attach the dev-server middleware to webpack
+ this.express = express();
+
+ // Handlebars is used for server-rendering the html template in `src/server/views`
+ this.handlebarsInstance = expressHandlebars.create();
+
+ // Use Handlebars as the view engine in express
+ this.express.engine('hbs', this.handlebarsInstance.engine);
+ this.express.set('views', serverViews).set('view engine', 'hbs');
+
+ // Prevent express from sending powered-by header
+ this.express.disable('x-powered-by');
+ }
+
+ // Ability to launch server later (allows dev-toolkit to bind webpack-middleware before start)
+ start({ assets, buildFolder }) {
+ // Provide a simple health-check endpoint to see if the server is alive
+ this.express.get('/health', (req, res) => res.send('OK'));
+
+ // Make assets in build folder available to the client.
+ // In development, the `webpack-dev-middleware` used by dev-toolkit takes care of this.
+ if (!isDev) {
+ this.express.use(express.static(buildFolder));
+ }
+
+ // By default, dev-toolkit serves the build folder with pre-rendered files.
+ if (isDev || (isProd && !usePreRender)) {
+ // Render the template-file on any incoming requests
+ this.express.use((req, res) => {
+ // Remove Client App from cache (cheap server-side Hot-Reload)
+ if (isDev) {
+ // NOTE: We need to explicitly clear all the modules in the client directory.
+ // It's a nice to have. Not guaranteed to always work, take it with a grain of salt.
+ clearModule.match(new RegExp(`^${clientFolder}`, 'i'));
+ }
+ // Load newest version of Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ res.status(200).render('template', {
+ assets,
+ renderedHtml: renderToString( ),
+ });
+ });
+ });
+ }
+
+ // Run the express server by listening on the specified port
+ this.serverInstance = this.express.listen(serverPort, () => {
+ // eslint-disable-next-line no-console
+ console.log(`Server is listening on port ${serverPort}`);
+ });
+ }
+
+ // A way to stop and shut-down the server, you might need this for things like e2e-tests
+ stop() {
+ this.serverInstance.close();
+ }
+
+ // Rendering of the html on build happens through this preRender-method
+ preRender({ assets, buildFolder }) {
+ // return a Promise to dev-toolkit
+ return new Promise((resolve, reject) => {
+ // Load Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ // Here handlebars is used to generate the html without express and without webpack
+ this.handlebarsInstance
+ .render(path.join(serverViews, 'template.hbs'), {
+ assets,
+ renderedHtml: renderToString( ),
+ })
+ .then(html => {
+ // Generated html is written to html file in build folder
+ fs.writeFile(
+ path.join(buildFolder, 'index.html'),
+ html,
+ error => (error ? reject(error) : resolve())
+ );
+ });
+ });
+ });
+ }
+}();
diff --git a/templates/with-eslint/src/server/views/template.hbs b/templates/with-eslint/src/server/views/template.hbs
new file mode 100644
index 00000000..9ba6fd79
--- /dev/null
+++ b/templates/with-eslint/src/server/views/template.hbs
@@ -0,0 +1,12 @@
+
+
+
+
+
+ {{{ renderedHtml }}}
+
+
+
+
+
+
diff --git a/templates/with-eslint/src/settings.js b/templates/with-eslint/src/settings.js
new file mode 100644
index 00000000..df7d308d
--- /dev/null
+++ b/templates/with-eslint/src/settings.js
@@ -0,0 +1,9 @@
+// Get environment variables shared between the client & server
+// NOTE: `NODE_ENV` is available by default but for security reasons, all other
+// environment variables must be declared explicitly in `dev-toolkit.config.js`.
+import { sharedEnvs } from 'dev-toolkit/settings';
+
+// Example of explicitly declared env which will be bundled into client-bundle.
+// Make sure you understand how these envs flow through the app & into the client.
+// Hint: Try running `npm run dev` and compare output with `npm run start`
+export const customEnvContent = sharedEnvs.MY_CUSTOM_ENV;
diff --git a/templates/with-sass/.babelrc b/templates/with-sass/.babelrc
new file mode 100644
index 00000000..adb9e998
--- /dev/null
+++ b/templates/with-sass/.babelrc
@@ -0,0 +1 @@
+{ "presets": ["dev-toolkit"] }
diff --git a/templates/with-sass/.gitignore b/templates/with-sass/.gitignore
new file mode 100644
index 00000000..fb8e5e34
--- /dev/null
+++ b/templates/with-sass/.gitignore
@@ -0,0 +1,7 @@
+# Generated Files
+build/
+dist/
+
+# Node
+node_modules/
+npm-debug.log
diff --git a/templates/with-sass/.prettierrc b/templates/with-sass/.prettierrc
new file mode 100644
index 00000000..a44463ca
--- /dev/null
+++ b/templates/with-sass/.prettierrc
@@ -0,0 +1,6 @@
+{
+ "semi": true,
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/templates/with-sass/dev-toolkit.config.js b/templates/with-sass/dev-toolkit.config.js
new file mode 100644
index 00000000..484a12dc
--- /dev/null
+++ b/templates/with-sass/dev-toolkit.config.js
@@ -0,0 +1,57 @@
+const ExtractTextPlugin = require('extract-text-webpack-plugin');
+const path = require('path');
+
+// The hashing-convention for generated css-classes
+const cssChunkNaming = '[name]__[local]___[hash:base64:5]';
+
+// We need to define where the sass-files will be located
+const projectDirectory = process.cwd();
+const clientFolder = path.resolve(projectDirectory, 'src/client');
+const includePaths = [clientFolder];
+
+// Configuration needed both, for development and for generating a build
+const sassLoaders = [
+ `css-loader?modules&importLoaders=1&localIdentName=${cssChunkNaming}`,
+ 'postcss-loader',
+ {
+ loader: 'sass-loader',
+ // Include any paths that the loader needs to know about
+ options: { includePaths: includePaths },
+ },
+];
+
+module.exports = {
+ // Exports that are shared between this file and `nodeHooks.js`
+ cssChunkNaming: cssChunkNaming,
+ includePaths: includePaths,
+
+ // Exports for dev-toolkit to pick up
+ webpack: {
+ loaders: function(options) {
+ return [
+ {
+ test: /\.scss$/,
+ use: options.creatingBuild
+ ? // Extract styles from all files found during compilation
+ // Try `npm start` and then loading up your browser without javascript
+ ExtractTextPlugin.extract({
+ fallback: 'style-loader',
+ use: sassLoaders,
+ })
+ : // In development, we can use loaders directly
+ // NOTE: This means that on the client, the first render in the browser
+ // (before javascript is loaded) will not have styles available.
+ [{ loader: 'style-loader' }].concat(sassLoaders),
+ },
+ ];
+ },
+
+ // Generate a single css-file on build from all extracted files
+ plugins: function(options) {
+ const cssFileToGenerate = options.namingConvention + '.css';
+ return options.creatingBuild
+ ? [new ExtractTextPlugin({ filename: cssFileToGenerate, allChunks: true })]
+ : [];
+ },
+ },
+};
diff --git a/templates/with-sass/nodeHooks.js b/templates/with-sass/nodeHooks.js
new file mode 100644
index 00000000..430acdbd
--- /dev/null
+++ b/templates/with-sass/nodeHooks.js
@@ -0,0 +1,27 @@
+// This file runs before `babel-register`, before node knows about `.babelrc`,
+// therefore it needs to be written in ES5.
+const cssHook = require('css-modules-require-hook');
+const path = require('path');
+const sass = require('node-sass');
+
+// Retrieve settings that are shared between node-hooks and webpack
+const includePaths = require('./dev-toolkit.config').includePaths;
+const cssChunkNaming = require('./dev-toolkit.config').cssChunkNaming;
+
+// Make node understand sass-files by hooking into the file extension
+cssHook({
+ extensions: ['.scss'],
+
+ // Share the same naming-convention of `css-loader`
+ generateScopedName: cssChunkNaming,
+
+ // Process files with same settings as `sass-loader` and return css.
+ preprocessCss: (cssFileData, cssFilePath) => {
+ return sass.renderSync({
+ data: cssFileData,
+ // Include any paths that are part of the config,
+ // as well as the current path where css-file resides.
+ includePaths: [].concat(includePaths).concat([path.dirname(cssFilePath)]),
+ }).css;
+ },
+});
diff --git a/templates/with-sass/package.json b/templates/with-sass/package.json
new file mode 100644
index 00000000..1d4f7861
--- /dev/null
+++ b/templates/with-sass/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "dev-toolkit-with-sass-template",
+ "version": "1.0.0",
+ "description": "universal app",
+ "author": "",
+ "scripts": {
+ "start": "npm run build && npm run serve",
+ "dev": "cross-env NODE_ENV=development dev-toolkit watch",
+ "build": "cross-env NODE_ENV=production dev-toolkit build",
+ "serve": "cross-env NODE_ENV=production SERVER_PORT=8080 dev-toolkit serve",
+ "lint": "prettier --write './**/*.js' './**/*.scss'"
+ },
+ "dependencies": {
+ "autoprefixer": "^7.1.5",
+ "babel-preset-dev-toolkit": "1.0.0",
+ "clear-module": "^2.1.0",
+ "cross-env": "^5.0.5",
+ "css-loader": "^0.28.7",
+ "css-modules-require-hook": "^4.2.2",
+ "dev-toolkit": "6.0.2",
+ "express": "^4.15.5",
+ "express-handlebars": "^3.0.0",
+ "extract-text-webpack-plugin": "^3.0.1",
+ "node-sass": "^4.5.3",
+ "postcss-loader": "^2.0.7",
+ "react": "^16.0.0",
+ "react-dom": "^16.0.0",
+ "sass-loader": "^6.0.6",
+ "style-loader": "^0.19.0",
+ "webpack": "^3.7.1"
+ },
+ "devDependencies": {
+ "prettier": "1.7.4"
+ }
+}
diff --git a/templates/with-sass/postcss.config.js b/templates/with-sass/postcss.config.js
new file mode 100644
index 00000000..a0fa32b9
--- /dev/null
+++ b/templates/with-sass/postcss.config.js
@@ -0,0 +1,3 @@
+module.exports = {
+ plugins: [require('autoprefixer')],
+};
diff --git a/templates/with-sass/src/client/RootComponent.js b/templates/with-sass/src/client/RootComponent.js
new file mode 100644
index 00000000..cfe5d386
--- /dev/null
+++ b/templates/with-sass/src/client/RootComponent.js
@@ -0,0 +1,16 @@
+// This is the main component that both the client & the server touch first.
+//
+// It's likely that this component will stay mostly empty since it sits at the root.
+// It might contain your chosen routing solution or redux-provider.
+import React from 'react';
+import { isClient } from 'dev-toolkit/settings';
+import App from './views/App';
+
+// This should log both on the client and the server, remove once you understand how it works.
+console.log(`Client App has run on ${isClient ? 'Client' : 'Server'}... (remove-me)`);
+
+const displayName = 'RootComponent';
+const component = () => ;
+
+component.displayName = displayName;
+export default component;
diff --git a/templates/with-sass/src/client/index.js b/templates/with-sass/src/client/index.js
new file mode 100644
index 00000000..e48ccaf2
--- /dev/null
+++ b/templates/with-sass/src/client/index.js
@@ -0,0 +1,23 @@
+// NOTE: This File is only run on the client only.
+// The server imports `RootComponent` directly.
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const hotReRender = () => {
+ // Dynamically require module inline for hot-reloading
+ import('./RootComponent').then(module => {
+ const RootComponent = module.default;
+ // Render the newly required module to the DOM
+ ReactDOM.hydrate( , document.querySelector('[data-jshook~="app-body"]'));
+ });
+};
+
+// Start the app by rendering it for the first time
+hotReRender();
+
+// Support hot-reloading of components by rerendering using webpack's included HMR.
+// HMR stands for "Hot-Module-Replacement", sometimes referred as "vanilla HMR"
+if (module.hot) {
+ // After accepting the new module from webpack, we rerender on the next tick
+ module.hot.accept('./RootComponent', () => setTimeout(hotReRender));
+}
diff --git a/templates/with-sass/src/client/views/App.js b/templates/with-sass/src/client/views/App.js
new file mode 100644
index 00000000..786c262e
--- /dev/null
+++ b/templates/with-sass/src/client/views/App.js
@@ -0,0 +1,22 @@
+import React from 'react';
+
+import s from './style.scss';
+
+// Use this as the entry-point for your app.
+export default () => (
+
+ {'App with Sass'}
+
+
+ {'so '}
+ {'colorful '}
+ {'! '}
+
+ {'and '}
+ {'with other cool things'}
+ {' like '}
+ {'animations'}
+
+ {'!'}
+
+);
diff --git a/templates/with-sass/src/client/views/style.scss b/templates/with-sass/src/client/views/style.scss
new file mode 100644
index 00000000..4e0e3ece
--- /dev/null
+++ b/templates/with-sass/src/client/views/style.scss
@@ -0,0 +1,102 @@
+// Some example styles written in sass
+// (remove-me)
+
+@keyframes wiggle-up-down {
+ 0% {
+ transform: translateY(0px);
+ }
+ 20% {
+ transform: translateY(-7px) rotate(-6deg) scale(0.8);
+ }
+ 40% {
+ transform: translateY(-7px) rotate(8deg) scale(1);
+ }
+ 70% {
+ transform: translateY(-7px) rotate(-5deg) scale(1.05);
+ }
+ 80% {
+ transform: translateY(0px);
+ }
+ 100% {
+ transform: translateY(0px);
+ }
+}
+@keyframes wiggle-left-right {
+ 0% {
+ transform: translateX(0px);
+ }
+ 20% {
+ opacity: 0.7;
+ transform: translateY(1px) scale(0.99);
+ }
+ 30% {
+ opacity: 0.9;
+ transform: translateX(-2px) scale(1.01);
+ }
+ 70% {
+ opacity: 0.7;
+ transform: translateX(1px) scale(0.98);
+ }
+ 80% {
+ opacity: 1;
+ transform: translateY(-2px) scale(1.02);
+ }
+ 100% {
+ transform: translateX(0px);
+ }
+}
+@keyframes wiggle-rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 60% {
+ transform: rotate(8deg) scale(2.4);
+ }
+ 100% {
+ transform: rotate(0deg);
+ }
+}
+
+.app {
+ .color1 {
+ color: #2980b9;
+ }
+ .color2 {
+ color: #f39c12;
+ }
+ .color3 {
+ color: #95a5a6;
+ }
+ .color4 {
+ color: #e74c3c;
+ }
+ .color5 {
+ color: #3498db;
+ }
+ .color6 {
+ color: #9b59b6;
+ }
+
+ .wiggleLeftRight {
+ display: inline-block;
+ color: rgba(#27ae60, 0.8);
+
+ animation: wiggle-left-right 0.7s ease-out;
+ animation-iteration-count: infinite;
+ }
+ .wiggleUpDown {
+ display: inline-block;
+ color: #d35400;
+
+ animation: wiggle-up-down 1.6s ease-in-out;
+ animation-iteration-count: infinite;
+ }
+ .wiggleRotate {
+ display: inline-block;
+ color: #27ae60;
+
+ transform-origin: 50% 100%;
+ animation: wiggle-rotate 1.6s ease-in-out;
+ animation-iteration-count: infinite;
+ }
+}
diff --git a/templates/with-sass/src/server/index.js b/templates/with-sass/src/server/index.js
new file mode 100644
index 00000000..171e511e
--- /dev/null
+++ b/templates/with-sass/src/server/index.js
@@ -0,0 +1,103 @@
+import express from 'express';
+import expressHandlebars from 'express-handlebars';
+import path from 'path';
+import fs from 'fs';
+import React from 'react';
+import { renderToString } from 'react-dom/server';
+import clearModule from 'clear-module';
+import { isDev, isProd, usePreRender } from 'dev-toolkit/settings';
+
+// Unlike the client app, the server app can only ever be run in Node.js
+// we therefore have direct access to Node-specific things like `process`
+const serverPort = process.env.SERVER_PORT || 3000;
+const projectDirectory = process.cwd();
+const clientFolder = path.resolve(projectDirectory, 'src/client');
+const serverViews = path.resolve(projectDirectory, 'src/server/views');
+const rootComponentPath = path.resolve(clientFolder, 'RootComponent');
+
+export default new class {
+ constructor() {
+ // Let dev-toolkit know about express by setting `this.express`,
+ // this allows dev-toolkit to attach the dev-server middleware to webpack
+ this.express = express();
+
+ // Handlebars is used for server-rendering the html template in `src/server/views`
+ this.handlebarsInstance = expressHandlebars.create();
+
+ // Use Handlebars as the view engine in express
+ this.express.engine('hbs', this.handlebarsInstance.engine);
+ this.express.set('views', serverViews).set('view engine', 'hbs');
+
+ // Prevent express from sending powered-by header
+ this.express.disable('x-powered-by');
+ }
+
+ // Ability to launch server later (allows dev-toolkit to bind webpack-middleware before start)
+ start({ assets, buildFolder }) {
+ // Provide a simple health-check endpoint to see if the server is alive
+ this.express.get('/health', (req, res) => res.send('OK'));
+
+ // Make assets in build folder available to the client.
+ // In development, the `webpack-dev-middleware` used by dev-toolkit takes care of this.
+ if (!isDev) {
+ this.express.use(express.static(buildFolder));
+ }
+
+ // By default, dev-toolkit serves the build folder with pre-rendered files.
+ if (isDev || (isProd && !usePreRender)) {
+ // Render the template-file on any incoming requests
+ this.express.use((req, res) => {
+ // Remove Client App from cache (cheap server-side Hot-Reload)
+ if (isDev) {
+ // NOTE: We need to explicitly clear all the modules in the client directory.
+ // It's a nice to have. Not guaranteed to always work, take it with a grain of salt.
+ clearModule.match(new RegExp(`^${clientFolder}`, 'i'));
+ }
+ // Load newest version of Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ res.status(200).render('template', {
+ assets,
+ renderedHtml: renderToString( ),
+ });
+ });
+ });
+ }
+
+ // Run the express server by listening on the specified port
+ this.serverInstance = this.express.listen(serverPort, () => {
+ // eslint-disable-next-line no-console
+ console.log(`Server is listening on port ${serverPort}`);
+ });
+ }
+
+ // A way to stop and shut-down the server, you might need this for things like e2e-tests
+ stop() {
+ this.serverInstance.close();
+ }
+
+ // Rendering of the html on build happens through this preRender-method
+ preRender({ assets, buildFolder }) {
+ // return a Promise to dev-toolkit
+ return new Promise((resolve, reject) => {
+ // Load Client App via RootComponent
+ import(rootComponentPath).then(module => {
+ const RootComponent = module.default;
+ // Here handlebars is used to generate the html without express and without webpack
+ this.handlebarsInstance
+ .render(path.join(serverViews, 'template.hbs'), {
+ assets,
+ renderedHtml: renderToString( ),
+ })
+ .then(html => {
+ // Generated html is written to html file in build folder
+ fs.writeFile(
+ path.join(buildFolder, 'index.html'),
+ html,
+ error => (error ? reject(error) : resolve())
+ );
+ });
+ });
+ });
+ }
+}();
diff --git a/templates/with-sass/src/server/views/template.hbs b/templates/with-sass/src/server/views/template.hbs
new file mode 100644
index 00000000..b1810647
--- /dev/null
+++ b/templates/with-sass/src/server/views/template.hbs
@@ -0,0 +1,19 @@
+
+
+
+
+
+ {{#if assets.app.css}}
+
+ {{/if}}
+
+
+
+
+ {{{ renderedHtml }}}
+
+
+
+
+
+