diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..e39800f
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,12 @@
+language: node_js
+node_js:
+ - '6.9'
+ - '7.7'
+cache:
+ yarn: true
+ directories:
+ - node_modules
+before_script:
+ - yarn
+script:
+ - yarn test
diff --git a/README.md b/README.md
index 9193ed1..026cfff 100644
--- a/README.md
+++ b/README.md
@@ -20,14 +20,7 @@ This is easier explained through the examples following.
## Contributing
-I welcome any contributor. Just fork and clone, make changes,
-and send a pull request. Some beginner ideas:
-
-- Right now there aren't very many shorthand methods for several options.
-- Missing documentation and usage for `Config merge()`.
-- A higher-level API for `Config.Resolve` and `Config.ResolveLoader` is lacking.
-- Some API documentation is missing for working with module loaders at a low level.
-- General docs improvements.
+I welcome any contributor. Just fork and clone, make changes, and send a pull request.
## Installation
@@ -94,14 +87,12 @@ config.module
.include('src', 'test')
.loader('babel', 'babel-loader', {
presets: [
- [require.resolve('babel-preset-es2015'), { modules: false }]
+ ['babel-preset-es2015', { modules: false }]
]
});
// Create named plugins, too!
-
-config
- .plugin('clean', CleanPlugin, [BUILD], { root: CWD });
+config.plugin('clean', CleanPlugin, [BUILD], { root: CWD });
// Export the completed configuration object to be consumed by webpack
module.exports = config.toConfig();
@@ -135,1087 +126,650 @@ const config = require('./webpack.core');
module.exports = config.toConfig();
```
-## API
-
-### Config
-
-Create a new configuration object.
-
-```js
-const Config = require('webpack-chain');
-
-const config = new Config();
-```
-
-Moving to deeper points in the API will change the context of what you
-are modifying. You can move back to the higher context by either referencing
-the top-level `config` again, or by calling `.end()` to move up one level.
-If you are familiar with jQuery, `.end()` works similarly. All API calls
-will return the API instance at the current context unless otherwise
-specified. This is so you may chain API calls continuously if desired.
+## ChainedMap
----
-
-### Map-backed entities
-
-API entities listed below which are backed by JavaScript Maps have several methods
-for interacting with their lower-level backing store. For example, the top-level Config
-is backed by a JavaScript Map at `.options`, and so may have its values manipulated via these
-chainable Map methods at `config.options`.
+One of the core API interfaces in webpack-chain is a `ChainedMap`. A `ChainedMap` operates
+similar to a JavaScript Map, with some conveniences for chaining and generating configuration.
+If a property is marked as being a `ChainedMap`, it will have an API and methods as described below:
-**Unless stated otherwise, these methods will return the Map-backed API, allowing you to chain these methods.**
+**Unless stated otherwise, these methods will return the `ChainedMap`, allowing you to chain these methods.**
```js
+// Remove all entries from a Map.
clear()
```
-Remove all entries from a Map.
-
-Example:
-
-```js
-config.options.clear();
-```
-
----
-
```js
+// Remove a single entry from a Map given its key.
// key: *
delete(key)
```
-Remove a single entry from a Map given its key.
-
-Example:
-
-```js
-config.options.delete('performance');
-```
-
----
-
```js
+// Fetch the value from a Map located at the corresponding key.
// key: *
// returns: value
get(key)
```
-Fetch the value from a Map located at the corresponding key.
-
-Example:
-
-```js
-const value = config.options.get('performance');
-```
-
----
-
```js
+// Set a value on the Map stored at the `key` location.
// key: *
// value: *
set(key, value)
```
-Set a value on the Map stored at the `key` location.
-
-Example:
-
-```js
-config.options.set('performance', { hints: false });
-```
-
----
-
```js
+// Returns `true` or `false` based on whether a Map as has a value set at a particular key.
// key: *
// returns: Boolean
has(key)
```
-Returns `true` or `false` based on whether a Map as has a value set at a particular key.
-
-Example:
-
-```js
-const hasLinting = config.module.rules.has('lint');
-```
-
----
-
```js
+// Returns an array of all the values stored in the Map.
// returns: Array
values()
```
-Returns an array of all the values stored in the Map.
-
-Example:
-
-```js
-const values = config.options.values();
-```
-
----
-
```js
+// Returns an object of all the entries in the backing Map
+// where the key is the object property, and the value
+// corresponding to the key. Will return `undefined` if the backing
+// Map is empty.
// returns: Object, undefined if empty
entries()
````
-Returns an object of all the entries in the backing Map, where the key is the object property,
-and the value corresponding to the key. Will return `undefined` if the backing Map is empty.
-
-```js
-const obj = config.options.entries();
-```
-
----
-
```js
+// Provide an object which maps its properties and values
+// into the backing Map as keys and values.
// obj: Object
merge(obj)
```
-Provide an object which maps its properties and values into the backing Map as keys and values.
-
-Example:
-
-```js
-config.options.merge({
- bail: true,
- cache: false
-});
-```
-
-### Set-backed entities
-
-API entities listed below which are backed by JavaScript Sets have several methods
-for interacting with their lower-level backing store. For example, the `Resolve.Modules` API
-is backed by a JavaScript Set, and so may have its values manipulated via these chainable
-Set methods at `config.resolve.modules`.
+## ChainedSet
-Another example would be an entry that is returned from `Config.Entry`, e.g. `config.entry('index')`
-returns a chainable Set.
+Another of the core API interfaces in webpack-chain is a `ChainedSet`. A `ChainedSet` operates
+similar to a JavaScript Set, with some conveniences for chaining and generating configuration.
+If a property is marked as being a `ChainedSet`, it will have an API and methods as described below:
-**Unless stated otherwise, these methods will return the Set-backed API, allowing you to chain these methods.**
+**Unless stated otherwise, these methods will return the `ChainedSet`, allowing you to chain these methods.**
```js
+// Add/append a value to the end of a Set.
// value: *
add(value)
```
-Add a value to the end of a Set.
-
-Example:
-
-```js
-config.entry('index').add('babel-polyfill');
-```
-
----
-
```js
+// Add a value to the beginning of a Set.
// value: *
prepend(value)
```
-Add a value to the beginning of a Set.
-
-Example:
-
```js
+// Remove all values from a Set.
clear()
```
-Remove all values from a Set.
-
-Example:
-
-```js
-config.entry('index').clear();
-```
-
----
-
```js
+// Remove a specific value from a Set.
// value: *
delete(value)
```
-Remove a specific value from a Set.
-
-Example:
-
-```js
-config.entry('index').delete('babel-polyfill');
-```
-
----
-
```js
+// Returns `true` or `false` based on whether or not the
+// backing Set contains the specified value.
// value: *
// returns: Boolean
has(value)
```
-Returns `true` or `false` based on whether or not the backing Set contains the specified value.
-
-Example:
-
-```js
-const hasPolyfill = config.entry('index').has('babel-polyfill');
-```
-
----
-
```js
+// Returns an array of values contained in the backing Set.
// returns: Array
values()
```
-Returns an array of values contained in the backing Set.
-
-Example:
-
-```js
-const entries = config.entry('index').values();
-```
-
----
-
```js
+// Concatenates the given array to the end of the backing Set.
// arr: Array
merge(arr)
```
-Concatenates the given array to the end of the backing Set.
-
-Example:
-
-```js
-config.entry('index').merge(['webpack-dev-server/client', 'webpack/hot/dev-server']);
-```
-
----
-
-### Config.Options
-
-A `Config` instance provides two mechanisms for setting values on the
-root configuration object: shorthand methods, and lower-level `set`
-methods. Calling either of these is backed at `config.options`.
-These configuration options are backed by JavaScript Maps, so calling `set`
-will create unique mappings and overwrite existing values set at that
-property name.
-
-Let's start with the simpler shorthand methods:
-
----
-
-```js
-// baseDirectory: String
-config.context(baseDirectory)
-```
-
-The base directory, an absolute path, for resolving entry points and
-loaders from configuration.
-[context docs](https://webpack.js.org/configuration/entry-context/#context)
-
-Example:
-
-```js
-config.context(path.resolve(__dirname, 'src'));
-```
-
----
-
-```js
-// devtool: String | false
-config.devtool(devtool)
-```
-
-This option controls if and how Source Maps are generated.
-[devtool docs](https://webpack.js.org/configuration/devtool/)
-
-Example:
-
-```js
-config.devtool('source-map');
-```
-
----
-
-```js
-// target: String
-config.target(target)
-```
-
-Tells webpack which environment the application is targeting.
-[target docs](https://webpack.js.org/configuration/target/)
-
-Example:
-
-```js
-config.target('web');
-
-config.target('node');
-```
-
----
-
-```js
-// externals: String | RegExp | Function | Array | Object
-config.externals(externals)
-```
-
-Externals configuration in Webpack provides a way of not including a
-dependency in the bundle. Instead the created bundle relies on that
-dependency to be present in the consumers environment. This typically
-applies to library developers though application developers can make
-good use of this feature too.
-[target docs](https://webpack.js.org/configuration/externals/)
+## Shorthand methods
-Example:
+A number of shorthand methods exist for setting a value on a `ChainedMap`
+with the same key as the shorthand method name.
+For example, `devServer.hot` is a shorthand method, so it can be used as:
```js
-config.externals({
- jquery: 'jQuery'
-});
-```
-
----
+// A shorthand method for setting a value on a ChainedMap
+devServer.hot(true);
-```js
-// externals: String | RegExp | Function | Array | Object
-config.externals(externals)
+// This would be equivalent to:
+devServer.set('hot', true);
```
-Externals configuration in Webpack provides a way of not including a
-dependency in the bundle. Instead the created bundle relies on that
-dependency to be present in the consumers environment. This typically
-applies to library developers though application developers can make
-good use of this feature too.
-[target docs](https://webpack.js.org/configuration/externals/)
-
-Example:
-
-```js
-config.externals({
- jquery: 'jQuery'
-});
-```
+A shorthand method is chainable, so calling it will return the original instance,
+allowing you to continue to chain.
----
+### Config
-For options where a shorthand method does not exist, you can also set
-root configuration settings by making calls to `.options.set`. These
-configuration options are backed by JavaScript Maps, so calling `set`
-will create unique mappings and overwrite existing values set at that
-property name.
+Create a new configuration object.
```js
-config.options
- .set('devtool', 'eval')
- .set('externals', { jquery: 'jQuery' })
- .set('performance', {
- hints: 'warning'
- })
- .set('stats', {});
-```
-
-### Config.Module
-
-This API is the primary interface for determining how the different types of
-modules within a project will be treated.
-
-#### Config.Module.Rules
-
-`Config.Module.Rules` are matched to requests when modules are created. These
-rules can modify how the module is created. They can apply loaders to the module,
-or modify the parser. In `webpack-chain`, every rule is named for ease of modification
-in shared configuration environments.
-
-As an example, let's create a linting rule which let's us use ESLint against our project:
+const Config = require('webpack-chain');
-```js
-config.module
- // Let's interact with a rule named "lint", this is user defined
- .rule('lint')
- // This rule works against files ending in .js
- .test(/\.js$/)
- // Designate this rule to pre-run before other normally defined rules
- .pre()
- // Only run this rule against files in src/
- .include('src')
- // Work against a loader we name "eslint".
- // This loader will use "eslint-loader".
- // Pass an object as the options to use for "eslint-loader"
- .loader('eslint', 'eslint-loader', {
- rules: {
- semi: 'off'
- }
- });
+const config = new Config();
```
-**You can add multiple loaders for a given rule.**
-
-If you wish to overwrite the loader instance information for a named loader,
-you may just call `.loader()` with the new arguments.
+Moving to deeper points in the API will change the context of what you
+are modifying. You can move back to the higher context by either referencing
+the top-level `config` again, or by calling `.end()` to move up one level.
+If you are familiar with jQuery, `.end()` works similarly. All API calls
+will return the API instance at the current context unless otherwise
+specified. This is so you may chain API calls continuously if desired.
-If you wish to modify an already created loader, **pass a function** to the loader API,
-and return the new loader configuration.
+For details on the specific values that are valid for all shorthand and low-level methods,
+please refer to their corresponding name in the
+[Webpack docs hierarchy](https://webpack.js.org/configuration/).
```js
-config.module
- .rule('lint')
- .loader('eslint', ({ loader, options }) => {
- options.rules.semi = 'error';
- return { loader, options };
- });
-
-// Any object keys you leave off the return object will continue to use existing information:
-config.module
- .rule('lint')
- // Leaves whatever loader used intact
- .loader('eslint', ({ options }) => {
- options.rules.semi = 'error';
- return { options };
- });
+Config : ChainedMap
```
-### Config.Plugins
-
-Webpack plugins can customize the build in a variety of ways. See the
-[Webpack docs](https://webpack.js.org/configuration/plugins/) for more detailed information.
-
-In `webpack-chain`, all plugins are named to make modification easier in shared
-configuration environments.
-
-As an example, let's add a plugin to inject the `NODE_ENV` environment variable into our
-web project:
+#### Config shorthand methods
```js
config
- // We have given this plugin the user-defined name of "env"
- // .plugin also takes a plugin to create, and a variable number of arguments which
- // will be passed to the plugin upon instantiation
- .plugin('env', webpack.EnvironmentPlugin, ['NODE_ENV']);
+ .amd(amd)
+ .bail(bail)
+ .cache(cache)
+ .devtool(devtool)
+ .context(context)
+ .externals(externals)
+ .loader(loader)
+ .profile(profile)
+ .recordsPath(recordsPath)
+ .recordsInputPath(recordsInputPath)
+ .recordsOutputPath(recordsOutputPath)
+ .stats(stats)
+ .target(target)
+ .watch(watch)
+ .watchOptions(watchOptions)
```
-_NOTE: Do not use `new` to create the plugin, as this will be done for you._
-
-To modify the arguments that are passed to a plugin, just call `.plugin` again with the same name,
-along with a function which will receive the current plugin arguments and return a new plugin
-arguments array.
+#### Config entryPoints
```js
-config
- .plugin('env', args => [...args, 'MY_SECRET_ENV_VAR']);
-```
-
-If you want to modify how a defined plugin will be created, you can call `.inject`
-on the `Plugin` instance:
+// Backed at config.entryPoints : ChainedMap
+config.entry(name) : ChainedSet
-```js
-// Above the "env" plugin was created. Somewhere else,
-// we can modify the instantiation
config
- .plugins.get('env')
- .inject((Plugin, args) => new Plugin([...args, 'SECRET_KEY']));
-```
-
-### Config.Entries
-
-Creating and modifying configuration entries is done through the
-`config.entry()` API. This is backed in the configuration at `config.entries`.
-
-```js
-// entryNameIdentifier: String
-config.entry(entryNameIdentifier)
-```
+ .entry(name)
+ .add(value)
+ .add(value)
-A point to enter the application. Note that calling `config.entry()` only
-specifies the name of the entry point to modify. Further API calls on this
-entry will make actual changes to it. Entries are backed by JavaScript Sets,
-so calling `add` will only add unique values, i.e. calling `add` many times
-with the same value will only create a single entry point for that value.
-[entry docs](https://webpack.js.org/configuration/entry-context/#entry)
-
-Example:
-
-```js
-config.entry('index');
-```
-
----
-
-```js
-// entryPath: String
-entry.add(entryPath)
-```
-
-Add an entry point to a named entry.
-
-Examples:
-
-```js
-config.entry('index').add('index.js');
-
-config.entry('index')
- .add('babel-polyfill')
- .add('src/index.js')
- .add('webpack/hot/dev-server');
-```
-
----
-
-```js
-entry.clear()
-```
-
-Removes all specified entry points from a named entry.
-
-Example:
-
-```js
-// Previously added entry points
-config.entry('index')
- .add('babel-polyfill')
- .add('src/index.js')
- .add('webpack/hot/dev-server');
-
-// Remove all entry points from the `index` entry
-config.entry('index').clear();
-```
-
----
-
-```js
-// entryPath: String
-entry.delete(entryPath)
+config
+ .entry(name)
+ .clear()
+
+// Using low-level config.entryPoints:
+
+config.entryPoints
+ .get(name)
+ .add(value)
+ .add(value)
+
+config.entryPoints
+ .get(name)
+ .clear()
```
-Removes a single entry point from a named entry.
-
-Example:
+#### Config output: shorthand methods
```js
-// Previously added entry points
-config.entry('index')
- .add('babel-polyfill')
- .add('src/index.js')
- .add('webpack/hot/dev-server');
-
-// Remove all entry points from the `index` entry
-config.entry('index').delete('babel-polyfill');
-```
+config.output : ChainedMap
----
+config.output
+ .chunkFilename(chunkFilename)
+ .crossOriginLoading(crossOriginLoading)
+ .filename(filename)
+ .library(library)
+ .libraryTarget(libraryTarget)
+ .devtoolFallbackModuleFilenameTemplate(devtoolFallbackModuleFilenameTemplate)
+ .devtoolLineToLine(devtoolLineToLine)
+ .devtoolModuleFilenameTemplate(devtoolModuleFilenameTemplate)
+ .hashFunction(hashFunction)
+ .hashDigest(hashDigest)
+ .hashDigestLength(hashDigestLength)
+ .hashSalt(hashSalt)
+ .hotUpdateChunkFilename(hotUpdateChunkFilename)
+ .hotUpdateFunction(hotUpdateFunction)
+ .hotUpdateMainFilename(hotUpdateMainFilename)
+ .jsonpFunction(jsonpFunction)
+ .path(path)
+ .pathinfo(pathinfo)
+ .publicPath(publicPath)
+ .sourceMapFilename(sourceMapFilename)
+ .sourcePrefix(sourcePrefix)
+ .strictModuleExceptionHandling(strictModuleExceptionHandling)
+ .umdNamedDefine(umdNamedDefine)
+```
+
+#### Config resolve: shorthand methods
+
+```js
+config.resolve : ChainedMap
-```js
-// entryPath: String
-// returns: Boolean
-entry.has(entryPath)
+config.resolve
+ .enforceExtension(enforceExtension)
+ .enforceModuleExtension(enforceModuleExtension)
+ .unsafeCache(unsafeCache)
+ .symlinks(symlinks)
+ .cachePredicate(cachePredicate)
```
-Returns `true` or `false` depending on whether the named entry has the
-specified entry point.
-
-Examples:
+#### Config resolve alias
```js
-// Previously added entry points
-config.entry('index')
- .add('babel-polyfill')
- .add('src/index.js')
- .add('webpack/hot/dev-server');
-
-config.entry('index').has('babel-polyfill'); // true
-config.entry('index').has('src/fake.js'); // false
-```
-
----
+config.resolve.alias : ChainedMap
-```js
-// returns: Array
-entry.values()
+config.resolve.alias
+ .set(key, value)
+ .set(key, value)
+ .delete(key)
+ .clear()
```
-Returns an array of all the entry points for a named entry.
-
-Examples:
+#### Config resolve modules
```js
-// Previously added entry points
-config.entry('index')
- .add('babel-polyfill')
- .add('src/index.js')
- .add('webpack/hot/dev-server');
-
-config.entry('index')
- .values(); // ['babel-polyfill', 'src/index.js', 'webpack/hot/dev-server']
-
-config.entry('index')
- .values()
- .map(entryPoint => console.log(entryPoint));
-// babel-polyfill
-// src/index.js
-// webpack/hot/dev-server
-```
+config.resolve.modules : ChainedSet
-### Config.Output
-
-A `Config.Output` instance provides two mechanisms for setting values on the
-configuration output: shorthand methods, and lower-level `set`
-methods. Calling either of these is backed at `config.output.options`.
-
-
-```js
-// path: String
-output.path(path)
+config.resolve.modules
+ .add(value)
+ .prepend(value)
+ .clear()
```
-The output directory as an absolute path.
-[output path docs](https://webpack.js.org/configuration/output/#output-path)
-
-Example:
+#### Config resolve aliasFields
```js
-config.output
- .path(path.resolve(__dirname, 'dist'));
-```
-
----
+config.resolve.aliasFields : ChainedSet
-```js
-// bundleName: String
-output.filename(bundleName)
+config.resolve.aliasFields
+ .add(value)
+ .prepend(value)
+ .clear()
```
-This option determines the name of each output bundle. The bundle is written
-to the directory specified by the output.path option.
-[output filename docs](https://webpack.js.org/configuration/output/#output-filename)
-
-Examples:
+#### Config resolve descriptionFields
```js
-config.output.filename('bundle.js');
+config.resolve.descriptionFields : ChainedSet
-config.output.filename('[name].bundle.js');
+config.resolve.descriptionFields
+ .add(value)
+ .prepend(value)
+ .clear()
```
----
+#### Config resolve extensions
```js
-// chunkFilename: String
-output.chunkFilename(chunkFilename)
-```
-
-This option determines the name of on-demand loaded chunk files.
-See output.filename option for details on the possible values.
-[output chunkFilename docs](https://webpack.js.org/configuration/output/#output-chunkfilename)
-
-Example:
+config.resolve.extensions : ChainedSet
-```js
-config.output.chunkFilename('[id].[chunkhash].js');
+config.resolve.extensions
+ .add(value)
+ .prepend(value)
+ .clear()
```
----
+#### Config resolve mainFields
```js
-// publicPath: String
-output.publicPath(publicPath)
-```
+config.resolve.mainFields : ChainedSet
-This option specifies the public URL of the output directory when referenced in a browser.
-[output publicPath docs](https://webpack.js.org/configuration/output/#output-publicpath)
-
-Examples:
-
-```js
-config.output.publicPath('https://cdn.example.com/assets/');
-
-config.output.publicPath('/assets/');
+config.resolve.mainFields
+ .add(value)
+ .prepend(value)
+ .clear()
```
----
+#### Config resolve mainFiles
```js
-// libraryName: String
-output.library(libraryName)
-```
-
-Use `library`, and `libraryTarget` below, when writing a JavaScript library
-that should export values, which can be used by other code depending on it.
-[output library docs](https://webpack.js.org/configuration/output/#output-library)
+config.resolve.mainFiles : ChainedSet
-Examples:
-
-```js
-config.output.library('MyLibrary');
+config.resolve.mainFiles
+ .add(value)
+ .prepend(value)
+ .clear()
```
----
+#### Config resolveLoader
```js
-// target: String
-output.libraryTarget(target)
+config.resolveLoader : ChainedMap
```
-Configure how a library will be exposed.
-Use `libraryTarget`, and `library` above, when writing a JavaScript library
-that should export values, which can be used by other code depending on it.
-[output libraryTarget docs](https://webpack.js.org/configuration/output/#output-librarytarget)
-
-Examples:
+#### Config resolveLoader extensions
```js
-config.output.libraryTarget('var');
-
-config.output.libraryTarget('amd');
+config.resolveLoader.extensions : ChainedSet
-config.output.libraryTarget('umd');
+config.resolveLoader.extensions
+ .add(value)
+ .prepend(value)
+ .clear()
```
----
-
-For output where a shorthand method does not exist, you can also set
-output options by making calls to `.output.set`. These
-configuration options are backed by JavaScript Maps, so calling `set`
-will create unique mappings and overwrite existing values set at that
-property name.
-
-Examples:
+#### Config resolveLoader modules
```js
-config.output
- .set('crossOriginLoading', 'anonymous')
- .set('sourcePrefix', '\t')
- .set('umdNamedDefine', true);
-```
-
-### Config.DevServer
-
-This set of options is picked up by webpack-dev-server and can be used to change
-its behavior in various ways. [Webpack docs](https://webpack.js.org/configuration/dev-server/).
+config.resolveLoader.modules : ChainedSet
-A `Config.DevServer` instance provides two mechanisms for setting values on the
-configuration dev server: shorthand methods, and lower-level `set`
-methods. Calling either of these is backed at `config.devServer.options`.
-These configuration options are backed by JavaScript Maps, so calling `set`
-will create unique mappings and overwrite existing values set at that
-property name.
-
-Starting with the shorthand methods:
-
-```js
-// host: String
-devServer.host(host)
+config.resolveLoader.modules
+ .add(value)
+ .prepend(value)
+ .clear()
```
-Specify a host to use. By default this is localhost.
-[devServer host docs](https://webpack.js.org/configuration/dev-server/#devserver-host-cli-only)
-
-Example:
+#### Config resolveLoader moduleExtensions
```js
-config.devServer.host('0.0.0.0');
-```
-
----
+config.resolveLoader.moduleExtensions : ChainedSet
-```js
-// port: Number
-devServer.port(host)
+config.resolveLoader.moduleExtensions
+ .add(value)
+ .prepend(value)
+ .clear()
```
-Specify a port number to listen for requests on.
-[devServer port docs](https://webpack.js.org/configuration/dev-server/#devserver-port-cli-only)
-
-Example:
+#### Config resolveLoader packageMains
```js
-config.devServer.port(8080);
-```
+config.resolveLoader.packageMains : ChainedSet
----
-
-```js
-// isHttps: Boolean
-devServer.https(isHttps)
+config.resolveLoader.packageMains
+ .add(value)
+ .prepend(value)
+ .clear()
```
-By default dev-server will be served over HTTP. It can optionally be served over HTTP/2 with HTTPS.
-[devServer https docs](https://webpack.js.org/configuration/dev-server/#devserver-https)
-
-Example:
+#### Config performance: shorthand methods
```js
-config.devServer.https(true);
-```
-
----
+config.performance : ChainedMap
-```js
-// path: String | Boolean | Array
-devServer.contentBase(path)
+config.performance
+ .hints(hints)
+ .maxEntrypointSize(maxEntrypointSize)
+ .maxAssetSize(maxAssetSize)
+ .assetFilter(assetFilter)
```
-Tell the server where to serve content from. This is only necessary if you want to
-serve static files. `devServer.publicPath` will be used to determine where the bundles
-should be served from, and takes precedence.
-[devServer contentBase docs](https://webpack.js.org/configuration/dev-server/#devserver-contentbase)
+#### Config plugins: adding
-Examples:
+_NOTE: Do not use `new` to create the plugin, as this will be done for you._
```js
-config.devServer.contentBase(path.join(__dirname, 'public'));
+// Backed at config.plugins
+config.plugin(name, WebpackPlugin, ...args) : chainable
-config.devServer.contentBase(false);
-
-config.devServer.contentBase([
- path.join(__dirname, 'public'),
- path.join(__dirname, 'assets')
-]);
+// Example
+config.plugin('env', webpack.EnvironmentPlugin, 'NODE_ENV');
```
----
+#### Config plugins: modifying arguments
```js
-// useHistoryApiFallback: Boolean | Object
-devServer.historyApiFallback(useHistoryApiFallback)
-```
-
-When using the HTML5 History API, the index.html page will likely
-have be served in place of any 404 responses.
-[devServer historyApiFallback docs](https://webpack.js.org/configuration/dev-server/#devserver-historyapifallback)
+config.plugin(name, args => newArgs)
-Examples:
-
-```js
-config.devServer.historyApiFallback(true);
-
-config.devServer.historyApiFallback({
- rewrites: [
- { from: /^\/$/, to: '/views/landing.html' },
- { from: /^\/subpage/, to: '/views/subpage.html' },
- { from: /./, to: '/views/404.html' }
- ]
-});
+// Example
+config.plugin('env', args => [...args, 'SECRET_KEY']);
```
----
+#### Config resolve plugins: adding
-```js
-// hotEnabled: Boolean
-devServer.hot(hotEnabled)
-```
-
-Enable webpack's Hot Module Replacement feature.
-[devServer hot docs](https://webpack.js.org/configuration/dev-server/#devserver-hot)
-
-Example:
-
-```js
-config.devServer.hot(true);
-```
-
----
+_NOTE: Do not use `new` to create the plugin, as this will be done for you._
```js
-// stats: String | Object
-devServer.stats(stats)
+// Backed at config.resolve.plugins
+config.resolve.plugin(name, WebpackPlugin, ...args) : chainable
```
-This option lets you precisely control what bundle information gets displayed.
-This can be a nice middle ground if you want some bundle information, but not all of it.
-[devServer stats docs](https://webpack.js.org/configuration/dev-server/#devserver-stats)
-
-Examples:
+#### Config resolve plugins: modifying arguments
```js
-config.devServer.stats('errors-only');
-
-config.devServer.stats({
- colors: true,
- quiet: true,
- assets: false
-});
+config.resolve.plugin(name, args => newArgs)
```
----
-
-For options where a shorthand method does not exist, you can also set
-dev server configuration settings by making calls to `.devServer.set`. These
-configuration options are backed by JavaScript Maps, so calling `set`
-will create unique mappings and overwrite existing values set at that
-property name.
+#### Config node
```js
-config.devServer
- .set('hot', true)
- .set('lazy', true)
- .set('proxy', {
- '/api': 'http://localhost:3000'
- });
-```
-
-### Config.Node
-
-Customize the Node.js environment using polyfills or mocks.
-
-A `Config.Node` only provides an API for setting configuration properties
-based on the [Webpack docs](https://webpack.js.org/configuration/node/).
+config.node : ChainedMap
-Example:
-
-```js
config.node
- .set('console', false)
- .set('global', true)
- .set('Buffer', true)
- .set('__filename', 'mock')
.set('__dirname', 'mock')
- .set('setImmediate', true);
-```
-
-### Config.Resolve
-
-`Config.Resolve` currently only has shorthand interfaces for `modules` and `extensions`.
-You will need to use the low-level `.set` API to change other property at this time.
-[resolve docs](https://webpack.js.org/configuration/resolve/#resolve)
-
-Examples:
-
-```js
-config.resolve
- .set('mainFiles', 'index')
- .set('enforceExtension', false);
-```
-
-### Config.Resolve.modules
-
-`Resolve.modules` are backed by JavaScript Sets,
-so calling `add` will only add unique values, i.e. calling `add` many times
-with the same value will only create a single module for that value.
-
-
-```js
-// entryPath: String
-resolve.modules.add(path)
+ .set('__filename', 'mock');
```
-Add a path that tells Webpack what directories should be searched when resolving modules.
-[resolve modules docs](https://webpack.js.org/configuration/resolve/#resolve-modules)
-
-Examples:
+#### Config devServer
```js
-config.resolve.modules
- .add(path.join(process.cwd(), 'node_modules'))
- .add(path.join(__dirname, '../node_modules'));
+config.devServer : ChainedMap
```
----
+#### Config devServer: shorthand methods
```js
-resolve.modules.clear()
-```
-
-Removes all specified paths from resolve modules.
-
-Example:
-
-```js
-// Previously added resolve module paths
-config.resolve.modules
- .add(path.join(process.cwd(), 'node_modules'))
- .add(path.join(__dirname, '../node_modules'));
-
-// Remove all resolve module paths
-config.resolve.modules.clear();
+config.devServer
+ .clientLogLevel(clientLogLevel)
+ .compress(compress)
+ .contentBase(contentBase)
+ .filename(filename)
+ .headers(headers)
+ .historyApiFallback(historyApiFallback)
+ .host(host)
+ .hot(hot)
+ .hotOnly(hotOnly)
+ .https(https)
+ .inline(inline)
+ .lazy(lazy)
+ .noInfo(noInfo)
+ .overlay(overlay)
+ .port(port)
+ .proxy(proxy)
+ .quiet(quiet)
+ .setup(setup)
+ .stats(stats)
+ .watchContentBase(watchContentBase)
```
----
+#### Config module
```js
-// path: String
-resolve.modules.delete(path)
+config.module : ChainedMap
```
-Removes a single path from resolve modules.
-
-Example:
+#### Config module rules: shorthand methods
```js
-// Previously added resolve module paths
-config.resolve.modules
- .add(path.join(process.cwd(), 'node_modules'))
- .add(path.join(__dirname, '../node_modules'));
+config.module.rules : ChainedMap
-// Remove a single resolve module path
-config.resolve.modules.delete(path.join(process.cwd(), 'node_modules'));
+config.module
+ .rule(name)
+ .test(test)
+ .pre()
+ .post()
+ .include(...paths)
+ .exclude(...paths)
```
----
+#### Config module rules loaders: creating
```js
-// path: String
-// returns: Boolean
-entry.has(path)
-```
-
-Returns `true` or `false` depending on whether the path was specified in resolve modules.
+config.module.rules[].loaders : Map
-Examples:
-
-```js
-// Previously added resolve module paths
-config.resolve.modules
- .add(path.join(process.cwd(), 'node_modules'))
- .add(path.join(__dirname, '../node_modules'));
-
-config.resolve.modules.has(path.join(process.cwd(), 'node_modules')); // true
-config.resolve.modules.has('/usr/bin'); // false
-```
-
----
+config.module
+ .rule(name)
+ .loader(name, loader, options: optional)
+
+// Example
-```js
-// returns: Array
-resolve.modules.values()
+config.module
+ .rule('compile')
+ .loader('babel', 'babel-loader', { presets: ['babel-preset-es2015'] });
```
-Returns an array of all the paths in resolve modules.
-
-Examples:
+#### Config module rules loaders: modifying options
```js
-// Previously added resolve module paths
-config.resolve.modules
- .add(path.join(process.cwd(), 'node_modules'))
- .add(path.join(__dirname, '../node_modules'));
+config.module
+ .rule(name)
+ .loader(name, options => newOptions)
+
+// Example
-config.resolve.modules
- .values()
- .map(path => console.log(path));
+config.module
+ .rule('compile')
+ .loader('babel', options => merge(options, { plugins: ['babel-plugin-object-rest-spread'] }));
+```
+
+---
+
+### Merging Config
+
+webpack-chain supports merging in an object to the configuration instance which matches a layout
+similar to how the webpack-chain schema is laid out. Note that this is not a Webpack configuration
+object, but you may transform a Webpack configuration object before providing it to webpack-chain
+to match its layout.
+
+```js
+config.merge({ devtool: 'source-map' });
+
+config.get('devtool') // "source-map"
+```
+
+```js
+config.merge({
+ [key]: value,
+
+ amd,
+ bail,
+ cache,
+ devtool,
+ context,
+ externals,
+ loader,
+ profile,
+ recordsPath,
+ recordsInputPath,
+ recordsOutputPath,
+ stats,
+ target,
+ watch,
+ watchOptions,
+
+ entry: {
+ [name]: [...values]
+ },
+
+ plugin: {
+ [name]: {
+ plugin: WebpackPlugin,
+ args: [...args]
+ }
+ },
+
+ devServer: {
+ [key]: value,
+
+ clientLogLevel,
+ compress,
+ contentBase,
+ filename,
+ headers,
+ historyApiFallback,
+ host,
+ hot,
+ hotOnly,
+ https,
+ inline,
+ lazy,
+ noInfo,
+ overlay,
+ port,
+ proxy,
+ quiet,
+ setup,
+ stats,
+ watchContentBase
+ },
+
+ node: {
+ [key]: value
+ },
+
+ performance: {
+ [key]: value
+ },
+
+ resolve: {
+ [key]: value,
+
+ alias: {
+ [key]: value
+ },
+ aliasFields: [...values],
+ descriptionFields: [...values],
+ extensions: [...values],
+ mainFields: [...values],
+ mainFiles: [...values],
+ modules: [...values],
+
+ plugin: {
+ [name]: {
+ plugin: WebpackPlugin,
+ args: [...args]
+ }
+ }
+ },
+
+ resolveLoader: {
+ [key]: value,
+
+ extensions: [...values],
+ modules: [...values],
+ moduleExtensions: [...values],
+ packageMains: [...values]
+ },
+
+ module: {
+ [key]: value,
+
+ rule: {
+ [name]: {
+ [key]: value,
+
+ include: [...paths],
+ exclude: [...paths],
+ test: RegExp,
+ enforce: value,
+
+ loader: {
+ [name]: {
+ loader: LoaderString,
+ options: LoaderOptions
+ }
+ }
+ }
+ }
+ }
+})
```
-
-### Resolve.Extensions
-
-This API is identical to the `Resolve.Modules` API, except the values
-stored should be file extensions to automatically resolve instead of module resolution paths.
-
-See the [Webpack docs](https://webpack.js.org/configuration/resolve/#resolve-extensions) for details.
-
-### ResolveLoader.Modules
-
-This API is identical to the `Resolve.Modules` API, except the values
-stored should be paths for Webpack to resolve loaders.
-
-See the [Webpack docs](https://webpack.js.org/configuration/resolve/#resolveloader) for details.
-
-### ResolveLoader.*
-
-Any other properties you wish to set on `resolveLoader` can be done through the `.set` API,
-just like [`resolve.set`](#Config.Resolve).
diff --git a/package.json b/package.json
index 7ea690d..4acba53 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,14 @@
],
"author": "Eli Perelman ",
"license": "MIT",
+ "scripts": {
+ "test": "ava test"
+ },
"dependencies": {
"deepmerge": "^1.3.2"
+ },
+ "devDependencies": {
+ "ava": "^0.18.2",
+ "webpack": "^2.2.1"
}
}
diff --git a/src/ChainedMap.js b/src/ChainedMap.js
index 51a3ed3..242378e 100644
--- a/src/ChainedMap.js
+++ b/src/ChainedMap.js
@@ -6,6 +6,13 @@ module.exports = class extends Chainable {
this.options = new Map();
}
+ extend(methods) {
+ this.shorthands = methods;
+ methods.map(method => {
+ this[method] = value => this.set(method, value);
+ });
+ }
+
clear() {
this.options.clear();
return this;
@@ -50,4 +57,28 @@ module.exports = class extends Chainable {
Object.keys(obj).forEach(key => this.set(key, obj[key]));
return this;
}
+
+ clean(obj) {
+ return Object
+ .keys(obj)
+ .reduce((acc, key) => {
+ const value = obj[key];
+
+ if (value === undefined) {
+ return acc;
+ }
+
+ if (Array.isArray(value) && !value.length) {
+ return acc;
+ }
+
+ if (Object.prototype.toString.call(value) === '[object Object]' && !Object.keys(value).length) {
+ return acc;
+ }
+
+ acc[key] = value;
+
+ return acc;
+ }, {});
+ }
};
diff --git a/src/ChainedSet.js b/src/ChainedSet.js
index d81ec4e..fc44266 100644
--- a/src/ChainedSet.js
+++ b/src/ChainedSet.js
@@ -36,5 +36,6 @@ module.exports = class extends Chainable {
merge(arr) {
this.collection = new Set([...this.collection, ...arr]);
+ return this;
}
};
diff --git a/src/Config.js b/src/Config.js
index 6998149..36c23f9 100644
--- a/src/Config.js
+++ b/src/Config.js
@@ -6,46 +6,45 @@ const Output = require('./Output');
const DevServer = require('./DevServer');
const Plugin = require('./Plugin');
const Module = require('./Module');
+const Performance = require('./Performance');
-class Config {
+module.exports = class extends ChainedMap {
constructor() {
- this.options = new ChainedMap(this);
+ super();
+ this.devServer = new DevServer(this);
+ this.entryPoints = new ChainedMap(this);
+ this.module = new Module(this);
this.node = new ChainedMap(this);
this.output = new Output(this);
+ this.performance = new Performance(this);
this.plugins = new ChainedMap(this);
this.resolve = new Resolve(this);
this.resolveLoader = new ResolveLoader(this);
- this.entries = new ChainedMap(this);
- this.devServer = new DevServer(this);
- this.module = new Module(this);
- }
-
- externals(externals) {
- this.options.set('externals', externals);
- return this;
- }
-
- devtool(devtool) {
- this.options.set('devtool', devtool);
- return this;
- }
-
- context(context) {
- this.options.set('context', context);
- return this;
- }
-
- target(target) {
- this.options.set('target', target);
- return this;
+ this.extend([
+ 'amd',
+ 'bail',
+ 'cache',
+ 'devtool',
+ 'context',
+ 'externals',
+ 'loader',
+ 'profile',
+ 'recordsPath',
+ 'recordsInputPath',
+ 'recordsOutputPath',
+ 'stats',
+ 'target',
+ 'watch',
+ 'watchOptions'
+ ]);
}
entry(name) {
- if (!this.entries.has(name)) {
- this.entries.set(name, new ChainedSet(this));
+ if (!this.entryPoints.has(name)) {
+ this.entryPoints.set(name, new ChainedSet(this));
}
- return this.entries.get(name);
+ return this.entryPoints.get(name);
}
plugin(name, plugin, ...args) {
@@ -62,11 +61,10 @@ class Config {
}
toConfig() {
- const entries = this.entries.entries();
- const plugins = this.plugins.values()
- .map(value => value.init(value.plugin, value.args));
+ const entries = this.entryPoints.entries();
+ const plugins = this.plugins.values().map(plugin => plugin.init(plugin.plugin, plugin.args));
- const config = Object.assign({}, this.options.entries(), {
+ const config = Object.assign(this.entries() || {}, {
node: this.node.entries(),
output: this.output.entries(),
resolve: this.resolve.toConfig(),
@@ -85,15 +83,7 @@ class Config {
config.plugins = plugins;
}
- return Object
- .keys(config)
- .reduce((acc, key) => {
- if (config[key] !== undefined) {
- acc[key] = config[key];
- }
-
- return acc;
- }, {});
+ return this.clean(config);
}
merge(obj = {}) {
@@ -121,7 +111,7 @@ class Config {
case 'plugin': {
return Object
.keys(value)
- .forEach(name => this.plugin(name).use(value[name]));
+ .forEach(name => this.plugins.get(name).merge(value[name]));
}
default: {
@@ -132,6 +122,4 @@ class Config {
return this;
}
-}
-
-module.exports = Config;
+};
diff --git a/src/DevServer.js b/src/DevServer.js
index 28dd286..e8e9e2d 100644
--- a/src/DevServer.js
+++ b/src/DevServer.js
@@ -1,31 +1,29 @@
const ChainedMap = require('./ChainedMap');
module.exports = class extends ChainedMap {
- host(host) {
- return this.set('host', host);
- }
-
- port(port) {
- return this.set('port', port);
- }
-
- https(isHttps) {
- return this.set('https', isHttps);
- }
-
- contentBase(contentBase) {
- return this.set('contentBase', contentBase);
- }
-
- historyApiFallback(useHistoryApiFallback) {
- return this.set('historyApiFallback', useHistoryApiFallback);
- }
-
- hot(hot) {
- return this.set('hot', hot);
- }
-
- stats(stats) {
- return this.set('stats', stats);
+ constructor(parent) {
+ super(parent);
+ this.extend([
+ 'clientLogLevel',
+ 'compress',
+ 'contentBase',
+ 'filename',
+ 'headers',
+ 'historyApiFallback',
+ 'host',
+ 'hot',
+ 'hotOnly',
+ 'https',
+ 'inline',
+ 'lazy',
+ 'noInfo',
+ 'overlay',
+ 'port',
+ 'proxy',
+ 'quiet',
+ 'setup',
+ 'stats',
+ 'watchContentBase'
+ ]);
}
};
diff --git a/src/Loader.js b/src/Loader.js
index 34a5b90..03639b5 100644
--- a/src/Loader.js
+++ b/src/Loader.js
@@ -5,12 +5,6 @@ module.exports = class {
}
tap(handler) {
- const {
- loader = this.loader,
- options = this.options
- } = handler({ loader: this.loader, options: this.options });
-
- this.loader = loader;
- this.options = options;
+ this.options = handler(this.options);
}
};
diff --git a/src/Module.js b/src/Module.js
index 63f3724..38e0cc4 100644
--- a/src/Module.js
+++ b/src/Module.js
@@ -4,7 +4,6 @@ const Rule = require('./Rule');
module.exports = class extends ChainedMap {
constructor(parent) {
super(parent);
-
this.rules = new ChainedMap(this);
}
@@ -17,14 +16,9 @@ module.exports = class extends ChainedMap {
}
toConfig() {
- const config = this.entries();
- const rules = this.rules.values().map(r => r.toConfig());
-
- if (!config && !rules.length) {
- return;
- }
-
- return Object.assign({ rules }, config);
+ return this.clean(Object.assign(this.entries() || {}, {
+ rules: this.rules.values().map(r => r.toConfig())
+ }));
}
merge(obj) {
diff --git a/src/Output.js b/src/Output.js
index d9ead08..04749b1 100644
--- a/src/Output.js
+++ b/src/Output.js
@@ -1,27 +1,32 @@
const ChainedMap = require('./ChainedMap');
module.exports = class extends ChainedMap {
- path(path) {
- return this.set('path', path);
- }
-
- filename(filename) {
- return this.set('filename', filename);
- }
-
- chunkFilename(chunkFilename) {
- return this.set('chunkFilename', chunkFilename);
- }
-
- publicPath(publicPath) {
- return this.set('publicPath', publicPath);
- }
-
- library(library) {
- return this.set('library', library);
- }
-
- libraryTarget(libraryTarget) {
- return this.set('libraryTarget', libraryTarget);
+ constructor(parent) {
+ super(parent);
+ this.extend([
+ 'chunkFilename',
+ 'crossOriginLoading',
+ 'filename',
+ 'library',
+ 'libraryTarget',
+ 'devtoolFallbackModuleFilenameTemplate',
+ 'devtoolLineToLine',
+ 'devtoolModuleFilenameTemplate',
+ 'hashFunction',
+ 'hashDigest',
+ 'hashDigestLength',
+ 'hashSalt',
+ 'hotUpdateChunkFilename',
+ 'hotUpdateFunction',
+ 'hotUpdateMainFilename',
+ 'jsonpFunction',
+ 'path',
+ 'pathinfo',
+ 'publicPath',
+ 'sourceMapFilename',
+ 'sourcePrefix',
+ 'strictModuleExceptionHandling',
+ 'umdNamedDefine'
+ ]);
}
};
diff --git a/src/Performance.js b/src/Performance.js
new file mode 100644
index 0000000..5f0d2d6
--- /dev/null
+++ b/src/Performance.js
@@ -0,0 +1,13 @@
+const ChainedMap = require('./ChainedMap');
+
+module.exports = class extends ChainedMap {
+ constructor(parent) {
+ super(parent);
+ this.extend([
+ 'hints',
+ 'maxEntrypointSize',
+ 'maxAssetSize',
+ 'assetFilter'
+ ]);
+ }
+};
diff --git a/src/Plugin.js b/src/Plugin.js
index 35f2a18..2917969 100644
--- a/src/Plugin.js
+++ b/src/Plugin.js
@@ -1,5 +1,7 @@
+const merge = require('deepmerge');
+
module.exports = class {
- constructor(plugin = () => null, args) {
+ constructor(plugin = () => null, args = []) {
this.plugin = plugin;
this.args = args;
}
@@ -22,4 +24,16 @@ module.exports = class {
this.init = handler;
return this;
}
+
+ merge(obj) {
+ if (obj.plugin) {
+ this.plugin = plugin;
+ }
+
+ if (obj.args) {
+ this.args = merge(this.args, obj.args);
+ }
+
+ return this;
+ }
};
diff --git a/src/Resolve.js b/src/Resolve.js
index 621e9c6..1118d45 100644
--- a/src/Resolve.js
+++ b/src/Resolve.js
@@ -1,23 +1,52 @@
const ChainedMap = require('./ChainedMap');
const ChainedSet = require('./ChainedSet');
+const Plugin = require('./Plugin');
+const merge = require('deepmerge');
module.exports = class extends ChainedMap {
constructor(parent) {
super(parent);
- this.modules = new ChainedSet(this);
+ this.alias = new ChainedMap(this);
+ this.aliasFields = new ChainedSet(this);
+ this.descriptionFiles = new ChainedSet(this);
this.extensions = new ChainedSet(this);
+ this.mainFields = new ChainedSet(this);
+ this.mainFiles = new ChainedSet(this);
+ this.modules = new ChainedSet(this);
+ this.plugins = new ChainedMap(this);
+ this.extend([
+ 'enforceExtension',
+ 'enforceModuleExtension',
+ 'unsafeCache',
+ 'symlinks',
+ 'cachePredicate'
+ ]);
}
- toConfig() {
- const modules = this.modules.values();
- const extensions = this.extensions.values();
- const entries = this.entries() || {};
+ plugin(name, plugin, ...args) {
+ if (this.plugins.has(name)) {
+ const handler = plugin;
+ const instance = this.plugins.get(name);
- if (!modules.length && !extensions.length && !Object.keys(entries).length) {
- return;
+ instance.tap(handler);
+ return this;
}
- return Object.assign({ modules, extensions }, entries);
+ this.plugins.set(name, new Plugin(plugin, args));
+ return this;
+ }
+
+ toConfig() {
+ return this.clean(Object.assign(this.entries() || {}, {
+ alias: this.alias.entries(),
+ aliasFields: this.aliasFields.values(),
+ descriptionFiles: this.descriptionFiles.values(),
+ extensions: this.extensions.values(),
+ mainFields: this.mainFields.values(),
+ mainFiles: this.mainFiles.values(),
+ modules: this.modules.values(),
+ plugins: this.plugins.values().map(plugin => plugin.init(plugin.plugin, plugin.args))
+ }));
}
merge(obj) {
@@ -27,16 +56,23 @@ module.exports = class extends ChainedMap {
const value = obj[key];
switch (key) {
- case 'modules': {
- return this.modules.merge(value);
- }
-
- case 'extensions': {
- return this.extensions.merge(value);
+ case 'alias':
+ case 'aliasFields':
+ case 'descriptionFiles':
+ case 'extensions':
+ case 'mainFields':
+ case 'mainFiles':
+ case 'modules':
+ case 'plugins': {
+ return this[key].merge(value);
}
default: {
- this.set(key, value);
+ if (this.has(key)) {
+ this.set(key, merge(this.get(key), value));
+ } else {
+ this.set(key, value);
+ }
}
}
});
diff --git a/src/ResolveLoader.js b/src/ResolveLoader.js
index 4878129..6f1ce92 100644
--- a/src/ResolveLoader.js
+++ b/src/ResolveLoader.js
@@ -1,21 +1,23 @@
const ChainedMap = require('./ChainedMap');
const ChainedSet = require('./ChainedSet');
+const merge = require('deepmerge');
module.exports = class extends ChainedMap {
constructor(parent) {
super(parent);
+ this.extensions = new ChainedSet(this);
this.modules = new ChainedSet(this);
+ this.moduleExtensions = new ChainedSet(this);
+ this.packageMains = new ChainedSet(this);
}
toConfig() {
- const modules = this.modules.values();
- const entries = this.entries() || {};
-
- if (!modules.length && !Object.keys(entries).length) {
- return;
- }
-
- return Object.assign({ modules }, entries);
+ return this.clean(Object.assign({
+ extensions: this.extensions.values(),
+ modules: this.modules.values(),
+ moduleExtensions: this.moduleExtensions.values(),
+ packageMains: this.packageMains.values()
+ }, this.entries() || {}));
}
merge(obj) {
@@ -25,12 +27,19 @@ module.exports = class extends ChainedMap {
const value = obj[key];
switch (key) {
- case 'modules': {
- return this.modules.merge(value);
+ case 'extensions':
+ case 'modules':
+ case 'moduleExtensions':
+ case 'packageMains': {
+ return this[key].merge(value);
}
default: {
- this.set(key, value);
+ if (this.has(key)) {
+ this.set(key, merge(this.get(key), value));
+ } else {
+ this.set(key, value);
+ }
}
}
});
diff --git a/src/Rule.js b/src/Rule.js
index a90d130..5fee7d9 100644
--- a/src/Rule.js
+++ b/src/Rule.js
@@ -5,7 +5,6 @@ const merge = require('deepmerge');
module.exports = class extends ChainedMap {
constructor(parent) {
super(parent);
-
this.loaders = new Map();
this._include = new Set();
this._exclude = new Set();
@@ -57,19 +56,11 @@ module.exports = class extends ChainedMap {
}
toConfig() {
- const rule = this.entries() || {};
-
- if (this._include.size) {
- rule.include = [...this._include];
- }
-
- if (this._exclude.size) {
- rule.exclude = [...this._exclude];
- }
-
- rule.use = [...this.loaders.values()].map(({ loader, options }) => ({ loader, options }));
-
- return rule;
+ return this.clean(Object.assign(this.entries() || {}, {
+ include: [...this._include],
+ exclude: [...this._exclude],
+ use: [...this.loaders.values()].map(({ loader, options }) => this.clean({ loader, options }))
+ }));
}
merge(obj) {
diff --git a/test/Chainable.js b/test/Chainable.js
new file mode 100644
index 0000000..70c3ad4
--- /dev/null
+++ b/test/Chainable.js
@@ -0,0 +1,9 @@
+import test from 'ava';
+import Chainable from '../src/Chainable';
+
+test('Calling .end() returns parent', t => {
+ const parent = { parent: true };
+ const chain = new Chainable(parent);
+
+ t.is(chain.end(), parent);
+});
diff --git a/test/ChainedMap.js b/test/ChainedMap.js
new file mode 100644
index 0000000..7b383ff
--- /dev/null
+++ b/test/ChainedMap.js
@@ -0,0 +1,119 @@
+import test from 'ava';
+import ChainedMap from '../src/ChainedMap';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const map = new ChainedMap(parent);
+
+ t.is(map.end(), parent);
+});
+
+test('creates a backing Map', t => {
+ const map = new ChainedMap();
+
+ t.true(map.options instanceof Map);
+});
+
+test('set', t => {
+ const map = new ChainedMap();
+
+ t.is(map.set('a', 'alpha'), map);
+ t.is(map.options.get('a'), 'alpha');
+});
+
+test('get', t => {
+ const map = new ChainedMap();
+
+ t.is(map.set('a', 'alpha'), map);
+ t.is(map.get('a'), 'alpha');
+});
+
+test('clear', t => {
+ const map = new ChainedMap();
+
+ map.set('a', 'alpha');
+ map.set('b', 'beta');
+ map.set('c', 'gamma');
+
+ t.is(map.options.size, 3);
+ t.is(map.clear(), map);
+ t.is(map.options.size, 0);
+});
+
+test('delete', t => {
+ const map = new ChainedMap();
+
+ map.set('a', 'alpha');
+ map.set('b', 'beta');
+ map.set('c', 'gamma');
+
+ t.is(map.delete('b'), map);
+ t.is(map.options.size, 2);
+ t.false(map.options.has('b'));
+});
+
+test('has', t => {
+ const map = new ChainedMap();
+
+ map.set('a', 'alpha');
+ map.set('b', 'beta');
+ map.set('c', 'gamma');
+
+ t.true(map.has('b'));
+ t.false(map.has('d'));
+ t.is(map.has('b'), map.options.has('b'));
+});
+
+test('values', t => {
+ const map = new ChainedMap();
+
+ map.set('a', 'alpha');
+ map.set('b', 'beta');
+ map.set('c', 'gamma');
+
+ t.deepEqual(map.values(), ['alpha', 'beta', 'gamma']);
+});
+
+test('entries with values', t => {
+ const map = new ChainedMap();
+
+ map.set('a', 'alpha');
+ map.set('b', 'beta');
+ map.set('c', 'gamma');
+
+ t.deepEqual(map.entries(), { a: 'alpha', b: 'beta', c: 'gamma'});
+});
+
+test('entries with no values', t => {
+ const map = new ChainedMap();
+
+ t.is(map.entries(), undefined);
+});
+
+test('merge with no values', t => {
+ const map = new ChainedMap();
+ const obj = { a: 'alpha', b: 'beta', c: 'gamma'};
+
+ t.is(map.merge(obj), map);
+ t.deepEqual(map.entries(), obj);
+});
+
+test('merge with existing values', t => {
+ const map = new ChainedMap();
+ const obj = { a: 'alpha', b: 'beta', c: 'gamma'};
+
+ map.set('d', 'delta');
+
+ t.is(map.merge(obj), map);
+ t.deepEqual(map.entries(), { a: 'alpha', b: 'beta', c: 'gamma', d: 'delta' });
+});
+
+test('merge with overriding values', t => {
+ const map = new ChainedMap();
+ const obj = { a: 'alpha', b: 'beta', c: 'gamma'};
+
+ map.set('b', 'delta');
+
+ t.is(map.merge(obj), map);
+ t.deepEqual(map.entries(), { a: 'alpha', b: 'beta', c: 'gamma' });
+});
diff --git a/test/ChainedSet.js b/test/ChainedSet.js
new file mode 100644
index 0000000..a02a1ec
--- /dev/null
+++ b/test/ChainedSet.js
@@ -0,0 +1,97 @@
+import test from 'ava';
+import ChainedSet from '../src/ChainedSet';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const set = new ChainedSet(parent);
+
+ t.is(set.end(), parent);
+});
+
+test('creates a backing Set', t => {
+ const set = new ChainedSet();
+
+ t.true(set.collection instanceof Set);
+});
+
+test('add', t => {
+ const set = new ChainedSet();
+
+ t.is(set.add('alpha'), set);
+ t.true(set.collection.has('alpha'));
+ t.is(set.collection.size, 1);
+});
+
+test('prepend', t => {
+ const set = new ChainedSet();
+
+ set.add('alpha');
+
+ t.is(set.prepend('beta'), set);
+ t.true(set.collection.has('beta'));
+ t.deepEqual([...set.collection], ['beta', 'alpha']);
+});
+
+test('clear', t => {
+ const set = new ChainedSet();
+
+ set.add('alpha');
+ set.add('beta');
+ set.add('gamma');
+
+ t.is(set.collection.size, 3);
+ t.is(set.clear(), set);
+ t.is(set.collection.size, 0);
+});
+
+test('delete', t => {
+ const set = new ChainedSet();
+
+ set.add('alpha');
+ set.add('beta');
+ set.add('gamma');
+
+ t.is(set.delete('beta'), set);
+ t.is(set.collection.size, 2);
+ t.false(set.collection.has('beta'));
+});
+
+test('has', t => {
+ const set = new ChainedSet();
+
+ set.add('alpha');
+ set.add('beta');
+ set.add('gamma');
+
+ t.true(set.has('beta'));
+ t.false(set.has('delta'));
+ t.is(set.has('beta'), set.collection.has('beta'));
+});
+
+test('values', t => {
+ const set = new ChainedSet();
+
+ set.add('alpha');
+ set.add('beta');
+ set.add('gamma');
+
+ t.deepEqual(set.values(), ['alpha', 'beta', 'gamma']);
+});
+
+test('merge with no values', t => {
+ const set = new ChainedSet();
+ const arr = ['alpha', 'beta', 'gamma'];
+
+ t.is(set.merge(arr), set);
+ t.deepEqual(set.values(), arr);
+});
+
+test('merge with existing values', t => {
+ const set = new ChainedSet();
+ const arr = ['alpha', 'beta', 'gamma'];
+
+ set.add('delta');
+
+ t.is(set.merge(arr), set);
+ t.deepEqual(set.values(), ['delta', 'alpha', 'beta', 'gamma']);
+});
diff --git a/test/Config.js b/test/Config.js
new file mode 100644
index 0000000..0d2cb25
--- /dev/null
+++ b/test/Config.js
@@ -0,0 +1,171 @@
+import test from 'ava';
+import Config from '../src/Config';
+import { validate } from 'webpack';
+
+class StringifyPlugin {
+ constructor(...args) {
+ this.values = args;
+ }
+
+ apply() {
+ return JSON.stringify(this.values);
+ }
+}
+
+test('is ChainedMap', t => {
+ const config = new Config();
+
+ config.set('a', 'alpha');
+
+ t.is(config.options.get('a'), 'alpha');
+});
+
+test('shorthand methods', t => {
+ const config = new Config();
+ const obj = {};
+
+ config.shorthands.map(method => {
+ obj[method] = 'alpha';
+ t.is(config[method]('alpha'), config);
+ });
+
+ t.deepEqual(config.entries(), obj);
+});
+
+test('node', t => {
+ const config = new Config();
+ const instance = config.node
+ .set('__dirname', 'mock')
+ .set('__filename', 'mock')
+ .end();
+
+ t.is(instance, config);
+ t.deepEqual(config.node.entries(), { __dirname: 'mock', __filename: 'mock' });
+});
+
+test('entry', t => {
+ const config = new Config();
+
+ config.entry('index')
+ .add('babel-polyfill')
+ .add('src/index.js');
+
+ t.true(config.entryPoints.has('index'));
+ t.deepEqual(config.entryPoints.get('index').values(), ['babel-polyfill', 'src/index.js']);
+});
+
+test('plugin empty', t => {
+ const config = new Config();
+ const instance = config.plugin('stringify', StringifyPlugin);
+
+ t.is(instance, config);
+ t.true(config.plugins.has('stringify'));
+ t.deepEqual(config.plugins.get('stringify').args, []);
+});
+
+test('plugin with args', t => {
+ const config = new Config();
+ const instance = config.plugin('stringify', StringifyPlugin, 'alpha', 'beta');
+
+ t.is(instance, config);
+ t.true(config.plugins.has('stringify'));
+ t.deepEqual(config.plugins.get('stringify').args, ['alpha', 'beta']);
+});
+
+test('toConfig empty', t => {
+ const config = new Config();
+
+ t.deepEqual(config.toConfig(), {});
+});
+
+test('toConfig with values', t => {
+ const config = new Config();
+
+ config
+ .output
+ .path('build')
+ .end()
+ .node
+ .set('__dirname', 'mock')
+ .end()
+ .target('node')
+ .plugin('stringify', StringifyPlugin)
+ .module
+ .rule('compile')
+ .include('alpha', 'beta')
+ .exclude('alpha', 'beta')
+ .post()
+ .pre()
+ .test(/\.js$/)
+ .loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ t.deepEqual(config.toConfig(), {
+ node: {
+ __dirname: 'mock'
+ },
+ output: {
+ path: 'build'
+ },
+ target: 'node',
+ plugins: [new StringifyPlugin()],
+ module: {
+ rules: [{
+ include: ['alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ enforce: 'pre',
+ test: /\.js$/,
+ use: [{
+ loader: 'babel-loader',
+ options: { presets: ['alpha'] }
+ }]
+ }]
+ }
+ });
+});
+
+test('validate empty', t => {
+ const config = new Config();
+ const errors = validate(config.toConfig());
+
+ t.is(errors.length, 1);
+});
+
+test('validate with entry', t => {
+ const config = new Config();
+
+ config.entry('index').add('src/index.js');
+
+ const errors = validate(config.toConfig());
+
+ t.is(errors.length, 0);
+});
+
+test('validate with values', t => {
+ const config = new Config();
+
+ config
+ .entry('index')
+ .add('babel-polyfill')
+ .add('src/index.js')
+ .end()
+ .output
+ .path('build')
+ .end()
+ .node
+ .set('__dirname', 'mock')
+ .end()
+ .target('node')
+ .plugin('stringify', StringifyPlugin)
+ .module
+ .rule('compile')
+ .include('alpha', 'beta')
+ .exclude('alpha', 'beta')
+ .post()
+ .pre()
+ .test(/\.js$/)
+ .loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ const errors = validate(config.toConfig());
+
+ t.is(errors.length, 0);
+});
diff --git a/test/DevServer.js b/test/DevServer.js
new file mode 100644
index 0000000..aec9ca5
--- /dev/null
+++ b/test/DevServer.js
@@ -0,0 +1,22 @@
+import test from 'ava';
+import DevServer from '../src/DevServer';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const devServer = new DevServer(parent);
+
+ t.is(devServer.end(), parent);
+});
+
+test('shorthand methods', t => {
+ const devServer = new DevServer();
+ const obj = {};
+
+ devServer.shorthands.map(method => {
+ obj[method] = 'alpha';
+ t.is(devServer[method]('alpha'), devServer);
+ });
+
+ t.deepEqual(devServer.entries(), obj);
+});
+
diff --git a/test/Loader.js b/test/Loader.js
new file mode 100644
index 0000000..5b5278a
--- /dev/null
+++ b/test/Loader.js
@@ -0,0 +1,13 @@
+import test from 'ava';
+import Loader from '../src/Loader';
+
+test('tap', t => {
+ const loader = new Loader('babel-loader', { presets: ['alpha'] });
+
+ loader.tap(options => {
+ t.deepEqual(options, { presets: ['alpha'] });
+ return { presets: ['beta'] };
+ });
+
+ t.deepEqual(loader.options, { presets: ['beta'] });
+});
diff --git a/test/Module.js b/test/Module.js
new file mode 100644
index 0000000..9cbfa0f
--- /dev/null
+++ b/test/Module.js
@@ -0,0 +1,39 @@
+import test from 'ava';
+import Module from '../src/Module';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const module = new Module(parent);
+
+ t.is(module.end(), parent);
+});
+
+test('is ChainedMap', t => {
+ const module = new Module();
+
+ module.set('a', 'alpha');
+
+ t.is(module.get('a'), 'alpha');
+});
+
+test('rule', t => {
+ const module = new Module();
+ const instance = module.rule('compile').end();
+
+ t.is(instance, module);
+ t.true(module.rules.has('compile'));
+});
+
+test('toConfig empty', t => {
+ const module = new Module();
+
+ t.deepEqual(module.toConfig(), {});
+});
+
+test('toConfig with values', t => {
+ const module = new Module();
+
+ module.rule('compile').test(/\.js$/);
+
+ t.deepEqual(module.toConfig(), { rules: [{ test: /\.js$/ }] });
+});
diff --git a/test/Output.js b/test/Output.js
new file mode 100644
index 0000000..b1a2c31
--- /dev/null
+++ b/test/Output.js
@@ -0,0 +1,21 @@
+import test from 'ava';
+import Output from '../src/Output';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const output = new Output(parent);
+
+ t.is(output.end(), parent);
+});
+
+test('shorthand methods', t => {
+ const output = new Output();
+ const obj = {};
+
+ output.shorthands.map(method => {
+ obj[method] = 'alpha';
+ t.is(output[method]('alpha'), output);
+ });
+
+ t.deepEqual(output.entries(), obj);
+});
diff --git a/test/Plugin.js b/test/Plugin.js
new file mode 100644
index 0000000..d31ebae
--- /dev/null
+++ b/test/Plugin.js
@@ -0,0 +1,56 @@
+import test from 'ava';
+import Plugin from '../src/Plugin';
+
+class StringifyPlugin {
+ constructor(...args) {
+ this.values = args;
+ }
+
+ apply() {
+ return JSON.stringify(this.values);
+ }
+}
+
+test('tap empty', t => {
+ const plugin = new Plugin(StringifyPlugin);
+
+ plugin.tap(args => {
+ t.deepEqual(args, []);
+ return ['alpha', 'beta'];
+ });
+
+ t.deepEqual(plugin.args, ['alpha', 'beta']);
+});
+
+test('tap with values', t => {
+ const plugin = new Plugin(StringifyPlugin, ['alpha']);
+
+ plugin.tap(args => {
+ t.deepEqual(args, ['alpha']);
+ return [...args, 'beta'];
+ });
+
+ t.deepEqual(plugin.args, ['alpha', 'beta']);
+});
+
+test('init empty', t => {
+ const plugin = new Plugin(StringifyPlugin);
+ const instance = plugin.init(plugin.plugin, plugin.args);
+
+ t.true(instance instanceof StringifyPlugin);
+});
+
+test('init with values', t => {
+ const plugin = new Plugin(StringifyPlugin, ['alpha', 'beta']);
+ const instance = plugin.init(plugin.plugin, plugin.args);
+
+ t.true(instance instanceof StringifyPlugin);
+ t.deepEqual(instance.values, plugin.args);
+});
+
+test('inject', t => {
+ const plugin = new Plugin(StringifyPlugin, ['alpha', 'beta']);
+
+ plugin.inject((plugin, args) => new StringifyPlugin('gamma'));
+ t.deepEqual(plugin.init(plugin.plugin, plugin.args).values, ['gamma']);
+});
diff --git a/test/Resolve.js b/test/Resolve.js
new file mode 100644
index 0000000..0f28bac
--- /dev/null
+++ b/test/Resolve.js
@@ -0,0 +1,85 @@
+import test from 'ava';
+import Resolve from '../src/Resolve';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const resolve = new Resolve(parent);
+
+ t.is(resolve.end(), parent);
+});
+
+test('shorthand methods', t => {
+ const resolve = new Resolve();
+ const obj = {};
+
+ resolve.shorthands.map(method => {
+ obj[method] = 'alpha';
+ t.is(resolve[method]('alpha'), resolve);
+ });
+
+ t.deepEqual(resolve.entries(), obj);
+});
+
+test('sets methods', t => {
+ const resolve = new Resolve();
+ const instance = resolve
+ .modules.add('src').end()
+ .extensions.add('.js').end();
+
+ t.is(instance, resolve);
+});
+
+test('toConfig empty', t => {
+ const resolve = new Resolve();
+
+ t.deepEqual(resolve.toConfig(), {});
+});
+
+test('toConfig with values', t => {
+ const resolve = new Resolve();
+
+ resolve
+ .modules.add('src').end()
+ .extensions.add('.js').end()
+ .alias.set('React', 'src/react');
+
+ t.deepEqual(resolve.toConfig(), {
+ modules: ['src'],
+ extensions: ['.js'],
+ alias: { React: 'src/react' }
+ });
+});
+
+test('merge empty', t => {
+ const resolve = new Resolve();
+ const obj = {
+ modules: ['src'],
+ extensions: ['.js'],
+ alias: { React: 'src/react' }
+ };
+ const instance = resolve.merge(obj);
+
+ t.is(instance, resolve);
+ t.deepEqual(resolve.toConfig(), obj);
+});
+
+test('merge with values', t => {
+ const resolve = new Resolve();
+
+ resolve
+ .modules.add('src').end()
+ .extensions.add('.js').end()
+ .alias.set('React', 'src/react');
+
+ resolve.merge({
+ modules: ['dist'],
+ extensions: ['.jsx'],
+ alias: { ReactDOM: 'src/react-dom' }
+ });
+
+ t.deepEqual(resolve.toConfig(), {
+ modules: ['src', 'dist'],
+ extensions: ['.js', '.jsx'],
+ alias: { React: 'src/react', ReactDOM: 'src/react-dom' }
+ });
+});
diff --git a/test/ResolveLoader.js b/test/ResolveLoader.js
new file mode 100644
index 0000000..66a1fb2
--- /dev/null
+++ b/test/ResolveLoader.js
@@ -0,0 +1,65 @@
+import test from 'ava';
+import ResolveLoader from '../src/ResolveLoader';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const resolveLoader = new ResolveLoader(parent);
+
+ t.is(resolveLoader.end(), parent);
+});
+
+test('sets methods', t => {
+ const resolveLoader = new ResolveLoader();
+ const instance = resolveLoader.modules.add('src').end();
+
+ t.is(instance, resolveLoader);
+});
+
+test('toConfig empty', t => {
+ const resolveLoader = new ResolveLoader();
+
+ t.deepEqual(resolveLoader.toConfig(), {});
+});
+
+test('toConfig with values', t => {
+ const resolveLoader = new ResolveLoader();
+
+ resolveLoader
+ .modules.add('src').end()
+ .set('moduleExtensions', ['-loader']);
+
+ t.deepEqual(resolveLoader.toConfig(), {
+ modules: ['src'],
+ moduleExtensions: ['-loader']
+ });
+});
+
+test('merge empty', t => {
+ const resolveLoader = new ResolveLoader();
+ const obj = {
+ modules: ['src'],
+ moduleExtensions: ['-loader']
+ };
+ const instance = resolveLoader.merge(obj);
+
+ t.is(instance, resolveLoader);
+ t.deepEqual(resolveLoader.toConfig(), obj);
+});
+
+test('merge with values', t => {
+ const resolveLoader = new ResolveLoader();
+
+ resolveLoader
+ .modules.add('src').end()
+ .moduleExtensions.add('-loader');
+
+ resolveLoader.merge({
+ modules: ['dist'],
+ moduleExtensions: ['-fake']
+ });
+
+ t.deepEqual(resolveLoader.toConfig(), {
+ modules: ['src', 'dist'],
+ moduleExtensions: ['-loader', '-fake']
+ });
+});
diff --git a/test/Rule.js b/test/Rule.js
new file mode 100644
index 0000000..7001852
--- /dev/null
+++ b/test/Rule.js
@@ -0,0 +1,177 @@
+import test from 'ava';
+import Rule from '../src/Rule';
+import merge from 'deepmerge';
+
+test('is Chainable', t => {
+ const parent = { parent: true };
+ const rule = new Rule(parent);
+
+ t.is(rule.end(), parent);
+});
+
+test('create loader', t => {
+ const rule = new Rule();
+ const instance = rule.loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ t.is(instance, rule);
+ t.true(rule.loaders.has('babel'));
+ t.is(rule.loaders.get('babel').loader, 'babel-loader');
+ t.deepEqual(rule.loaders.get('babel').options, { presets: ['alpha'] });
+});
+
+test('override loader', t => {
+ const rule = new Rule();
+ const instance = rule.loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ t.is(instance, rule);
+
+ rule.loader('babel', options => {
+ t.deepEqual(options, { presets: ['alpha'] });
+
+ return merge(options, { presets: ['beta'] });
+ });
+
+ t.is(rule.loaders.get('babel').loader, 'babel-loader');
+ t.deepEqual(rule.loaders.get('babel').options, { presets: ['alpha', 'beta'] });
+});
+
+test('test', t => {
+ const rule = new Rule();
+ const instance = rule.test(/\.js?/);
+
+ t.is(instance, rule);
+ t.deepEqual(rule.get('test'), /\.js?/);
+});
+
+test('pre', t => {
+ const rule = new Rule();
+ const instance = rule.pre();
+
+ t.is(instance, rule);
+ t.deepEqual(rule.get('enforce'), 'pre');
+});
+
+test('post', t => {
+ const rule = new Rule();
+ const instance = rule.post();
+
+ t.is(instance, rule);
+ t.deepEqual(rule.get('enforce'), 'post');
+});
+
+test('include', t => {
+ const rule = new Rule();
+ const instance = rule.include('alpha', 'beta');
+
+ t.is(instance, rule);
+ t.deepEqual([...rule._include], ['alpha', 'beta']);
+});
+
+test('exclude', t => {
+ const rule = new Rule();
+ const instance = rule.exclude('alpha', 'beta');
+
+ t.is(instance, rule);
+ t.deepEqual([...rule._exclude], ['alpha', 'beta']);
+});
+
+test('toConfig empty', t => {
+ const rule = new Rule();
+
+ t.deepEqual(rule.toConfig(), {});
+});
+
+test('toConfig with values', t => {
+ const rule = new Rule();
+
+ rule
+ .include('alpha', 'beta')
+ .exclude('alpha', 'beta')
+ .post()
+ .pre()
+ .test(/\.js$/)
+ .loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ t.deepEqual(rule.toConfig(), {
+ test: /\.js$/,
+ enforce: 'pre',
+ include: ['alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ use: [{
+ loader: 'babel-loader',
+ options: {
+ presets: ['alpha']
+ }
+ }]
+ });
+});
+
+test('merge empty', t => {
+ const rule = new Rule();
+ const obj = {
+ enforce: 'pre',
+ test: /\.js$/,
+ include: ['alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ loader: {
+ babel: {
+ loader: 'babel-loader',
+ options: {
+ presets: ['alpha']
+ }
+ }
+ }
+ };
+ const instance = rule.merge(obj);
+
+ t.is(instance, rule);
+ t.deepEqual(rule.toConfig(), {
+ enforce: 'pre',
+ test: /\.js$/,
+ include: ['alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ use: [{
+ loader: 'babel-loader',
+ options: {
+ presets: ['alpha']
+ }
+ }]
+ });
+});
+
+test('merge with values', t => {
+ const rule = new Rule();
+
+ rule
+ .test(/\.js$/)
+ .post()
+ .include('gamma', 'delta')
+ .loader('babel', 'babel-loader', { presets: ['alpha'] });
+
+ rule.merge({
+ test: /\.jsx$/,
+ enforce: 'pre',
+ include: ['alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ loader: {
+ babel: {
+ options: {
+ presets: ['beta']
+ }
+ }
+ }
+ });
+
+ t.deepEqual(rule.toConfig(), {
+ test: /\.jsx$/,
+ enforce: 'pre',
+ include: ['gamma', 'delta', 'alpha', 'beta'],
+ exclude: ['alpha', 'beta'],
+ use: [{
+ loader: 'babel-loader',
+ options: {
+ presets: ['alpha', 'beta']
+ }
+ }]
+ });
+});
diff --git a/yarn.lock b/yarn.lock
index b5c14e2..9dae63a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,3274 @@
# yarn lockfile v1
+"@ava/babel-preset-stage-4@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.0.0.tgz#a613b5e152f529305422546b072d47facfb26291"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.8.0"
+ babel-plugin-syntax-trailing-function-commas "^6.20.0"
+ babel-plugin-transform-async-to-generator "^6.16.0"
+ babel-plugin-transform-es2015-destructuring "^6.19.0"
+ babel-plugin-transform-es2015-function-name "^6.9.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
+ babel-plugin-transform-es2015-parameters "^6.21.0"
+ babel-plugin-transform-es2015-spread "^6.8.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.8.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.11.0"
+ babel-plugin-transform-exponentiation-operator "^6.8.0"
+ package-hash "^1.2.0"
+
+"@ava/babel-preset-transform-test-files@^2.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@ava/babel-preset-transform-test-files/-/babel-preset-transform-test-files-2.0.1.tgz#d75232cc6d71dc9c7eae4b76a9004fd81501d0c1"
+ dependencies:
+ babel-plugin-ava-throws-helper "^1.0.0"
+ babel-plugin-espower "^2.3.2"
+ package-hash "^1.2.0"
+
+"@ava/pretty-format@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@ava/pretty-format/-/pretty-format-1.1.0.tgz#d0a57d25eb9aeab9643bdd1a030642b91c123e28"
+ dependencies:
+ ansi-styles "^2.2.1"
+ esutils "^2.0.2"
+
+abbrev@1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+
+acorn-dynamic-import@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ dependencies:
+ acorn "^4.0.3"
+
+acorn@^4.0.3, acorn@^4.0.4:
+ version "4.0.11"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0"
+
+ajv-keywords@^1.1.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0, ajv@^4.9.1:
+ version "4.11.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.4.tgz#ebf3a55d4b132ea60ff5847ae85d2ef069960b45"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+ansi-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
+ dependencies:
+ string-width "^1.0.1"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+aproba@^1.0.3:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
+
+are-we-there-yet@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
+ dependencies:
+ delegates "^1.0.0"
+ readable-stream "^2.0.0 || ^1.1.13"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-exclude@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/arr-exclude/-/arr-exclude-1.0.0.tgz#dfc7c2e552a270723ccda04cf3128c8cbfe5c631"
+
+arr-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
+
+array-differ@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1, array-uniq@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asn1.js@^4.0.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert@^1.1.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ dependencies:
+ util "0.10.3"
+
+async-each@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+
+async@^2.1.2:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc"
+ dependencies:
+ lodash "^4.14.0"
+
+async@~0.2.6:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+auto-bind@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-1.1.0.tgz#93b864dc7ee01a326281775d5c75ca0a751e5961"
+
+ava-init@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ava-init/-/ava-init-0.2.0.tgz#9304c8b4c357d66e3dfdae1fbff47b1199d5c55d"
+ dependencies:
+ arr-exclude "^1.0.0"
+ execa "^0.5.0"
+ has-yarn "^1.0.0"
+ read-pkg-up "^2.0.0"
+ write-pkg "^2.0.0"
+
+ava@^0.18.2:
+ version "0.18.2"
+ resolved "https://registry.yarnpkg.com/ava/-/ava-0.18.2.tgz#79253d1636077034a2780bb55b5c3e6c3d7f312f"
+ dependencies:
+ "@ava/babel-preset-stage-4" "^1.0.0"
+ "@ava/babel-preset-transform-test-files" "^2.0.0"
+ "@ava/pretty-format" "^1.1.0"
+ arr-flatten "^1.0.1"
+ array-union "^1.0.1"
+ array-uniq "^1.0.2"
+ arrify "^1.0.0"
+ auto-bind "^1.1.0"
+ ava-init "^0.2.0"
+ babel-code-frame "^6.16.0"
+ babel-core "^6.17.0"
+ bluebird "^3.0.0"
+ caching-transform "^1.0.0"
+ chalk "^1.0.0"
+ chokidar "^1.4.2"
+ clean-stack "^1.1.1"
+ clean-yaml-object "^0.1.0"
+ cli-cursor "^2.1.0"
+ cli-spinners "^1.0.0"
+ cli-truncate "^0.2.0"
+ co-with-promise "^4.6.0"
+ code-excerpt "^2.1.0"
+ common-path-prefix "^1.0.0"
+ convert-source-map "^1.2.0"
+ core-assert "^0.2.0"
+ currently-unhandled "^0.4.1"
+ debug "^2.2.0"
+ diff "^3.0.1"
+ dot-prop "^4.1.0"
+ empower-core "^0.6.1"
+ equal-length "^1.0.0"
+ figures "^2.0.0"
+ find-cache-dir "^0.1.1"
+ fn-name "^2.0.0"
+ get-port "^2.1.0"
+ globby "^6.0.0"
+ has-flag "^2.0.0"
+ ignore-by-default "^1.0.0"
+ indent-string "^3.0.0"
+ is-ci "^1.0.7"
+ is-generator-fn "^1.0.0"
+ is-obj "^1.0.0"
+ is-observable "^0.2.0"
+ is-promise "^2.1.0"
+ jest-snapshot "^18.1.0"
+ last-line-stream "^1.0.0"
+ lodash.debounce "^4.0.3"
+ lodash.difference "^4.3.0"
+ lodash.flatten "^4.2.0"
+ lodash.isequal "^4.5.0"
+ loud-rejection "^1.2.0"
+ matcher "^0.1.1"
+ max-timeout "^1.0.0"
+ md5-hex "^2.0.0"
+ meow "^3.7.0"
+ ms "^0.7.1"
+ multimatch "^2.1.0"
+ observable-to-promise "^0.4.0"
+ option-chain "^0.1.0"
+ package-hash "^1.2.0"
+ pkg-conf "^2.0.0"
+ plur "^2.0.0"
+ pretty-ms "^2.0.0"
+ require-precompiled "^0.1.0"
+ resolve-cwd "^1.0.0"
+ slash "^1.0.0"
+ source-map-support "^0.4.0"
+ stack-utils "^1.0.0"
+ strip-ansi "^3.0.1"
+ strip-bom-buf "^1.0.0"
+ time-require "^0.1.2"
+ unique-temp-dir "^1.0.0"
+ update-notifier "^1.0.0"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-code-frame@^6.16.0, babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@^6.17.0, babel-core@^6.23.0:
+ version "6.23.1"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.23.1.tgz#c143cb621bb2f621710c220c5d579d15b8a442df"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.23.0"
+ babel-helpers "^6.23.0"
+ babel-messages "^6.23.0"
+ babel-register "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.23.0"
+ babel-traverse "^6.23.1"
+ babel-types "^6.23.0"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.1.0, babel-generator@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.23.0.tgz#6b8edab956ef3116f79d8c84c5a3c05f32a74bc5"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.23.0"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+babel-helper-builder-binary-assignment-operator-visitor@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-call-delegate@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef"
+ dependencies:
+ babel-helper-hoist-variables "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-explode-assignable-expression@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-function-name@^6.22.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.23.0.tgz#25742d67175c8903dbe4b6cb9d9e1fcb8dcf23a6"
+ dependencies:
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.23.0"
+ babel-traverse "^6.23.0"
+ babel-types "^6.23.0"
+
+babel-helper-get-function-arity@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-hoist-variables@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helper-regex@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+ lodash "^4.2.0"
+
+babel-helper-remap-async-to-generator@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383"
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.22.0"
+ babel-traverse "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-helpers@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.23.0"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-ava-throws-helper@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-1.0.0.tgz#8fe6e79d2fd19838b5c3649f89cfb03fd563e241"
+ dependencies:
+ babel-template "^6.7.0"
+ babel-types "^6.7.2"
+
+babel-plugin-check-es2015-constants@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-espower@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-2.3.2.tgz#5516b8fcdb26c9f0e1d8160749f6e4c65e71271e"
+ dependencies:
+ babel-generator "^6.1.0"
+ babylon "^6.1.0"
+ call-matcher "^1.0.0"
+ core-js "^2.0.0"
+ espower-location-detector "^1.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.1.1"
+
+babel-plugin-syntax-async-functions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+
+babel-plugin-syntax-exponentiation-operator@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+
+babel-plugin-syntax-trailing-function-commas@^6.20.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+
+babel-plugin-transform-async-to-generator@^6.16.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.22.0"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-destructuring@^6.19.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.9.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104"
+ dependencies:
+ babel-helper-function-name "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.18.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.23.0.tgz#cba7aa6379fb7ec99250e6d46de2973aaffa7b92"
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.23.0"
+ babel-types "^6.23.0"
+
+babel-plugin-transform-es2015-parameters@^6.21.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.23.0.tgz#3a2aabb70c8af945d5ce386f1a4250625a83ae3b"
+ dependencies:
+ babel-helper-call-delegate "^6.22.0"
+ babel-helper-get-function-arity "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.23.0"
+ babel-traverse "^6.23.0"
+ babel-types "^6.23.0"
+
+babel-plugin-transform-es2015-spread@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593"
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.11.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20"
+ dependencies:
+ babel-helper-regex "^6.22.0"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
+babel-plugin-transform-exponentiation-operator@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.22.0"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-strict-mode@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.22.0"
+
+babel-register@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.23.0.tgz#c9aa3d4cca94b51da34826c4a0f9e08145d74ff3"
+ dependencies:
+ babel-core "^6.23.0"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.22.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.22.0, babel-template@^6.23.0, babel-template@^6.7.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.23.0"
+ babel-types "^6.23.0"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
+ version "6.23.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.23.0"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.22.0, babel-types@^6.23.0, babel-types@^6.7.2:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babylon@^6.1.0, babylon@^6.11.0, babylon@^6.15.0:
+ version "6.16.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+base64-js@^1.0.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+big.js@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+
+binary-extensions@^1.0.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+
+block-stream@*:
+ version "0.0.9"
+ resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ dependencies:
+ inherits "~2.0.0"
+
+bluebird@^3.0.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+boxen@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
+ dependencies:
+ ansi-align "^1.1.0"
+ camelcase "^2.1.0"
+ chalk "^1.1.1"
+ cli-boxes "^1.0.0"
+ filled-array "^1.0.0"
+ object-assign "^4.0.1"
+ repeating "^2.0.0"
+ string-width "^1.0.1"
+ widest-line "^1.0.0"
+
+brace-expansion@^1.0.0:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
+ dependencies:
+ buffer-xor "^1.0.2"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.0.tgz#10773910c3c206d5420a46aad8694f820b85968f"
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ dependencies:
+ pako "~0.2.0"
+
+buf-compare@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a"
+
+buffer-shims@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+buffer-xor@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+
+buffer@^4.3.0:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-modules@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+
+caching-transform@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1"
+ dependencies:
+ md5-hex "^1.2.0"
+ mkdirp "^0.5.1"
+ write-file-atomic "^1.1.4"
+
+call-matcher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8"
+ dependencies:
+ core-js "^2.0.0"
+ deep-equal "^1.0.0"
+ espurify "^1.6.0"
+ estraverse "^4.0.0"
+
+call-signature@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0, camelcase@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chalk@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
+ dependencies:
+ ansi-styles "~1.0.0"
+ has-color "~0.1.0"
+ strip-ansi "~0.1.0"
+
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chokidar@^1.4.2, chokidar@^1.4.3:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
+ dependencies:
+ anymatch "^1.3.0"
+ async-each "^1.0.0"
+ glob-parent "^2.0.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^2.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ optionalDependencies:
+ fsevents "^1.0.0"
+
+ci-info@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
+ dependencies:
+ inherits "^2.0.1"
+
+clean-stack@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.1.1.tgz#a1b3711122df162df7c7cb9b3c0470f28cb58adb"
+
+clean-yaml-object@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+
+cli-cursor@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ dependencies:
+ restore-cursor "^2.0.0"
+
+cli-spinners@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a"
+
+cli-truncate@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+co-with-promise@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7"
+ dependencies:
+ pinkie-promise "^1.0.0"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-excerpt@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-2.1.0.tgz#5dcc081e88f4a7e3b554e9e35d7ef232d47f8147"
+ dependencies:
+ convert-to-spaces "^1.0.1"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+common-path-prefix@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+configstore@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
+ dependencies:
+ dot-prop "^3.0.0"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ object-assign "^4.0.1"
+ os-tmpdir "^1.0.0"
+ osenv "^0.1.0"
+ uuid "^2.0.1"
+ write-file-atomic "^1.1.2"
+ xdg-basedir "^2.0.0"
+
+console-browserify@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ dependencies:
+ date-now "^0.1.4"
+
+console-control-strings@^1.0.0, console-control-strings@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+
+convert-source-map@^1.1.0, convert-source-map@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3"
+
+convert-to-spaces@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715"
+
+core-assert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f"
+ dependencies:
+ buf-compare "^1.0.0"
+ is-error "^2.2.0"
+
+core-js@^2.0.0, core-js@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+create-ecdh@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-error-class@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad"
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ ripemd160 "^1.0.0"
+ sha.js "^2.3.6"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170"
+ dependencies:
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+
+cross-spawn@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+crypto-browserify@^3.11.0:
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-now@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+
+date-time@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07"
+
+debug@^2.1.1, debug@^2.2.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
+ dependencies:
+ ms "0.7.2"
+
+debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-equal@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+
+deep-extend@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+
deepmerge@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+delegates@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+
+des.js@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ dependencies:
+ repeating "^2.0.0"
+
+diff@^3.0.0, diff@^3.0.1:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+
+diffie-hellman@^5.0.0:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
+domain-browser@^1.1.1:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexer2@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ dependencies:
+ readable-stream "^2.0.2"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+elliptic@^6.0.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+
+empower-core@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.1.tgz#6c187f502fcef7554d57933396aac655483772b1"
+ dependencies:
+ call-signature "0.0.2"
+ core-js "^2.0.0"
+
+enhanced-resolve@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ object-assign "^4.0.1"
+ tapable "^0.2.5"
+
+equal-length@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c"
+
+errno@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+espower-location-detector@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5"
+ dependencies:
+ is-url "^1.2.1"
+ path-is-absolute "^1.0.0"
+ source-map "^0.5.0"
+ xtend "^4.0.0"
+
+espurify@^1.6.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226"
+ dependencies:
+ core-js "^2.0.0"
+
+estraverse@^4.0.0, estraverse@^4.1.1:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+events@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+
+evp_bytestokey@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
+ dependencies:
+ create-hash "^1.1.1"
+
+execa@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36"
+ dependencies:
+ cross-spawn "^4.0.0"
+ get-stream "^2.2.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+extend@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+figures@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+filename-regex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+filled-array@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
+
+find-cache-dir@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ dependencies:
+ commondir "^1.0.1"
+ mkdirp "^0.5.1"
+ pkg-dir "^1.0.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+fn-name@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
+
+for-in@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+fsevents@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
+ dependencies:
+ nan "^2.3.0"
+ node-pre-gyp "^0.6.29"
+
+fstream-ignore@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ dependencies:
+ fstream "^1.0.0"
+ inherits "2"
+ minimatch "^3.0.0"
+
+fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ dependencies:
+ graceful-fs "^4.1.2"
+ inherits "~2.0.0"
+ mkdirp ">=0.5 0"
+ rimraf "2"
+
+gauge@~2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
+ dependencies:
+ aproba "^1.0.3"
+ console-control-strings "^1.0.0"
+ has-unicode "^2.0.0"
+ object-assign "^4.1.0"
+ signal-exit "^3.0.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wide-align "^1.1.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-port@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/get-port/-/get-port-2.1.0.tgz#8783f9dcebd1eea495a334e1a6a251e78887ab1a"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stream@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+getpass@^0.1.1:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob@^7.0.3, glob@^7.0.5:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.0.0:
+ version "9.16.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80"
+
+globby@^6.0.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+got@^5.0.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+ dependencies:
+ create-error-class "^3.0.1"
+ duplexer2 "^0.1.4"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ node-status-codes "^1.0.0"
+ object-assign "^4.0.1"
+ parse-json "^2.1.0"
+ pinkie-promise "^2.0.0"
+ read-all-stream "^3.0.0"
+ readable-stream "^2.0.5"
+ timed-out "^3.0.0"
+ unzip-response "^1.0.2"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-validator@~4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-color@~0.1.0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+
+has-unicode@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+
+has-yarn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-1.0.0.tgz#89e25db604b725c8f5976fff0addc921b828a5a7"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
+ dependencies:
+ inherits "^2.0.1"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+hmac-drbg@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.0.tgz#3db471f45aae4a994a0688322171f51b8b91bee5"
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+hosted-git-info@^2.1.4:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+
+ieee754@^1.1.4:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+
+ignore-by-default@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+interpret@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
+
+invariant@^2.2.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+irregular-plurals@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ dependencies:
+ binary-extensions "^1.0.0"
+
+is-buffer@^1.0.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-ci@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+ dependencies:
+ ci-info "^1.0.0"
+
+is-dotfile@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-error@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c"
+
+is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-finite@^1.0.0, is-finite@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-generator-fn@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-observable@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2"
+ dependencies:
+ symbol-observable "^0.2.2"
+
+is-plain-obj@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+
+is-stream@^1.0.0, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-url@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
+
+is-utf8@^0.2.0, is-utf8@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+jest-diff@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-18.1.0.tgz#4ff79e74dd988c139195b365dc65d87f606f4803"
+ dependencies:
+ chalk "^1.1.3"
+ diff "^3.0.0"
+ jest-matcher-utils "^18.1.0"
+ pretty-format "^18.1.0"
+
+jest-file-exists@^17.0.0:
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169"
+
+jest-matcher-utils@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz#1ac4651955ee2a60cef1e7fcc98cdfd773c0f932"
+ dependencies:
+ chalk "^1.1.3"
+ pretty-format "^18.1.0"
+
+jest-mock@^18.0.0:
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-18.0.0.tgz#5c248846ea33fa558b526f5312ab4a6765e489b3"
+
+jest-snapshot@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-18.1.0.tgz#55b96d2ee639c9bce76f87f2a3fd40b71c7a5916"
+ dependencies:
+ jest-diff "^18.1.0"
+ jest-file-exists "^17.0.0"
+ jest-matcher-utils "^18.1.0"
+ jest-util "^18.1.0"
+ natural-compare "^1.4.0"
+ pretty-format "^18.1.0"
+
+jest-util@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-18.1.0.tgz#3a99c32114ab17f84be094382527006e6d4bfc6a"
+ dependencies:
+ chalk "^1.1.1"
+ diff "^3.0.0"
+ graceful-fs "^4.1.6"
+ jest-file-exists "^17.0.0"
+ jest-mock "^18.0.0"
+ mkdirp "^0.5.1"
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+
+json-loader@^0.5.4:
+ version "0.5.4"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsprim@^1.2.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
+ dependencies:
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
+ dependencies:
+ is-buffer "^1.0.2"
+
+last-line-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/last-line-stream/-/last-line-stream-1.0.0.tgz#d1b64d69f86ff24af2d04883a2ceee14520a5600"
+ dependencies:
+ through2 "^2.0.0"
+
+latest-version@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
+ dependencies:
+ package-json "^2.0.0"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazy-req@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+
+loader-utils@^0.2.16:
+ version "0.2.17"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ dependencies:
+ big.js "^3.1.3"
+ emojis-list "^2.0.0"
+ json5 "^0.5.0"
+ object-assign "^4.0.1"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash.debounce@^4.0.3:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+
+lodash.difference@^4.3.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+
+lodash.flatten@^4.2.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+
+lodash@^4.14.0, lodash@^4.2.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0, loud-rejection@^1.2.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lowercase-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+
+lru-cache@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+ dependencies:
+ pseudomap "^1.0.1"
+ yallist "^2.0.0"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+matcher@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/matcher/-/matcher-0.1.2.tgz#ef20cbde64c24c50cc61af5b83ee0b1b8ff00101"
+ dependencies:
+ escape-string-regexp "^1.0.4"
+
+max-timeout@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/max-timeout/-/max-timeout-1.0.0.tgz#b68f69a2f99e0b476fd4cb23e2059ca750715e1f"
+
+md5-hex@^1.2.0, md5-hex@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4"
+ dependencies:
+ md5-o-matic "^0.1.1"
+
+md5-hex@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33"
+ dependencies:
+ md5-o-matic "^0.1.1"
+
+md5-o-matic@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3"
+
+memory-fs@^0.4.0, memory-fs@~0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+micromatch@^2.1.5:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+miller-rabin@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
+mime-db@~1.26.0:
+ version "1.26.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.14"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
+ dependencies:
+ mime-db "~1.26.0"
+
+mimic-fn@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+
+minimatch@^3.0.0, minimatch@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+ms@0.7.2, ms@^0.7.1:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
+multimatch@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
+ dependencies:
+ array-differ "^1.0.0"
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ minimatch "^3.0.0"
+
+nan@^2.3.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
+node-libs-browser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.1.4"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^1.0.0"
+ https-browserify "0.0.1"
+ os-browserify "^0.2.0"
+ path-browserify "0.0.0"
+ process "^0.11.0"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.0.5"
+ stream-browserify "^2.0.1"
+ stream-http "^2.3.1"
+ string_decoder "^0.10.25"
+ timers-browserify "^2.0.2"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.10.3"
+ vm-browserify "0.0.4"
+
+node-pre-gyp@^0.6.29:
+ version "0.6.33"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9"
+ dependencies:
+ mkdirp "~0.5.1"
+ nopt "~3.0.6"
+ npmlog "^4.0.1"
+ rc "~1.1.6"
+ request "^2.79.0"
+ rimraf "~2.5.4"
+ semver "~5.3.0"
+ tar "~2.2.1"
+ tar-pack "~3.3.0"
+
+node-status-codes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
+
+nopt@~3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+npmlog@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
+ dependencies:
+ are-we-there-yet "~1.1.2"
+ console-control-strings "~1.1.0"
+ gauge "~2.7.1"
+ set-blocking "~2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+observable-to-promise@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-0.4.0.tgz#28afe71645308f2d41d71f47ad3fece1a377e52b"
+ dependencies:
+ is-observable "^0.2.0"
+ symbol-observable "^0.2.2"
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+once@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ dependencies:
+ wrappy "1"
+
+onetime@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.0.tgz#52aa8110e52fc5126ffc667bd8ec21c2ed209ce6"
+ dependencies:
+ mimic-fn "^1.0.0"
+
+option-chain@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/option-chain/-/option-chain-0.1.1.tgz#e9b811e006f1c0f54802f28295bfc8970f8dcfbd"
+ dependencies:
+ object-assign "^4.0.1"
+
+os-browserify@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@^0.1.0:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+package-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-1.2.0.tgz#003e56cd57b736a6ed6114cc2b81542672770e44"
+ dependencies:
+ md5-hex "^1.3.0"
+
+package-json@^2.0.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
+ dependencies:
+ got "^5.0.0"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+parse-asn1@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23"
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.1.0, parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-ms@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-0.1.2.tgz#dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e"
+
+parse-ms@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d"
+
+path-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ dependencies:
+ pify "^2.0.0"
+
+pbkdf2@^3.0.3:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693"
+ dependencies:
+ create-hmac "^1.1.2"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670"
+ dependencies:
+ pinkie "^1.0.0"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-conf@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^2.0.0"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+plur@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156"
+
+plur@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
+ dependencies:
+ irregular-plurals "^1.0.0"
+
+prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pretty-format@^18.1.0:
+ version "18.1.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-18.1.0.tgz#fb65a86f7a7f9194963eee91865c1bcf1039e284"
+ dependencies:
+ ansi-styles "^2.2.1"
+
+pretty-ms@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-0.2.2.tgz#da879a682ff33a37011046f13d627f67c73b84f6"
+ dependencies:
+ parse-ms "^0.1.0"
+
+pretty-ms@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-2.1.0.tgz#4257c256df3fb0b451d6affaab021884126981dc"
+ dependencies:
+ is-finite "^1.0.1"
+ parse-ms "^1.0.0"
+ plur "^1.0.0"
+
+private@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+
+process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+process@^0.11.0:
+ version "0.11.9"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+
+pseudomap@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+public-encrypt@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+qs@~6.3.0:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d"
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+randombytes@^2.0.0, randombytes@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
+
+rc@^1.0.1, rc@^1.1.6, rc@~1.1.6:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-all-stream@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
+ dependencies:
+ pinkie-promise "^2.0.0"
+ readable-stream "^2.0.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readable-stream@~2.1.4:
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
+ dependencies:
+ buffer-shims "^1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~0.10.x"
+ util-deprecate "~1.0.1"
+
+readdirp@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ dependencies:
+ graceful-fs "^4.1.2"
+ minimatch "^3.0.2"
+ readable-stream "^2.0.2"
+ set-immediate-shim "^1.0.1"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+regenerate@^1.2.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+regexpu-core@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+registry-auth-token@^3.0.1:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b"
+ dependencies:
+ rc "^1.1.6"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ dependencies:
+ rc "^1.0.1"
+
+regjsgen@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+
+regjsparser@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ dependencies:
+ jsesc "~0.5.0"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request@^2.79.0:
+ version "2.80.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.80.0.tgz#8cc162d76d79381cdefdd3505d76b80b60589bd0"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.0"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+require-precompiled@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa"
+
+resolve-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f"
+ dependencies:
+ resolve-from "^2.0.0"
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+
+restore-cursor@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ dependencies:
+ onetime "^2.0.0"
+ signal-exit "^3.0.2"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+ version "2.5.4"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
+ dependencies:
+ glob "^7.0.5"
+
+ripemd160@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ dependencies:
+ semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@~5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+set-blocking@^2.0.0, set-blocking@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+set-immediate-shim@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+
+sha.js@^2.3.6:
+ version "2.4.8"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f"
+ dependencies:
+ inherits "^2.0.1"
+
+signal-exit@^3.0.0, signal-exit@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+sort-keys@^1.1.1, sort-keys@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-list-map@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
+
+source-map-support@^0.4.0, source-map-support@^0.4.2:
+ version "0.4.11"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
+ dependencies:
+ source-map "^0.5.3"
+
+source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1, source-map@~0.5.3:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+sshpk@^1.7.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.11.0.tgz#2d8d5ebb4a6fab28ffba37fa62a90f4a3ea59d77"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stack-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.0.tgz#2392cd8ddbd222492ed6c047960f7414b46c0f83"
+
+stream-browserify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-http@^2.3.1:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3"
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.1.0"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@^0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
+
+strip-bom-buf@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572"
+ dependencies:
+ is-utf8 "^0.2.1"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+supports-color@^3.1.0:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ dependencies:
+ has-flag "^1.0.0"
+
+symbol-observable@^0.2.2:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
+
+tapable@^0.2.5, tapable@~0.2.5:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
+
+tar-pack@~3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+ dependencies:
+ debug "~2.2.0"
+ fstream "~1.0.10"
+ fstream-ignore "~1.0.5"
+ once "~1.3.3"
+ readable-stream "~2.1.4"
+ rimraf "~2.5.1"
+ tar "~2.2.1"
+ uid-number "~0.0.6"
+
+tar@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ dependencies:
+ block-stream "*"
+ fstream "^1.0.2"
+ inherits "2"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+time-require@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98"
+ dependencies:
+ chalk "^0.4.0"
+ date-time "^0.1.1"
+ pretty-ms "^0.2.1"
+ text-table "^0.2.0"
+
+timed-out@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+
+timers-browserify@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ dependencies:
+ setimmediate "^1.0.4"
+
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+
+to-fast-properties@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
+
+tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ dependencies:
+ punycode "^1.4.1"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+uglify-js@^2.7.5:
+ version "2.8.5"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.5.tgz#ae9f5b143f4183d99a1dabb350e243fdc06641ed"
+ dependencies:
+ async "~0.2.6"
+ source-map "~0.5.1"
+ uglify-to-browserify "~1.0.0"
+ yargs "~3.10.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+uid-number@~0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+
+uid2@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
+
+unique-temp-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385"
+ dependencies:
+ mkdirp "^0.5.1"
+ os-tmpdir "^1.0.1"
+ uid2 "0.0.3"
+
+unzip-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+
+update-notifier@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
+ dependencies:
+ boxen "^0.6.0"
+ chalk "^1.0.0"
+ configstore "^2.0.0"
+ is-npm "^1.0.0"
+ latest-version "^2.0.0"
+ lazy-req "^1.1.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^2.0.0"
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ dependencies:
+ prepend-http "^1.0.1"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+util@0.10.3, util@^0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+uuid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ dependencies:
+ extsprintf "1.0.2"
+
+vm-browserify@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ dependencies:
+ indexof "0.0.1"
+
+watchpack@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87"
+ dependencies:
+ async "^2.1.2"
+ chokidar "^1.4.3"
+ graceful-fs "^4.1.2"
+
+webpack-sources@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.4.tgz#ccc2c817e08e5fa393239412690bb481821393cd"
+ dependencies:
+ source-list-map "~0.1.7"
+ source-map "~0.5.3"
+
+webpack@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.2.1.tgz#7bb1d72ae2087dd1a4af526afec15eed17dda475"
+ dependencies:
+ acorn "^4.0.4"
+ acorn-dynamic-import "^2.0.0"
+ ajv "^4.7.0"
+ ajv-keywords "^1.1.1"
+ async "^2.1.2"
+ enhanced-resolve "^3.0.0"
+ interpret "^1.0.0"
+ json-loader "^0.5.4"
+ loader-runner "^2.3.0"
+ loader-utils "^0.2.16"
+ memory-fs "~0.4.1"
+ mkdirp "~0.5.0"
+ node-libs-browser "^2.0.0"
+ source-map "^0.5.3"
+ supports-color "^3.1.0"
+ tapable "~0.2.5"
+ uglify-js "^2.7.5"
+ watchpack "^1.2.0"
+ webpack-sources "^0.1.4"
+ yargs "^6.0.0"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which@^1.2.9:
+ version "1.2.12"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
+ dependencies:
+ isexe "^1.1.1"
+
+wide-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
+ dependencies:
+ string-width "^1.0.1"
+
+widest-line@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^1.1.2, write-file-atomic@^1.1.4:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.0.0.tgz#0eaec981fcf9288dbc2806cbd26e06ab9bdca4ed"
+ dependencies:
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.1"
+ pify "^2.0.0"
+ sort-keys "^1.1.1"
+ write-file-atomic "^1.1.2"
+
+write-pkg@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-2.1.0.tgz#353aa44c39c48c21440f5c08ce6abd46141c9c08"
+ dependencies:
+ sort-keys "^1.1.2"
+ write-json-file "^2.0.0"
+
+xdg-basedir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
+ dependencies:
+ os-homedir "^1.0.0"
+
+xtend@^4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs@^6.0.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"