diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 00000000000..d57f1ff93ab --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,29 @@ +clone_depth: 10 + +version: "{build}" + +environment: + fast_finish: true + matrix: + - nodejs_version: "6" + platform: x86 + +build: off + +install: + - ps: Install-Product node $env:nodejs_version $env:platform + - npm install yarn -g + - yarn + - yarn add global codecov + +test_script: + - node --version + - npm --version + - yarn --version + - which yarn + - yarn prepare + - yarn lint + - yarn test:ci + +cache: + - node_modules -> appveyor.yml,package.json,yarn.lock diff --git a/.babelrc b/.babelrc index 36afa5aa994..8abaa6fdded 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,3 @@ { - "presets": ["es2015", "stage-3", "flow"] + "presets": ["env", "stage-3", "flow"] } diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 00000000000..f9766001cfb --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,15 @@ +comment: off + +parsers: + javascript: + enable_partials: yes + +coverage: + status: + project: + default: + threshold: 1% + if_not_found: success + patch: + default: + if_not_found: success diff --git a/.eslintignore b/.eslintignore index aa24f295da5..d37187d8e9d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,3 +2,4 @@ coverage test dist +docs diff --git a/.eslintrc.js b/.eslintrc.js index 0e0fbd62e1e..5aa8cf8e2a4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -66,7 +66,14 @@ module.exports = { } ], "node/no-unpublished-bin": "error", - "node/no-unpublished-require": "error", + "node/no-unpublished-require": [ + "error", + { + "allowModules": [ + "webpack" + ] + } + ], "eol-last": ["error", "always"], "newline-per-chained-call": "off", "node/process-exit-as-throw": "error" diff --git a/.gitignore b/.gitignore index b6ec97854f4..5719464f341 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -# External dependencies +# IDE folders +.idea # Mac OS X Finder .DS_Store @@ -13,7 +14,7 @@ npm-debug.* yarn-error.log # Jest Coverage -coverage +/coverage # Distribution Build dist diff --git a/.npmignore b/.npmignore index e5b2e46fb55..ebdca806b37 100644 --- a/.npmignore +++ b/.npmignore @@ -7,9 +7,12 @@ lib .vscode .editorconfig .eslintignore -__mocks__ __testfixtures__ *.test.js *.input.js types.js *.spec.js +docs +jsdoc.json +.appveyor.yml +.codecov.yml diff --git a/.travis.yml b/.travis.yml index 4e493cc75ec..40161397885 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,36 @@ language: node_js -node_js: - - "4" - - "5" - - "6" - - "stable" +matrix: + include: + - os: linux + node_js: "stable" + env: JOB_PART=lint + - os: linux + node_js: "stable" + env: JOB_PART=integration + - os: linux + node_js: "8" + env: JOB_PART=integration + - os: linux + node_js: "7" + env: JOB_PART=integration + - os: linux + node_js: "6" + env: JOB_PART=integration sudo: false notifications: email: false +install: + - yarn add global codecov + before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - - bash <(curl -s https://codecov.io/bash) -script: - - npm run prepublish - - npm run lint - - npm run test +after_success: + - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports" + +script: npm run travis:$JOB_PART diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32fe3246c98..5f318139e85 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,6 @@ In case you are suggesting a new feature, we will match your idea with our curre *Note: Node 6 or greater would be better for "best results".* * Fork the **webpack-cli** repo at [https://github.com/webpack/webpack-cli](https://github.com/webpack/webpack-cli). * `git clone && cd webpack-cli` -* Install the commit validator: `npm run install-commit-validator` ### Setup with npm * Install the dependencies: `npm install` diff --git a/MIGRATE.md b/MIGRATE.md index 84803a84c17..aff37bc6661 100644 --- a/MIGRATE.md +++ b/MIGRATE.md @@ -1,6 +1,6 @@ ## webpack-migrate -The `migrate` feature eases the transition from [version 1](http://webpack.github.io/docs/) to [version 2](https://gist.github.com/sokra/27b24881210b56bbaff7). `migrate` +The `migrate` feature eases the transition from [version 1](http://webpack.github.io/docs/) to [version 2](https://gist.github.com/sokra/27b24881210b56bbaff7). `migrate` also allows users to switch to the new version of webpack without having to extensively [refactor](https://webpack.js.org/guides/migrating/). ### Usage @@ -39,7 +39,7 @@ module.exports = { exclude: /node_modules/, loader: 'babel', query: { - presets: ['es2015'] + presets: ['env'] } }, { @@ -122,7 +122,7 @@ module.exports = { loader: 'babel-loader' }], options: { - presets: ['es2015'] + presets: ['env'] } }, { @@ -153,7 +153,7 @@ module.exports = { In summary, we can see the follow changes were made 1. The webpack schema for using loaders has changed - - `loaders` is now `module.rules` + - `loaders` is now `module.rules` - `query` is now `options` 1. All loaders now have to have the *loader* suffix, e.g. `babel` -> `babel-loader` diff --git a/README.md b/README.md index d15d1aa51d5..86d98b249af 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Build Status](https://travis-ci.org/webpack/webpack-cli.svg)](https://travis-ci.org/webpack/webpack-cli) +[![Build status](https://ci.appveyor.com/api/projects/status/c2a37nlrfv9mg64f?svg=true)](https://ci.appveyor.com/project/ev1stensberg/webpack-cli) [![Dependency Status](https://david-dm.org/webpack/webpack-cli.svg)](https://david-dm.org/webpack/webpack-cli) [![Code Climate](https://codeclimate.com/github/webpack/webpack-cli/badges/gpa.svg)](https://codeclimate.com/github/webpack/webpack-cli) [![chat on gitter](https://badges.gitter.im/webpack/webpack.svg)](https://gitter.im/webpack/webpack) @@ -28,3 +29,8 @@ The `init` feature allows users to get started with webpack, fast. Through scaff `webpack-cli init webpack-addons-` [Read more about scaffolding](SCAFFOLDING.md) + +## Contributing and Internal Documentation + +The webpack family welcomes any contributor, small or big. We are happy to elaborate, guide you through the source code and find issues you might want to work on! To get started have a look at our [documentation on contributing](CONTRIBUTING.md), or our [Internal Documentation]() + diff --git a/__mocks__/creator/validate-options.mock.js b/__mocks__/creator/validate-options.mock.js deleted file mode 100644 index e1db92d7382..00000000000 --- a/__mocks__/creator/validate-options.mock.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -const fs = require("fs"); -const path = require("path"); - -function getPath(part) { - return path.join(process.cwd(), part); -} - -function validateOptions(opts) { - return Object.keys(opts).forEach(location => { - let part = getPath(opts[location]); - try { - fs.readFileSync(part); - } catch (err) { - throw new Error("Did not find the file"); - } - }); -} - -module.exports = { - validateOptions -}; diff --git a/__mocks__/inquirer/resolve.mock.js b/__mocks__/inquirer/resolve.mock.js deleted file mode 100644 index dfd5b164117..00000000000 --- a/__mocks__/inquirer/resolve.mock.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -const path = require("path"); - -function mockPromise(value) { - const isValueAPromise = (value || {}).then; - const mockedPromise = { - then: function(callback) { - return mockPromise(callback(value)); - } - }; - - return isValueAPromise ? value : mockedPromise; -} -function spawnChild(pkg) { - return pkg; -} - -function getLoc(option) { - let packageModule = []; - option.filter(pkg => { - mockPromise(spawnChild(pkg)).then(() => { - try { - let loc = path.join("..", "..", "node_modules", pkg); - packageModule.push(loc); - } catch (err) { - throw new Error( - "Package wasn't validated correctly.." + "Submit an issue for", - pkg, - "if this persists" - ); - } - }); - return packageModule; - }); - return packageModule; -} - -module.exports = getLoc; diff --git a/bin/config-yargs.js b/bin/config-yargs.js index f7583091c1a..78a2f1ff7f5 100644 --- a/bin/config-yargs.js +++ b/bin/config-yargs.js @@ -19,7 +19,7 @@ module.exports = function(yargs) { describe: "Initializes a new webpack configuration or loads a" + "\n" + - "plugin if specified", + "addon if specified", group: INIT_GROUP }, migrate: { @@ -28,6 +28,28 @@ module.exports = function(yargs) { "Migrate your webpack configuration from webpack 1 to webpack 2", group: INIT_GROUP }, + add: { + type: "boolean", + describe: "Adds a webpack component to your configuration file", + group: INIT_GROUP + }, + /* + remove: { + type: "boolean", + describe: "Removes a webpack component to your configuration file", + group: INIT_GROUP + }, + update: { + type: "boolean", + describe: "Updates a webpack component to your configuration file", + group: INIT_GROUP + }, + make: { + type: "boolean", + describe: "Converts a webpack configuration to a makefile", + group: INIT_GROUP + }, + */ "generate-loader": { type: "boolean", describe: "Generates a new webpack loader project", @@ -38,7 +60,6 @@ module.exports = function(yargs) { describe: "Generates a new webpack plugin project", group: INIT_GROUP }, - config: { type: "string", describe: "Path to the config file", @@ -46,6 +67,15 @@ module.exports = function(yargs) { defaultDescription: "webpack.config.js or webpackfile.js", requiresArg: true }, + "config-register": { + type: "array", + alias: "r", + describe: + "Preload one or more modules before loading the webpack configuration", + group: CONFIG_GROUP, + defaultDescription: "module id or path", + requiresArg: true + }, "config-name": { type: "string", describe: "Name of the config to use", diff --git a/bin/convert-argv.js b/bin/convert-argv.js index 70866ebd965..bf247648b78 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -3,10 +3,8 @@ var fs = require("fs"); fs.existsSync = fs.existsSync || path.existsSync; var interpret = require("interpret"); var prepareOptions = require("./prepareOptions"); - module.exports = function(yargs, argv, convertOptions) { var options = []; - // Shortcuts if (argv.d) { argv.debug = true; @@ -27,7 +25,6 @@ module.exports = function(yargs, argv, convertOptions) { argv.mode = "production"; } } - var configFileLoaded = false; var configFiles = []; var extensions = Object.keys(interpret.extensions).sort(function(a, b) { @@ -85,7 +82,6 @@ module.exports = function(yargs, argv, convertOptions) { } } } - if (configFiles.length > 0) { var registerCompiler = function registerCompiler(moduleDescriptor) { if (moduleDescriptor) { @@ -108,7 +104,18 @@ module.exports = function(yargs, argv, convertOptions) { var requireConfig = function requireConfig(configPath) { var options = (function WEBPACK_OPTIONS() { - return require(configPath); + if (argv.configRegister && argv.configRegister.length) { + module.paths.unshift( + path.resolve(process.cwd(), "node_modules"), + process.cwd() + ); + argv.configRegister.forEach(dep => { + require(dep); + }); + return require(configPath); + } else { + return require(configPath); + } })(); options = prepareOptions(options, argv); return options; @@ -203,6 +210,7 @@ module.exports = function(yargs, argv, convertOptions) { } function processOptions(options) { + // eslint-disable-next-line no-unused-vars var noOutputFilenameDefined = !options.output || !options.output.filename; function ifArg(name, fn, init, finalize) { @@ -509,17 +517,7 @@ module.exports = function(yargs, argv, convertOptions) { }); ifBooleanArg("optimize-minimize", function() { - var UglifyJsPlugin = require("webpack/lib/optimize/UglifyJsPlugin"); var LoaderOptionsPlugin = require("webpack/lib/LoaderOptionsPlugin"); - addPlugin( - options, - new UglifyJsPlugin({ - sourceMap: - options.devtool && - (options.devtool.indexOf("sourcemap") >= 0 || - options.devtool.indexOf("source-map") >= 0) - }) - ); addPlugin( options, new LoaderOptionsPlugin({ @@ -554,35 +552,6 @@ module.exports = function(yargs, argv, convertOptions) { mapArgToBoolean("profile"); - if (noOutputFilenameDefined) { - ensureObject(options, "output"); - if (convertOptions && convertOptions.outputFilename) { - options.output.path = path.resolve( - path.dirname(convertOptions.outputFilename) - ); - options.output.filename = path.basename(convertOptions.outputFilename); - } else if (argv._.length > 0) { - options.output.filename = argv._.pop(); - options.output.path = path.resolve( - path.dirname(options.output.filename) - ); - options.output.filename = path.basename(options.output.filename); - } else if (configFileLoaded) { - throw new Error( - "'output.filename' is required, either in config file or as --output-filename" - ); - } else { - console.error( - "No configuration file found and no output filename configured via CLI option." - ); - console.error( - "A configuration file could be named 'webpack.config.js' in the current directory." - ); - console.error("Use --help to display the CLI options."); - process.exit(-1); // eslint-disable-line - } - } - if (argv._.length > 0) { if (Array.isArray(options.entry) || typeof options.entry === "string") { options.entry = { @@ -609,9 +578,9 @@ module.exports = function(yargs, argv, convertOptions) { if (fs.existsSync(resolved)) { addTo( "main", - `${resolved}${fs.statSync(resolved).isDirectory() - ? path.sep - : ""}` + `${resolved}${ + fs.statSync(resolved).isDirectory() ? path.sep : "" + }` ); } else { addTo("main", content); @@ -621,23 +590,5 @@ module.exports = function(yargs, argv, convertOptions) { } }); } - - if (!options.entry) { - if (configFileLoaded) { - console.error("Configuration file found but no entry configured."); - } else { - console.error( - "No configuration file found and no entry configured via CLI option." - ); - console.error( - "When using the CLI you need to provide at least two arguments: entry and output." - ); - console.error( - "A configuration file could be named 'webpack.config.js' in the current directory." - ); - } - console.error("Use --help to display the CLI options."); - process.exit(-1); // eslint-disable-line - } } }; diff --git a/bin/process-options.js b/bin/process-options.js index 92e4355ba85..c9f8434ae64 100644 --- a/bin/process-options.js +++ b/bin/process-options.js @@ -178,7 +178,7 @@ module.exports = function processOptions(yargs, argv) { if (argv.s) lastHash = null; } if (!options.watch && stats.hasErrors()) { - process.on("exit", function() { + process.on("exit", function(_) { process.exitCode = 2; }); } @@ -188,7 +188,7 @@ module.exports = function processOptions(yargs, argv) { var watchOptions = primaryOptions.watchOptions || primaryOptions.watch || {}; if (watchOptions.stdin) { - process.stdin.on("end", function() { + process.stdin.on("end", function(_) { process.exitCode = 0; }); process.stdin.resume(); diff --git a/bin/webpack.js b/bin/webpack.js index 02d26ee3473..9e2af407ec8 100755 --- a/bin/webpack.js +++ b/bin/webpack.js @@ -4,7 +4,7 @@ MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ - +require("v8-compile-cache"); var resolveCwd = require("resolve-cwd"); // Local version replace global one var localCLI = resolveCwd.silent("webpack-cli/bin/webpack"); @@ -13,11 +13,22 @@ var ErrorHelpers = require("webpack/lib/ErrorHelpers"); const NON_COMPILATION_ARGS = [ "init", "migrate", + "add", + /* + "remove", + "update", + "make", + */ + "serve", "generate-loader", "generate-plugin" ]; const NON_COMPILATION_CMD = process.argv.find(arg => { + if (arg === "serve") { + global.process.argv = global.process.argv.filter(a => a !== "serve"); + process.argv = global.process.argv; + } return NON_COMPILATION_ARGS.find(a => a === arg); }); @@ -425,7 +436,7 @@ yargs.parse(process.argv.slice(2), (err, argv, output) => { var watchOptions = firstOptions.watchOptions || firstOptions.watch || options.watch || {}; if (watchOptions.stdin) { - process.stdin.on("end", function() { + process.stdin.on("end", function(_) { process.exit(); // eslint-disable-line }); process.stdin.resume(); diff --git a/docs/AddGenerator.html b/docs/AddGenerator.html new file mode 100644 index 00000000000..aa2a6d48da1 --- /dev/null +++ b/docs/AddGenerator.html @@ -0,0 +1,201 @@ + + + + + JSDoc: Class: AddGenerator + + + + + + + + + + +
+ +

Class: AddGenerator

+ + + + + + +
+ +
+ +

AddGenerator() → {Void}

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

new AddGenerator() → {Void}

+ + + + + + +
+ Generator for adding properties +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ After execution, transforms are triggered +
+ + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + +
+ + +

Extends

+ + + + +
    +
  • Generator
  • +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/InitGenerator.html b/docs/InitGenerator.html new file mode 100644 index 00000000000..52a6dafe51e --- /dev/null +++ b/docs/InitGenerator.html @@ -0,0 +1,201 @@ + + + + + JSDoc: Class: InitGenerator + + + + + + + + + + +
+ +

Class: InitGenerator

+ + + + + + +
+ +
+ +

InitGenerator() → {Void}

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

new InitGenerator() → {Void}

+ + + + + + +
+ Generator for initializing a webpack config +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ After execution, transforms are triggered +
+ + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + +
+ + +

Extends

+ + + + +
    +
  • Generator
  • +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/LoaderGenerator.html b/docs/LoaderGenerator.html new file mode 100644 index 00000000000..3939c8e7280 --- /dev/null +++ b/docs/LoaderGenerator.html @@ -0,0 +1,181 @@ + + + + + JSDoc: Class: LoaderGenerator + + + + + + + + + + +
+ +

Class: LoaderGenerator

+ + + + + + +
+ +
+ +

LoaderGenerator()

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

new LoaderGenerator()

+ + + + + + +
+ A yeoman generator class for creating a webpack +loader project. It adds some starter loader code +and runs `webpack-defaults`. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + +
    +
  • Generator
  • +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/PluginGenerator.html b/docs/PluginGenerator.html new file mode 100644 index 00000000000..fe432b43a43 --- /dev/null +++ b/docs/PluginGenerator.html @@ -0,0 +1,181 @@ + + + + + JSDoc: Class: PluginGenerator + + + + + + + + + + +
+ +

Class: PluginGenerator

+ + + + + + +
+ +
+ +

PluginGenerator()

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

new PluginGenerator()

+ + + + + + +
+ A yeoman generator class for creating a webpack +plugin project. It adds some starter plugin code +and runs `webpack-defaults`. +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + +

Extends

+ + + + +
    +
  • Generator
  • +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/commands_add.js.html b/docs/commands_add.js.html new file mode 100644 index 00000000000..203ce1b3f42 --- /dev/null +++ b/docs/commands_add.js.html @@ -0,0 +1,67 @@ + + + + + JSDoc: Source: commands/add.js + + + + + + + + + + +
+ +

Source: commands/add.js

+ + + + + + +
+
+
"use strict";
+
+const defaultGenerator = require("../generators/add-generator");
+const modifyHelper = require("../utils/modify-config-helper");
+
+/**
+ * Is called and returns a scaffolding instance, adding properties
+ *
+ * @returns {Function} modifyHelper - A helper function that uses the action
+ * 	we're given on a generator
+ *
+ */
+
+module.exports = function add() {
+	return modifyHelper("add", defaultGenerator);
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_init.js.html b/docs/commands_init.js.html new file mode 100644 index 00000000000..eab71576d27 --- /dev/null +++ b/docs/commands_init.js.html @@ -0,0 +1,72 @@ + + + + + JSDoc: Source: commands/init.js + + + + + + + + + + +
+ +

Source: commands/init.js

+ + + + + + +
+
+
"use strict";
+
+const npmPackagesExists = require("../utils/npm-packages-exists");
+const creator = require("../init/index").creator;
+
+/**
+ *
+ * First function to be called after running the init flag. This is a check,
+ * if we are running the init command with no arguments or if we got dependencies
+ *
+ * @param {Object} pkg - packages included when running the init command
+ * @returns {Function} creator/npmPackagesExists - returns an installation of the package,
+ * followed up with a yeoman instance of that if there's packages. If not, it creates a defaultGenerator
+ */
+
+module.exports = function initializeInquirer(pkg) {
+	if (pkg.length === 0) {
+		return creator();
+	}
+	return npmPackagesExists(pkg);
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_make.js.html b/docs/commands_make.js.html new file mode 100644 index 00000000000..d5bffbbbd79 --- /dev/null +++ b/docs/commands_make.js.html @@ -0,0 +1,63 @@ + + + + + JSDoc: Source: commands/make.js + + + + + + + + + + +
+ +

Source: commands/make.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ * Is called and returns a scaffolding instance, adding properties
+ *
+ * @returns {Function} TBD
+ *
+ */
+
+module.exports = function make() {
+	return console.log("make me");
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_migrate.js.html b/docs/commands_migrate.js.html new file mode 100644 index 00000000000..102a306ed38 --- /dev/null +++ b/docs/commands_migrate.js.html @@ -0,0 +1,202 @@ + + + + + JSDoc: Source: commands/migrate.js + + + + + + + + + + +
+ +

Source: commands/migrate.js

+ + + + + + +
+
+
"use strict";
+
+const fs = require("fs");
+const chalk = require("chalk");
+const diff = require("diff");
+const inquirer = require("inquirer");
+const PLazy = require("p-lazy");
+const Listr = require("listr");
+
+const validateSchema = require("webpack/lib/validateSchema");
+const WebpackOptionsValidationError = require("webpack/lib/WebpackOptionsValidationError");
+const webpackOptionsSchema = require("webpack/schemas/webpackOptionsSchema.json");
+
+const runPrettier = require("../utils/run-prettier");
+
+/**
+*
+* Runs migration on a given configuration using AST's and promises
+* to sequentially transform a configuration file.
+*
+* @param {String} currentConfigPath - Location of the configuration to be migrated
+* @param {String} outputConfigPath - Location to where the configuration should be written
+* @param {Object} options - Any additional options regarding code style of the written configuration
+
+* @returns {Promise} Runs the migration using a promise that will throw any errors during each transform
+* or output if the user decides to abort the migration
+*/
+
+module.exports = function migrate(
+	currentConfigPath,
+	outputConfigPath,
+	options
+) {
+	const recastOptions = Object.assign(
+		{
+			quote: "single"
+		},
+		options
+	);
+	const tasks = new Listr([
+		{
+			title: "Reading webpack config",
+			task: ctx =>
+				new PLazy((resolve, reject) => {
+					fs.readFile(currentConfigPath, "utf8", (err, content) => {
+						if (err) {
+							reject(err);
+						}
+						try {
+							const jscodeshift = require("jscodeshift");
+							ctx.source = content;
+							ctx.ast = jscodeshift(content);
+							resolve();
+						} catch (err) {
+							reject("Error generating AST", err);
+						}
+					});
+				})
+		},
+		{
+			title: "Migrating config from v1 to v2",
+			task: ctx => {
+				const transformations = require("../migrate").transformations;
+				return new Listr(
+					Object.keys(transformations).map(key => {
+						const transform = transformations[key];
+						return {
+							title: key,
+							task: _ => transform(ctx.ast, ctx.source)
+						};
+					})
+				);
+			}
+		}
+	]);
+
+	tasks
+		.run()
+		.then(ctx => {
+			const result = ctx.ast.toSource(recastOptions);
+			const diffOutput = diff.diffLines(ctx.source, result);
+			diffOutput.forEach(diffLine => {
+				if (diffLine.added) {
+					process.stdout.write(chalk.green(`+ ${diffLine.value}`));
+				} else if (diffLine.removed) {
+					process.stdout.write(chalk.red(`- ${diffLine.value}`));
+				}
+			});
+			return inquirer
+				.prompt([
+					{
+						type: "confirm",
+						name: "confirmMigration",
+						message: "Are you sure these changes are fine?",
+						default: "Y"
+					}
+				])
+				.then(answers => {
+					if (answers["confirmMigration"]) {
+						return inquirer.prompt([
+							{
+								type: "confirm",
+								name: "confirmValidation",
+								message:
+									"Do you want to validate your configuration? " +
+									"(If you're using webpack merge, validation isn't useful)",
+								default: "Y"
+							}
+						]);
+					} else {
+						console.log(chalk.red("✖ Migration aborted"));
+					}
+				})
+				.then(answer => {
+					runPrettier(outputConfigPath, result, err => {
+						if (err) {
+							throw err;
+						}
+					});
+
+					if (answer["confirmValidation"]) {
+						const webpackOptionsValidationErrors = validateSchema(
+							webpackOptionsSchema,
+							require(outputConfigPath)
+						);
+						if (webpackOptionsValidationErrors.length) {
+							console.log(
+								chalk.red(
+									"\n✖ Your configuration validation wasn't successful \n"
+								)
+							);
+							console.error(
+								new WebpackOptionsValidationError(
+									webpackOptionsValidationErrors
+								).message
+							);
+						}
+					}
+					console.log(
+						chalk.green(
+							`\n ✔︎ New webpack v2 config file is at ${outputConfigPath}`
+						)
+					);
+				});
+		})
+		.catch(err => {
+			console.log(chalk.red("✖ ︎Migration aborted due to some errors"));
+			console.error(err);
+			process.exitCode = 1;
+		});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_remove.js.html b/docs/commands_remove.js.html new file mode 100644 index 00000000000..a0da2376244 --- /dev/null +++ b/docs/commands_remove.js.html @@ -0,0 +1,67 @@ + + + + + JSDoc: Source: commands/remove.js + + + + + + + + + + +
+ +

Source: commands/remove.js

+ + + + + + +
+
+
"use strict";
+
+const defaultGenerator = require("../generators/remove-generator");
+const modifyHelper = require("../utils/modify-config-helper");
+
+/**
+ * Is called and returns a scaffolding instance, removing properties
+ *
+ * @returns {Function} modifyHelper - A helper function that uses the action
+ * 	we're given on a generator
+ *
+ */
+
+module.exports = function() {
+	return modifyHelper("remove", defaultGenerator);
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_serve.js.html b/docs/commands_serve.js.html new file mode 100644 index 00000000000..61b4945beb9 --- /dev/null +++ b/docs/commands_serve.js.html @@ -0,0 +1,222 @@ + + + + + JSDoc: Source: commands/serve.js + + + + + + + + + + +
+ +

Source: commands/serve.js

+ + + + + + +
+
+
"use strict";
+
+const inquirer = require("inquirer");
+const path = require("path");
+const chalk = require("chalk");
+const spawn = require("cross-spawn");
+const List = require("webpack-addons").List;
+const processPromise = require("../utils/resolve-packages").processPromise;
+
+/**
+ *
+ * Installs WDS using NPM with --save --dev etc
+ *
+ * @param {Object} cmd - arg to spawn with
+ * @returns {Void}
+ */
+
+const spawnNPMWithArg = cmd =>
+	spawn.sync("npm", ["install", "webpack-dev-server", cmd], {
+		stdio: "inherit"
+	});
+
+/**
+ *
+ * Installs WDS using Yarn with add etc
+ *
+ * @param {Object} cmd - arg to spawn with
+ * @returns {Void}
+ */
+
+const spawnYarnWithArg = cmd =>
+	spawn.sync("yarn", ["add", "webpack-dev-server", cmd], {
+		stdio: "inherit"
+	});
+
+/**
+ *
+ * Find the path of a given module
+ *
+ * @param {Object} dep - dependency to find
+ * @returns {String} string with given path
+ */
+
+const getRootPathModule = dep => path.resolve(process.cwd(), dep);
+
+/**
+ *
+ * Prompts for installing the devServer and running it
+ *
+ * @param {Object} args - args processed from the CLI
+ * @returns {Function} invokes the devServer API
+ */
+
+function serve() {
+	let packageJSONPath = getRootPathModule("package.json");
+	if (!packageJSONPath) {
+		console.log(
+			"\n",
+			chalk.red("✖ Could not find your package.json file"),
+			"\n"
+		);
+		process.exit(1);
+	}
+	let packageJSON = require(packageJSONPath);
+	/*
+	 * We gotta do this, cause some configs might not have devdep,
+	 * dep or optional dep, so we'd need sanity checks for each
+	*/
+	let hasDevServerDep = packageJSON
+		? Object.keys(packageJSON).filter(p => packageJSON[p]["webpack-dev-server"])
+		: [];
+
+	if (hasDevServerDep.length) {
+		let WDSPath = getRootPathModule("node_modules/webpack-dev-server/cli.js");
+		if (!WDSPath) {
+			console.log(
+				"\n",
+				chalk.red(
+					"✖ Could not find the webpack-dev-server dependency in node_modules root path"
+				)
+			);
+			console.log(
+				chalk.bold.green(" ✔︎"),
+				"Try this command:",
+				chalk.bold.green("rm -rf node_modules && npm install")
+			);
+			process.exit(1);
+		}
+		return require(WDSPath);
+	} else {
+		process.stdout.write(
+			"\n" +
+				chalk.bold(
+					"✖ We didn't find any webpack-dev-server dependency in your project,"
+				) +
+				"\n" +
+				chalk.bold.green("  'webpack serve'") +
+				" " +
+				chalk.bold("requires you to have it installed ") +
+				"\n\n"
+		);
+		return inquirer
+			.prompt([
+				{
+					type: "confirm",
+					name: "confirmDevserver",
+					message: "Do you want to install it? (default: Y)",
+					default: "Y"
+				}
+			])
+			.then(answer => {
+				if (answer["confirmDevserver"]) {
+					return inquirer
+						.prompt(
+							List(
+								"confirmDepType",
+								"What kind of dependency do you want it to be under? (default: devDependency)",
+								["devDependency", "optionalDependency", "dependency"]
+							)
+						)
+						.then(depTypeAns => {
+							const packager = getRootPathModule("package-lock.json")
+								? "npm"
+								: "yarn";
+							let spawnAction;
+							if (depTypeAns["confirmDepType"] === "devDependency") {
+								if (packager === "yarn") {
+									spawnAction = _ => spawnYarnWithArg("--dev");
+								} else {
+									spawnAction = _ => spawnNPMWithArg("--save-dev");
+								}
+							}
+							if (depTypeAns["confirmDepType"] === "dependency") {
+								if (packager === "yarn") {
+									spawnAction = _ => spawnYarnWithArg(" ");
+								} else {
+									spawnAction = _ => spawnNPMWithArg("--save");
+								}
+							}
+							if (depTypeAns["confirmDepType"] === "optionalDependency") {
+								if (packager === "yarn") {
+									spawnAction = _ => spawnYarnWithArg("--optional");
+								} else {
+									spawnAction = _ => spawnNPMWithArg("--save-optional");
+								}
+							}
+							return processPromise(spawnAction()).then(_ => {
+								// Recursion doesn't work well with require call being cached
+								delete require.cache[require.resolve(packageJSONPath)];
+								return serve();
+							});
+						});
+				} else {
+					console.log(chalk.bold.red("✖ Serve aborted due cancelling"));
+					process.exitCode = 1;
+				}
+			})
+			.catch(err => {
+				console.log(chalk.red("✖ Serve aborted due to some errors"));
+				console.error(err);
+				process.exitCode = 1;
+			});
+	}
+}
+
+module.exports = {
+	serve,
+	getRootPathModule,
+	spawnNPMWithArg,
+	spawnYarnWithArg
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_update.js.html b/docs/commands_update.js.html new file mode 100644 index 00000000000..41e8e238142 --- /dev/null +++ b/docs/commands_update.js.html @@ -0,0 +1,67 @@ + + + + + JSDoc: Source: commands/update.js + + + + + + + + + + +
+ +

Source: commands/update.js

+ + + + + + +
+
+
"use strict";
+
+const defaultGenerator = require("../generators/update-generator");
+const modifyHelper = require("../utils/modify-config-helper");
+
+/**
+ * Is called and returns a scaffolding instance, updating properties
+ *
+ * @returns {Function} modifyHelper - A helper function that uses the action
+ * 	we're given on a generator
+ *
+ */
+
+module.exports = function() {
+	return modifyHelper("update", defaultGenerator);
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/fonts/OpenSans-Bold-webfont.eot b/docs/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 00000000000..5d20d916338 Binary files /dev/null and b/docs/fonts/OpenSans-Bold-webfont.eot differ diff --git a/docs/fonts/OpenSans-Bold-webfont.svg b/docs/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 00000000000..3ed7be4bc5b --- /dev/null +++ b/docs/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Bold-webfont.woff b/docs/fonts/OpenSans-Bold-webfont.woff new file mode 100644 index 00000000000..1205787b0ed Binary files /dev/null and b/docs/fonts/OpenSans-Bold-webfont.woff differ diff --git a/docs/fonts/OpenSans-BoldItalic-webfont.eot b/docs/fonts/OpenSans-BoldItalic-webfont.eot new file mode 100644 index 00000000000..1f639a15ff3 Binary files /dev/null and b/docs/fonts/OpenSans-BoldItalic-webfont.eot differ diff --git a/docs/fonts/OpenSans-BoldItalic-webfont.svg b/docs/fonts/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 00000000000..6a2607b9daf --- /dev/null +++ b/docs/fonts/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-BoldItalic-webfont.woff b/docs/fonts/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 00000000000..ed760c0628b Binary files /dev/null and b/docs/fonts/OpenSans-BoldItalic-webfont.woff differ diff --git a/docs/fonts/OpenSans-Italic-webfont.eot b/docs/fonts/OpenSans-Italic-webfont.eot new file mode 100644 index 00000000000..0c8a0ae06ed Binary files /dev/null and b/docs/fonts/OpenSans-Italic-webfont.eot differ diff --git a/docs/fonts/OpenSans-Italic-webfont.svg b/docs/fonts/OpenSans-Italic-webfont.svg new file mode 100644 index 00000000000..e1075dcc246 --- /dev/null +++ b/docs/fonts/OpenSans-Italic-webfont.svg @@ -0,0 +1,1830 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Italic-webfont.woff b/docs/fonts/OpenSans-Italic-webfont.woff new file mode 100644 index 00000000000..ff652e64356 Binary files /dev/null and b/docs/fonts/OpenSans-Italic-webfont.woff differ diff --git a/docs/fonts/OpenSans-Light-webfont.eot b/docs/fonts/OpenSans-Light-webfont.eot new file mode 100644 index 00000000000..14868406aa7 Binary files /dev/null and b/docs/fonts/OpenSans-Light-webfont.eot differ diff --git a/docs/fonts/OpenSans-Light-webfont.svg b/docs/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 00000000000..11a472ca8a5 --- /dev/null +++ b/docs/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Light-webfont.woff b/docs/fonts/OpenSans-Light-webfont.woff new file mode 100644 index 00000000000..e786074813a Binary files /dev/null and b/docs/fonts/OpenSans-Light-webfont.woff differ diff --git a/docs/fonts/OpenSans-LightItalic-webfont.eot b/docs/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 00000000000..8f445929ffb Binary files /dev/null and b/docs/fonts/OpenSans-LightItalic-webfont.eot differ diff --git a/docs/fonts/OpenSans-LightItalic-webfont.svg b/docs/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 00000000000..431d7e35463 --- /dev/null +++ b/docs/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,1835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-LightItalic-webfont.woff b/docs/fonts/OpenSans-LightItalic-webfont.woff new file mode 100644 index 00000000000..43e8b9e6cc0 Binary files /dev/null and b/docs/fonts/OpenSans-LightItalic-webfont.woff differ diff --git a/docs/fonts/OpenSans-Regular-webfont.eot b/docs/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 00000000000..6bbc3cf58cb Binary files /dev/null and b/docs/fonts/OpenSans-Regular-webfont.eot differ diff --git a/docs/fonts/OpenSans-Regular-webfont.svg b/docs/fonts/OpenSans-Regular-webfont.svg new file mode 100644 index 00000000000..25a3952340f --- /dev/null +++ b/docs/fonts/OpenSans-Regular-webfont.svg @@ -0,0 +1,1831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/fonts/OpenSans-Regular-webfont.woff b/docs/fonts/OpenSans-Regular-webfont.woff new file mode 100644 index 00000000000..e231183dce4 Binary files /dev/null and b/docs/fonts/OpenSans-Regular-webfont.woff differ diff --git a/docs/generate-loader_index.js.html b/docs/generate-loader_index.js.html new file mode 100644 index 00000000000..e4038fc0fa4 --- /dev/null +++ b/docs/generate-loader_index.js.html @@ -0,0 +1,68 @@ + + + + + JSDoc: Source: generate-loader/index.js + + + + + + + + + + +
+ +

Source: generate-loader/index.js

+ + + + + + +
+
+
var yeoman = require("yeoman-environment");
+var LoaderGenerator = require("../generators/loader-generator").LoaderGenerator;
+
+/**
+ * Runs a yeoman generator to create a new webpack loader project
+ * @returns {void}
+ */
+function loaderCreator() {
+	var env = yeoman.createEnv();
+	var generatorName = "webpack-loader-generator";
+
+	env.registerStub(LoaderGenerator, generatorName);
+
+	env.run(generatorName);
+}
+
+module.exports = loaderCreator;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generate-plugin_index.js.html b/docs/generate-plugin_index.js.html new file mode 100644 index 00000000000..c9b4490291f --- /dev/null +++ b/docs/generate-plugin_index.js.html @@ -0,0 +1,68 @@ + + + + + JSDoc: Source: generate-plugin/index.js + + + + + + + + + + +
+ +

Source: generate-plugin/index.js

+ + + + + + +
+
+
var yeoman = require("yeoman-environment");
+var PluginGenerator = require("../generators/plugin-generator").PluginGenerator;
+
+/**
+ * Runs a yeoman generator to create a new webpack plugin project
+ * @returns {void}
+ */
+function pluginCreator() {
+	var env = yeoman.createEnv();
+	var generatorName = "webpack-plugin-generator";
+
+	env.registerStub(PluginGenerator, generatorName);
+
+	env.run(generatorName);
+}
+
+module.exports = pluginCreator;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_add-generator.js.html b/docs/generators_add-generator.js.html new file mode 100644 index 00000000000..f09a3624167 --- /dev/null +++ b/docs/generators_add-generator.js.html @@ -0,0 +1,501 @@ + + + + + JSDoc: Source: generators/add-generator.js + + + + + + + + + + +
+ +

Source: generators/add-generator.js

+ + + + + + +
+
+
const Generator = require("yeoman-generator");
+const glob = require("glob-all");
+const path = require("path");
+const Confirm = require("webpack-addons").Confirm;
+const List = require("webpack-addons").List;
+const Input = require("webpack-addons").Input;
+
+const webpackSchema = require("webpack/schemas/WebpackOptions");
+const webpackDevServerSchema = require("webpack-dev-server/lib/optionsSchema.json");
+const PROP_TYPES = require("../utils/prop-types");
+
+const getPackageManager = require("../utils/package-manager").getPackageManager;
+const npmExists = require("../utils/npm-exists");
+const entryQuestions = require("./utils/entry");
+
+/**
+ *
+ * Replaces the string with a substring at the given index
+ * https://gist.github.com/efenacigiray/9367920
+ *
+ * @param {String} string - string to be modified
+ * @param {Number} index - index to replace from
+ * @param {String} replace - string to replace starting from index
+ *
+ * @returns {String} string - The newly mutated string
+ *
+ */
+function replaceAt(string, index, replace) {
+	return string.substring(0, index) + replace + string.substring(index + 1);
+}
+
+/**
+ *
+ * Checks if the given array has a given property
+ *
+ * @param {Array} arr - array to check
+ * @param {String} prop - property to check existence of
+ *
+ * @returns {Boolean} hasProp - Boolean indicating if the property
+ * is present
+ */
+const traverseAndGetProperties = (arr, prop) => {
+	let hasProp = false;
+	arr.forEach(p => {
+		if (p[prop]) {
+			hasProp = true;
+		}
+	});
+	return hasProp;
+};
+
+/**
+ *
+ * Generator for adding properties
+ * @class AddGenerator
+ * @extends Generator
+ * @returns {Void} After execution, transforms are triggered
+ *
+ */
+
+module.exports = class AddGenerator extends Generator {
+	constructor(args, opts) {
+		super(args, opts);
+		this.dependencies = [];
+		this.configuration = {
+			config: {
+				webpackOptions: {},
+				topScope: ["const webpack = require('webpack')"]
+			}
+		};
+	}
+
+	prompting() {
+		let done = this.async();
+		let action;
+		let self = this;
+		let manualOrListInput = action =>
+			Input("actionAnswer", `what do you want to add to ${action}?`);
+		// first index indicates if it has a deep prop, 2nd indicates what kind of
+		let isDeepProp = [false, false];
+
+		return this.prompt([
+			List(
+				"actionType",
+				"What property do you want to add to?",
+				Array.from(PROP_TYPES.keys())
+			)
+		])
+			.then(actionTypeAnswer => {
+				// Set initial prop, like devtool
+				this.configuration.config.webpackOptions[
+					actionTypeAnswer.actionType
+				] = null;
+				// update the action variable, we're using it later
+				action = actionTypeAnswer.actionType;
+			})
+			.then(() => {
+				if (action === "entry") {
+					return this.prompt([
+						Confirm("entryType", "Will your application have multiple bundles?")
+					])
+						.then(entryTypeAnswer => {
+							// Ask different questions for entry points
+							return entryQuestions(self, entryTypeAnswer);
+						})
+						.then(entryOptions => {
+							this.configuration.config.webpackOptions[action] = entryOptions;
+							this.configuration.config.item = action;
+						});
+				}
+				let temp = action;
+				if (action === "resolveLoader") {
+					action = "resolve";
+				}
+				const webpackSchemaProp = webpackSchema.definitions[action];
+				/*
+				 * https://github.com/webpack/webpack/blob/next/schemas/WebpackOptions.json
+				 * Find the properties directly in the properties prop, or the anyOf prop
+				 */
+				let defOrPropDescription = webpackSchemaProp
+					? webpackSchemaProp.properties
+					: webpackSchema.properties[action].properties
+						? webpackSchema.properties[action].properties
+						: webpackSchema.properties[action].anyOf
+							? webpackSchema.properties[action].anyOf.filter(
+								p => p.properties || p.enum
+							)
+							: null;
+				if (Array.isArray(defOrPropDescription)) {
+					// Todo: Generalize these to go through the array, then merge enum with props if needed
+					const hasPropertiesProp = traverseAndGetProperties(
+						defOrPropDescription,
+						"properties"
+					);
+					const hasEnumProp = traverseAndGetProperties(
+						defOrPropDescription,
+						"enum"
+					);
+					/* as we know he schema only has two arrays that might hold our values,
+					 * check them for either having arr.enum or arr.properties
+					*/
+					if (hasPropertiesProp) {
+						defOrPropDescription =
+							defOrPropDescription[0].properties ||
+							defOrPropDescription[1].properties;
+						if (!defOrPropDescription) {
+							defOrPropDescription = defOrPropDescription[0].enum;
+						}
+						// TODO: manually implement stats and devtools like sourcemaps
+					} else if (hasEnumProp) {
+						const originalPropDesc = defOrPropDescription[0].enum;
+						// Array -> Object -> Merge objects into one for compat in manualOrListInput
+						defOrPropDescription = Object.keys(defOrPropDescription[0].enum)
+							.map(p => {
+								return Object.assign(
+									{},
+									{
+										[originalPropDesc[p]]: "noop"
+									}
+								);
+							})
+							.reduce((result, currentObject) => {
+								for (let key in currentObject) {
+									if (currentObject.hasOwnProperty(key)) {
+										result[key] = currentObject[key];
+									}
+								}
+								return result;
+							}, {});
+					}
+				}
+				// WDS has its own schema, so we gonna need to check that too
+				const webpackDevserverSchemaProp =
+					action === "devServer" ? webpackDevServerSchema : null;
+				// Watch has a boolean arg, but we need to append to it manually
+				if (action === "watch") {
+					defOrPropDescription = {
+						true: {},
+						false: {}
+					};
+				}
+				if (action === "mode") {
+					defOrPropDescription = {
+						development: {},
+						production: {}
+					};
+				}
+				action = temp;
+				if (action === "resolveLoader") {
+					defOrPropDescription = Object.assign(defOrPropDescription, {
+						moduleExtensions: {}
+					});
+				}
+				// If we've got a schema prop or devServer Schema Prop
+				if (defOrPropDescription || webpackDevserverSchemaProp) {
+					// Check for properties in definitions[action] or properties[action]
+					if (defOrPropDescription) {
+						if (action !== "devtool") {
+							// Add the option of adding an own variable if the user wants
+							defOrPropDescription = Object.assign(defOrPropDescription, {
+								other: {}
+							});
+						} else {
+							// The schema doesn't have the source maps we can prompt, so add those
+							defOrPropDescription = Object.assign(defOrPropDescription, {
+								eval: {},
+								"cheap-eval-source-map": {},
+								"cheap-module-eval-source-map": {},
+								"eval-source-map": {},
+								"cheap-source-map": {},
+								"cheap-module-source-map": {},
+								"inline-cheap-source-map": {},
+								"inline-cheap-module-source-map": {},
+								"source-map": {},
+								"inline-source-map": {},
+								"hidden-source-map": {},
+								"nosources-source-map": {}
+							});
+						}
+						manualOrListInput = List(
+							"actionAnswer",
+							`what do you want to add to ${action}?`,
+							Object.keys(defOrPropDescription)
+						);
+						// We know we're gonna append some deep prop like module.rule
+						isDeepProp[0] = true;
+					} else if (webpackDevserverSchemaProp) {
+						// Append the custom property option
+						webpackDevserverSchemaProp.properties = Object.assign(
+							webpackDevserverSchemaProp.properties,
+							{
+								other: {}
+							}
+						);
+						manualOrListInput = List(
+							"actionAnswer",
+							`what do you want to add to ${action}?`,
+							Object.keys(webpackDevserverSchemaProp.properties)
+						);
+						// We know we are in a devServer.prop scenario
+						isDeepProp[0] = true;
+					} else {
+						// manual input if non-existent
+						manualOrListInput = manualOrListInput(action);
+					}
+				} else {
+					manualOrListInput = manualOrListInput(action);
+				}
+				return this.prompt([manualOrListInput]);
+			})
+			.then(answerToAction => {
+				if (!answerToAction) {
+					done();
+					return;
+				}
+				/*
+				 * Plugins got their own logic,
+				 * find the names of each natively plugin and check if it matches
+				*/
+				if (action === "plugins") {
+					const pluginExist = glob
+						.sync([
+							"node_modules/webpack/lib/*Plugin.js",
+							"node_modules/webpack/lib/**/*Plugin.js"
+						])
+						.map(p =>
+							p
+								.split("/")
+								.pop()
+								.replace(".js", "")
+						)
+						.find(
+							p => p.toLowerCase().indexOf(answerToAction.actionAnswer) >= 0
+						);
+					if (pluginExist) {
+						this.configuration.config.item = pluginExist;
+						const pluginsSchemaPath = glob
+							.sync([
+								"node_modules/webpack/schemas/plugins/*Plugin.json",
+								"node_modules/webpack/schemas/plugins/**/*Plugin.json"
+							])
+							.find(
+								p =>
+									p
+										.split("/")
+										.pop()
+										.replace(".json", "")
+										.toLowerCase()
+										.indexOf(answerToAction.actionAnswer) >= 0
+							);
+						if (pluginsSchemaPath) {
+							const constructorPrefix =
+								pluginsSchemaPath.indexOf("optimize") >= 0
+									? "webpack.optimize"
+									: "webpack";
+							const resolvePluginsPath = path.resolve(pluginsSchemaPath);
+							const pluginSchema = resolvePluginsPath
+								? require(resolvePluginsPath)
+								: null;
+							let pluginsSchemaProps = ["other"];
+							if (pluginSchema) {
+								Object.keys(pluginSchema)
+									.filter(p => Array.isArray(pluginSchema[p]))
+									.forEach(p => {
+										Object.keys(pluginSchema[p]).forEach(n => {
+											if (pluginSchema[p][n].properties) {
+												pluginsSchemaProps = Object.keys(
+													pluginSchema[p][n].properties
+												);
+											}
+										});
+									});
+							}
+
+							return this.prompt([
+								List(
+									"pluginsPropType",
+									`What property do you want to add ${pluginExist}?`,
+									pluginsSchemaProps
+								)
+							]).then(pluginsPropAnswer => {
+								return this.prompt([
+									Input(
+										"pluginsPropTypeVal",
+										`What value should ${pluginExist}.${
+											pluginsPropAnswer.pluginsPropType
+										} have?`
+									)
+								]).then(valForProp => {
+									this.configuration.config.webpackOptions[action] = {
+										[`${constructorPrefix}.${pluginExist}`]: {
+											[pluginsPropAnswer.pluginsPropType]:
+												valForProp.pluginsPropTypeVal
+										}
+									};
+									done();
+								});
+							});
+						} else {
+							this.configuration.config.webpackOptions[
+								action
+							] = `new webpack.${pluginExist}`;
+							done();
+						}
+					} else {
+						// If its not in webpack, check npm
+						npmExists(answerToAction.actionAnswer).then(p => {
+							if (p) {
+								this.dependencies.push(answerToAction.actionAnswer);
+								const normalizePluginName = answerToAction.actionAnswer.replace(
+									"-webpack-plugin",
+									"Plugin"
+								);
+								const pluginName = replaceAt(
+									normalizePluginName,
+									0,
+									normalizePluginName.charAt(0).toUpperCase()
+								);
+								this.configuration.config.topScope.push(
+									`const ${pluginName} = require("${
+										answerToAction.actionAnswer
+									}")`
+								);
+								this.configuration.config.webpackOptions[
+									action
+								] = `new ${pluginName}`;
+								this.configuration.config.item = answerToAction.actionAnswer;
+								done();
+								this.runInstall(getPackageManager(), this.dependencies, {
+									"save-dev": true
+								});
+							} else {
+								console.error(
+									answerToAction.actionAnswer,
+									"doesn't exist on NPM or is built in webpack, please check for any misspellings."
+								);
+								process.exit(0);
+							}
+						});
+					}
+				} else {
+					// If we're in the scenario with a deep-property
+					if (isDeepProp[0]) {
+						isDeepProp[1] = answerToAction.actionAnswer;
+						if (
+							isDeepProp[1] !== "other" &&
+							(action === "devtool" || action === "watch" || action === "mode")
+						) {
+							this.configuration.config.item = action;
+							this.configuration.config.webpackOptions[action] =
+								answerToAction.actionAnswer;
+							done();
+							return;
+						}
+						// Either we are adding directly at the property, else we're in a prop.theOne scenario
+						const actionMessage =
+							isDeepProp[1] === "other"
+								? `what do you want the key on ${action} to be? (press enter if you want it directly as a value on the property)`
+								: `what do you want the value of ${isDeepProp[1]} to be?`;
+
+						this.prompt([Input("deepProp", actionMessage)]).then(
+							deepPropAns => {
+								// The other option needs to be validated of either being empty or not
+								if (isDeepProp[1] === "other") {
+									let othersDeepPropKey = deepPropAns.deepProp
+										? `what do you want the value of ${
+											deepPropAns.deepProp
+										} to be?`
+										: `what do you want to be the value of ${action} to be?`;
+									// Push the answer to the array we have created, so we can use it later
+									isDeepProp.push(deepPropAns.deepProp);
+									this.prompt([Input("deepProp", othersDeepPropKey)]).then(
+										deepPropAns => {
+											// Check length, if it has none, add the prop directly on the given action
+											if (isDeepProp[2].length === 0) {
+												this.configuration.config.item = action;
+												this.configuration.config.webpackOptions[action] =
+													deepPropAns.deepProp;
+											} else {
+												// If not, we're adding to something like devServer.myProp
+												this.configuration.config.item =
+													action + "." + isDeepProp[2];
+												this.configuration.config.webpackOptions[action] = {
+													[isDeepProp[2]]: deepPropAns.deepProp
+												};
+											}
+											done();
+										}
+									);
+								} else {
+									// We got the schema prop, we've correctly prompted it, and can add it directly
+									this.configuration.config.item = action + "." + isDeepProp[1];
+									this.configuration.config.webpackOptions[action] = {
+										[isDeepProp[1]]: deepPropAns.deepProp
+									};
+									done();
+								}
+							}
+						);
+					} else {
+						// We're asking for input-only
+						this.configuration.config.item = action;
+						this.configuration.config.webpackOptions[action] =
+							answerToAction.actionAnswer;
+						done();
+					}
+				}
+			});
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_init-generator.js.html b/docs/generators_init-generator.js.html new file mode 100644 index 00000000000..6b48f37cf3f --- /dev/null +++ b/docs/generators_init-generator.js.html @@ -0,0 +1,464 @@ + + + + + JSDoc: Source: generators/init-generator.js + + + + + + + + + + +
+ +

Source: generators/init-generator.js

+ + + + + + +
+
+
"use strict";
+
+const Generator = require("yeoman-generator");
+const chalk = require("chalk");
+const logSymbols = require("log-symbols");
+
+const createCommonsChunkPlugin = require("webpack-addons")
+	.createCommonsChunkPlugin;
+
+const Input = require("webpack-addons").Input;
+const Confirm = require("webpack-addons").Confirm;
+const List = require("webpack-addons").List;
+
+const getPackageManager = require("../utils/package-manager").getPackageManager;
+
+const entryQuestions = require("./utils/entry");
+const getBabelPlugin = require("./utils/module");
+const getDefaultPlugins = require("./utils/plugins");
+const tooltip = require("./utils/tooltip");
+
+/**
+ *
+ * Generator for initializing a webpack config
+ *
+ * @class InitGenerator
+ * @extends Generator
+ * @returns {Void} After execution, transforms are triggered
+ *
+ */
+module.exports = class InitGenerator extends Generator {
+	constructor(args, opts) {
+		super(args, opts);
+		this.isProd = false;
+		this.dependencies = ["webpack", "uglifyjs-webpack-plugin"];
+		this.configuration = {
+			config: {
+				webpackOptions: {},
+				topScope: []
+			}
+		};
+	}
+	prompting() {
+		let done = this.async();
+		let self = this;
+		let oneOrMoreEntries;
+		let regExpForStyles;
+		let ExtractUseProps;
+		let outputPath = "dist";
+		process.stdout.write(
+			"\n" +
+				logSymbols.info +
+				chalk.blue(" INFO ") +
+				"For more information and a detailed description of each question, have a look at " +
+				chalk.bold.green(
+					"https://github.com/webpack/webpack-cli/blob/master/INIT.md"
+				) +
+				"\n"
+		);
+		process.stdout.write(
+			logSymbols.info +
+				chalk.blue(" INFO ") +
+				"Alternatively, run `webpack(-cli) --help` for usage info." +
+				"\n\n"
+		);
+		this.configuration.config.webpackOptions.module = {
+			rules: []
+		};
+		this.configuration.config.webpackOptions.plugins = getDefaultPlugins();
+		this.configuration.config.topScope.push(
+			"const webpack = require('webpack')",
+			"const path = require('path')",
+			tooltip.uglify(),
+			"const UglifyJSPlugin = require('uglifyjs-webpack-plugin');",
+			"\n"
+		);
+
+		this.prompt([
+			Confirm("entryType", "Will your application have multiple bundles?")
+		])
+			.then(entryTypeAnswer => {
+				// Ask different questions for entry points
+				return entryQuestions(self, entryTypeAnswer);
+			})
+			.then(entryOptions => {
+				this.configuration.config.webpackOptions.entry = entryOptions;
+				oneOrMoreEntries = Object.keys(entryOptions);
+
+				return this.prompt([
+					Input(
+						"outputType",
+						"Which folder will your generated bundles be in? [default: dist]:"
+					)
+				]);
+			})
+			.then(outputTypeAnswer => {
+				if (!this.configuration.config.webpackOptions.entry.length) {
+					this.configuration.config.topScope.push(tooltip.commonsChunk());
+					this.configuration.config.webpackOptions.output = {
+						filename: "'[name].[chunkhash].js'",
+						chunkFilename: "'[name].[chunkhash].js'"
+					};
+				} else {
+					this.configuration.config.webpackOptions.output = {
+						filename: "'[name].bundle.js'"
+					};
+				}
+				if (outputTypeAnswer["outputType"].length) {
+					outputPath = outputTypeAnswer["outputType"];
+				}
+				this.configuration.config.webpackOptions.output.path = `path.resolve(__dirname, '${outputPath}')`;
+			})
+			.then(() => {
+				return this.prompt([
+					Confirm("prodConfirm", "Are you going to use this in production?")
+				]);
+			})
+			.then(prodAnswer => {
+				if (prodAnswer["prodConfirm"] === true) {
+					this.isProd = true;
+				} else {
+					this.isProd = false;
+				}
+			})
+			.then(() => {
+				return this.prompt([
+					Confirm("babelConfirm", "Will you be using ES2015?")
+				]);
+			})
+			.then(ans => {
+				if (ans["babelConfirm"] === true) {
+					this.configuration.config.webpackOptions.module.rules.push(
+						getBabelPlugin()
+					);
+					this.dependencies.push(
+						"babel-loader",
+						"babel-core",
+						"babel-preset-env"
+					);
+				}
+			})
+			.then(() => {
+				return this.prompt([
+					List("stylingType", "Will you use one of the below CSS solutions?", [
+						"SASS",
+						"LESS",
+						"CSS",
+						"PostCSS",
+						"No"
+					])
+				]);
+			})
+			.then(stylingAnswer => {
+				if (!this.isProd) {
+					ExtractUseProps = [];
+				}
+				switch (stylingAnswer["stylingType"]) {
+					case "SASS":
+						this.dependencies.push(
+							"sass-loader",
+							"node-sass",
+							"style-loader",
+							"css-loader"
+						);
+						regExpForStyles = new RegExp(/\.(scss|css)$/);
+						if (this.isProd) {
+							ExtractUseProps = `
+								use: [{
+									loader: "css-loader",
+									options: {
+										sourceMap: true
+									}
+								}, {
+									loader: "sass-loader",
+									options: {
+										sourceMap: true
+									}
+								}],
+								fallback: "style-loader"
+							`;
+						} else {
+							ExtractUseProps.push(
+								{
+									loader: "'style-loader'"
+								},
+								{
+									loader: "'css-loader'"
+								},
+								{
+									loader: "'sass-loader'"
+								}
+							);
+						}
+						break;
+					case "LESS":
+						regExpForStyles = new RegExp(/\.(less|css)$/);
+						this.dependencies.push(
+							"less-loader",
+							"less",
+							"style-loader",
+							"css-loader"
+						);
+						if (this.isProd) {
+							ExtractUseProps = `
+								use: [{
+									loader: "css-loader",
+									options: {
+										sourceMap: true
+									}
+								}, {
+									loader: "less-loader",
+									options: {
+										sourceMap: true
+									}
+								}],
+								fallback: "style-loader"
+							`;
+						} else {
+							ExtractUseProps.push(
+								{
+									loader: "'css-loader'",
+									options: {
+										sourceMap: true
+									}
+								},
+								{
+									loader: "'less-loader'",
+									options: {
+										sourceMap: true
+									}
+								}
+							);
+						}
+						break;
+					case "PostCSS":
+						this.configuration.config.topScope.push(
+							tooltip.postcss(),
+							"const autoprefixer = require('autoprefixer');",
+							"const precss = require('precss');",
+							"\n"
+						);
+						this.dependencies.push(
+							"style-loader",
+							"css-loader",
+							"postcss-loader",
+							"precss",
+							"autoprefixer"
+						);
+						regExpForStyles = new RegExp(/\.css$/);
+						if (this.isProd) {
+							ExtractUseProps = `
+								use: [{
+									loader: "style-loader"
+								},{
+									loader: "css-loader",
+									options: {
+										sourceMap: true,
+										importLoaders: 1
+									}
+								}, {
+									loader: "postcss-loader",
+									options: {
+										plugins: function () {
+											return [
+												precss,
+												autoprefixer
+											];
+										}
+									}
+								}],
+								fallback: "style-loader"
+							`;
+						} else {
+							ExtractUseProps.push(
+								{
+									loader: "'style-loader'"
+								},
+								{
+									loader: "'css-loader'",
+									options: {
+										sourceMap: true,
+										importLoaders: 1
+									}
+								},
+								{
+									loader: "'postcss-loader'",
+									options: {
+										plugins: `function () {
+											return [
+												precss,
+												autoprefixer
+											];
+										}`
+									}
+								}
+							);
+						}
+						break;
+					case "CSS":
+						this.dependencies.push("style-loader", "css-loader");
+						regExpForStyles = new RegExp(/\.css$/);
+						if (this.isProd) {
+							ExtractUseProps = `
+								use: [{
+									loader: "css-loader",
+									options: {
+										sourceMap: true
+									}
+								}],
+								fallback: "style-loader"
+							`;
+						} else {
+							ExtractUseProps.push(
+								{
+									loader: "'style-loader'",
+									options: {
+										sourceMap: true
+									}
+								},
+								{
+									loader: "'css-loader'"
+								}
+							);
+						}
+						break;
+					default:
+						regExpForStyles = null;
+				}
+			})
+			.then(() => {
+				// Ask if the user wants to use extractPlugin
+				return this.prompt([
+					Input(
+						"extractPlugin",
+						"If you want to bundle your CSS files, what will you name the bundle? (press enter to skip)"
+					)
+				]);
+			})
+			.then(extractAnswer => {
+				const cssBundleName = extractAnswer.extractPlugin;
+				if (regExpForStyles) {
+					if (this.isProd) {
+						this.configuration.config.topScope.push(tooltip.cssPlugin());
+						this.dependencies.push("extract-text-webpack-plugin");
+
+						if (cssBundleName.length !== 0) {
+							this.configuration.config.webpackOptions.plugins.push(
+								`new ExtractTextPlugin('${cssBundleName}.[contentHash].css')`
+							);
+						} else {
+							this.configuration.config.webpackOptions.plugins.push(
+								"new ExtractTextPlugin('style.css')"
+							);
+						}
+
+						const moduleRulesObj = {
+							test: regExpForStyles,
+							use: `ExtractTextPlugin.extract({ ${ExtractUseProps} })`
+						};
+
+						this.configuration.config.webpackOptions.module.rules.push(
+							moduleRulesObj
+						);
+						this.configuration.config.topScope.push(
+							"const ExtractTextPlugin = require('extract-text-webpack-plugin');",
+							"\n"
+						);
+					} else {
+						const moduleRulesObj = {
+							test: regExpForStyles,
+							use: ExtractUseProps
+						};
+
+						this.configuration.config.webpackOptions.module.rules.push(
+							moduleRulesObj
+						);
+					}
+				}
+			})
+			.then(() => {
+				if (this.configuration.config.webpackOptions.entry.length === 0) {
+					oneOrMoreEntries.forEach(prop => {
+						this.configuration.config.webpackOptions.plugins.push(
+							createCommonsChunkPlugin(prop)
+						);
+					});
+				}
+				done();
+			});
+	}
+	installPlugins() {
+		let asyncNamePrompt = this.async();
+		let defaultName = this.isProd ? "prod" : "config";
+		this.prompt([
+			Input(
+				"nameType",
+				`Name your 'webpack.[name].js?' [default: '${defaultName}']:`
+			)
+		])
+			.then(nameAnswer => {
+				if (nameAnswer["nameType"].length) {
+					this.configuration.config.configName = nameAnswer["nameType"];
+				} else {
+					this.configuration.config.configName = defaultName;
+				}
+			})
+			.then(() => {
+				asyncNamePrompt();
+				this.runInstall(getPackageManager(), this.dependencies, {
+					"save-dev": true
+				});
+			});
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_loader-generator.js.html b/docs/generators_loader-generator.js.html new file mode 100644 index 00000000000..92160c4ead9 --- /dev/null +++ b/docs/generators_loader-generator.js.html @@ -0,0 +1,109 @@ + + + + + JSDoc: Source: generators/loader-generator.js + + + + + + + + + + +
+ +

Source: generators/loader-generator.js

+ + + + + + +
+
+
var path = require("path");
+var _ = require("lodash");
+var webpackGenerator = require("./webpack-generator");
+
+/**
+ * Formats a string into webpack loader format
+ * (eg: 'style-loader', 'raw-loader')
+ *
+ * @param {string} name A loader name to be formatted
+ * @returns {string} The formatted string
+ */
+function makeLoaderName(name) {
+	name = _.kebabCase(name);
+	if (!/loader$/.test(name)) {
+		name += "-loader";
+	}
+	return name;
+}
+
+/**
+ * A yeoman generator class for creating a webpack
+ * loader project. It adds some starter loader code
+ * and runs `webpack-defaults`.
+ *
+ * @class LoaderGenerator
+ * @extends {Generator}
+ */
+var LoaderGenerator = webpackGenerator(
+	[
+		{
+			type: "input",
+			name: "name",
+			message: "Loader name",
+			default: "my-loader",
+			filter: makeLoaderName,
+			validate: str => str.length > 0
+		}
+	],
+	path.join(__dirname, "templates"),
+	[
+		"src/cjs.js.tpl",
+		"test/test-utils.js.tpl",
+		"test/unit.test.js.tpl",
+		"test/functional.test.js.tpl",
+		"test/fixtures/simple-file.js.tpl",
+		"examples/simple/webpack.config.js.tpl",
+		"examples/simple/src/index.js.tpl",
+		"examples/simple/src/lazy-module.js.tpl",
+		"examples/simple/src/static-esm-module.js.tpl"
+	],
+	["src/_index.js.tpl"],
+	gen => ({ name: gen.props.name })
+);
+
+module.exports = {
+	makeLoaderName,
+	LoaderGenerator
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_plugin-generator.js.html b/docs/generators_plugin-generator.js.html new file mode 100644 index 00000000000..1dcc38aedd4 --- /dev/null +++ b/docs/generators_plugin-generator.js.html @@ -0,0 +1,90 @@ + + + + + JSDoc: Source: generators/plugin-generator.js + + + + + + + + + + +
+ +

Source: generators/plugin-generator.js

+ + + + + + +
+
+
var path = require("path");
+var _ = require("lodash");
+var webpackGenerator = require("./webpack-generator");
+
+/**
+ * A yeoman generator class for creating a webpack
+ * plugin project. It adds some starter plugin code
+ * and runs `webpack-defaults`.
+ *
+ * @class PluginGenerator
+ * @extends {Generator}
+ */
+var PluginGenerator = webpackGenerator(
+	[
+		{
+			type: "input",
+			name: "name",
+			message: "Plugin name",
+			default: "my-webpack-plugin",
+			filter: _.kebabCase,
+			validate: str => str.length > 0
+		}
+	],
+	path.join(__dirname, "templates"),
+	[
+		"src/cjs.js.tpl",
+		"test/test-utils.js.tpl",
+		"test/functional.test.js.tpl",
+		"examples/simple/src/index.js.tpl",
+		"examples/simple/src/lazy-module.js.tpl",
+		"examples/simple/src/static-esm-module.js.tpl"
+	],
+	["src/_index.js.tpl", "examples/simple/_webpack.config.js.tpl"],
+	gen => ({ name: _.upperFirst(_.camelCase(gen.props.name)) })
+);
+
+module.exports = {
+	PluginGenerator
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_utils_entry.js.html b/docs/generators_utils_entry.js.html new file mode 100644 index 00000000000..2b8c3122285 --- /dev/null +++ b/docs/generators_utils_entry.js.html @@ -0,0 +1,141 @@ + + + + + JSDoc: Source: generators/utils/entry.js + + + + + + + + + + +
+ +

Source: generators/utils/entry.js

+ + + + + + +
+
+
"use strict";
+
+const InputValidate = require("webpack-addons").InputValidate;
+const validate = require("./validate");
+
+/**
+ *
+ * Prompts for entry points, either if it has multiple or one entry
+ *
+ * @param {Object} self - A variable holding the instance of the prompting
+ * @param {Object} answer - Previous answer from asking if the user wants single or multiple entries
+ * @returns {Object} An Object that holds the answers given by the user, later used to scaffold
+ */
+
+module.exports = (self, answer) => {
+	let entryIdentifiers;
+	let result;
+	if (answer["entryType"] === true) {
+		result = self
+			.prompt([
+				InputValidate(
+					"multipleEntries",
+					"Type the names you want for your modules (entry files), separated by comma [example: 'app,vendor']",
+					validate
+				)
+			])
+			.then(multipleEntriesAnswer => {
+				let webpackEntryPoint = {};
+				entryIdentifiers = multipleEntriesAnswer["multipleEntries"].split(",");
+				function forEachPromise(obj, fn) {
+					return obj.reduce(function(promise, prop) {
+						const trimmedProp = prop.trim();
+						return promise.then(n => {
+							if (n) {
+								Object.keys(n).forEach(val => {
+									if (
+										n[val].charAt(0) !== "(" &&
+										n[val].charAt(0) !== "[" &&
+										n[val].indexOf("function") < 0 &&
+										n[val].indexOf("path") < 0 &&
+										n[val].indexOf("process") < 0
+									) {
+										n[val] = `"${n[val]}.js"`;
+									}
+									webpackEntryPoint[val] = n[val];
+								});
+							} else {
+								n = {};
+							}
+							return fn(trimmedProp);
+						});
+					}, Promise.resolve());
+				}
+				return forEachPromise(entryIdentifiers, entryProp =>
+					self.prompt([
+						InputValidate(
+							`${entryProp}`,
+							`What is the location of "${entryProp}"? [example: "./src/${entryProp}"]`,
+							validate
+						)
+					])
+				).then(propAns => {
+					Object.keys(propAns).forEach(val => {
+						if (
+							propAns[val].charAt(0) !== "(" &&
+							propAns[val].charAt(0) !== "[" &&
+							propAns[val].indexOf("function") < 0 &&
+							propAns[val].indexOf("path") < 0 &&
+							propAns[val].indexOf("process") < 0
+						) {
+							propAns[val] = `"${propAns[val]}.js"`;
+						}
+						webpackEntryPoint[val] = propAns[val];
+					});
+					return webpackEntryPoint;
+				});
+			});
+	} else {
+		result = self
+			.prompt([
+				InputValidate(
+					"singularEntry",
+					"Which module will be the first to enter the application? [example: './src/index']",
+					validate
+				)
+			])
+			.then(singularAnswer => `"${singularAnswer["singularEntry"]}"`);
+	}
+	return result;
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_utils_module.js.html b/docs/generators_utils_module.js.html new file mode 100644 index 00000000000..662ca87fb5b --- /dev/null +++ b/docs/generators_utils_module.js.html @@ -0,0 +1,70 @@ + + + + + JSDoc: Source: generators/utils/module.js + + + + + + + + + + +
+ +

Source: generators/utils/module.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ *
+ * Returns an module.rule object that has the babel loader if invoked
+ *
+ * @param {Void} _ - void value
+ * @returns {Function} A callable function that adds the babel-loader with env preset
+ */
+module.exports = _ => {
+	return {
+		test: new RegExp(/\.js$/),
+		exclude: "/node_modules/",
+		loader: "'babel-loader'",
+		options: {
+			presets: ["'env'"]
+		}
+	};
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_utils_plugins.js.html b/docs/generators_utils_plugins.js.html new file mode 100644 index 00000000000..4414e5f92fd --- /dev/null +++ b/docs/generators_utils_plugins.js.html @@ -0,0 +1,65 @@ + + + + + JSDoc: Source: generators/utils/plugins.js + + + + + + + + + + +
+ +

Source: generators/utils/plugins.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ *
+ * Callable function with the initial plugins
+ *
+ * @param {Void} _ - void value
+ * @returns {Function} An function that returns an array
+ * that consists of the uglify plugin
+ */
+
+module.exports = _ => {
+	return ["new UglifyJSPlugin()"];
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_utils_tooltip.js.html b/docs/generators_utils_tooltip.js.html new file mode 100644 index 00000000000..5b531069ed8 --- /dev/null +++ b/docs/generators_utils_tooltip.js.html @@ -0,0 +1,107 @@ + + + + + JSDoc: Source: generators/utils/tooltip.js + + + + + + + + + + +
+ +

Source: generators/utils/tooltip.js

+ + + + + + +
+
+
"use strict";
+/**
+ *
+ * Tooltip object that consits of tooltips for various of
+ * features
+ *
+ * @returns {Object} An Object that consists of tooltip methods to be invoked
+ */
+
+module.exports = {
+	uglify: _ => {
+		return `/*
+ * We've enabled UglifyJSPlugin for you! This minifies your app
+ * in order to load faster and run less javascript.
+ *
+ * https://github.com/webpack-contrib/uglifyjs-webpack-plugin
+ *
+ */`;
+	},
+	commonsChunk: _ => {
+		return `/*
+ * We've enabled commonsChunkPlugin for you. This allows your app to
+ * load faster and it splits the modules you provided as entries across
+ * different bundles!
+ *
+ * https://webpack.js.org/plugins/commons-chunk-plugin/
+ *
+ */`;
+	},
+	cssPlugin: _ => {
+		return `/*
+ * We've enabled ExtractTextPlugin for you. This allows your app to
+ * use css modules that will be moved into a separate CSS file instead of inside
+ * one of your module entries!
+ *
+ * https://github.com/webpack-contrib/extract-text-webpack-plugin
+ *
+ */`;
+	},
+	postcss: _ => {
+		return `/*
+ * We've enabled Postcss, autoprefixer and precss for you. This allows your app
+ * to lint  CSS, support variables and mixins, transpile future CSS syntax,
+ * inline images, and more!
+ *
+ * To enable SASS or LESS, add the respective loaders to module.rules
+ *
+ * https://github.com/postcss/postcss
+ *
+ * https://github.com/postcss/autoprefixer
+ *
+ * https://github.com/jonathantneal/precss
+ *
+ */`;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_utils_validate.js.html b/docs/generators_utils_validate.js.html new file mode 100644 index 00000000000..a5df4a64664 --- /dev/null +++ b/docs/generators_utils_validate.js.html @@ -0,0 +1,68 @@ + + + + + JSDoc: Source: generators/utils/validate.js + + + + + + + + + + +
+ +

Source: generators/utils/validate.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ *
+ * Validates an input to check if an input is provided
+ *
+ * @param {String} value - The input string to validate
+ * @returns {String | Boolean } Returns truthy if its long enough
+ * Or a string if the user hasn't written anything
+ */
+module.exports = value => {
+	const pass = value.length;
+	if (pass) {
+		return true;
+	}
+	return "Please specify an answer!";
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/generators_webpack-generator.js.html b/docs/generators_webpack-generator.js.html new file mode 100644 index 00000000000..fa31838b2b3 --- /dev/null +++ b/docs/generators_webpack-generator.js.html @@ -0,0 +1,128 @@ + + + + + JSDoc: Source: generators/webpack-generator.js + + + + + + + + + + +
+ +

Source: generators/webpack-generator.js

+ + + + + + +
+
+
var path = require("path");
+var mkdirp = require("mkdirp");
+var Generator = require("yeoman-generator");
+var copyUtils = require("../utils/copy-utils");
+
+/**
+ * Creates a Yeoman Generator that generates a project conforming
+ * to webpack-defaults.
+ *
+ * @param {any[]} prompts An array of Yeoman prompt objects
+ *
+ * @param {string} templateDir Absolute path to template directory
+ *
+ * @param {string[]} copyFiles An array of file paths (relative to `./templates`)
+ * of files to be copied to the generated project. File paths should be of the
+ * form `path/to/file.js.tpl`.
+ *
+ * @param {string[]} copyTemplateFiles An array of file paths (relative to
+ * `./templates`) of files to be copied to the generated project. Template
+ * file paths should be of the form `path/to/_file.js.tpl`.
+ *
+ * @param {Function} templateFn A function that is passed a generator instance and
+ * returns an object containing data to be supplied to the template files.
+ *
+ * @returns {Generator} A class extending Generator
+ */
+function webpackGenerator(
+	prompts,
+	templateDir,
+	copyFiles,
+	copyTemplateFiles,
+	templateFn
+) {
+	//eslint-disable-next-line
+	return class extends Generator {
+		prompting() {
+			return this.prompt(prompts).then(props => {
+				this.props = props;
+			});
+		}
+
+		default() {
+			var currentDirName = path.basename(this.destinationPath());
+			if (currentDirName !== this.props.name) {
+				this.log(`
+				Your project must be inside a folder named ${this.props.name}
+				I will create this folder for you.
+				`);
+				mkdirp(this.props.name);
+				var pathToProjectDir = this.destinationPath(this.props.name);
+				this.destinationRoot(pathToProjectDir);
+			}
+		}
+
+		writing() {
+			this.copy = copyUtils.generatorCopy(this, templateDir);
+			this.copyTpl = copyUtils.generatorCopyTpl(
+				this,
+				templateDir,
+				templateFn(this)
+			);
+
+			copyFiles.forEach(this.copy);
+			copyTemplateFiles.forEach(this.copyTpl);
+		}
+
+		install() {
+			this.npmInstall(["webpack-defaults", "bluebird"], {
+				"save-dev": true
+			}).then(() => {
+				this.spawnCommand("npm", ["run", "webpack-defaults"]);
+			});
+		}
+	};
+}
+
+module.exports = webpackGenerator;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/global.html b/docs/global.html new file mode 100644 index 00000000000..382291689ca --- /dev/null +++ b/docs/global.html @@ -0,0 +1,7836 @@ + + + + + JSDoc: Global + + + + + + + + + + +
+ +

Global

+ + + + + + +
+ +
+ +

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

Members

+ + + +

(constant) transformsObject

+ + + + +
+ Runs the transformations from an object we get from yeoman +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + +

Methods

+ + + + + + + +

checkIfExistsAndAddValue(j, node, key, value) → {Void}

+ + + + + + +
+ If a prop exists, it overrides it, else it creates a new one +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
node + + +Node + + + + objectexpression to check
key + + +String + + + + Key of the property
value + + +String + + + + computed value of the property
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + + + + + + +

createArrayWithChildren(j, key, subProps, shouldDropKeys) → {Array}

+ + + + + + +
+ Creates an array and iterates on an object with properties +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
key + + +String + + + + object name
subProps + + +String + + + + computed value of the property
shouldDropKeys + + +Boolean + + + + bool to ask to use obj.keys or not
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ arr - An array with the object properties +
+ + + +
+
+ Type +
+
+ +Array + + +
+
+ + + + + + + + + + + + + +

createEmptyArrayProperty(j, key) → {Array}

+ + + + + + +
+ Creates an empty array +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
key + + +String + + + + array name
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ arr - An empty array +
+ + + +
+
+ Type +
+
+ +Array + + +
+
+ + + + + + + + + + + + + +

createExternalRegExp(j, prop) → {Node}

+ + + + + + +
+ Finds a regexp property with an already parsed AST from the user +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
prop + + +String + + + + property to find the value at
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - A literal node with the found regexp +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

createFunctionWithArguments(j, p, name) → {Node}

+ + + + + + +
+ Creates a function call with arguments +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
p + + +Node + + + + Node to push against
name + + +String + + + + Name for the given function
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns the node for the created +function +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

createIdentifierOrLiteral(j, val) → {Node}

+ + + + + + +
+ Creates an appropriate identifier or literal property +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
val + + +String +| + +Boolean +| + +Number + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

createLiteral(j, val) → {Node}

+ + + + + + +
+ Creates an appropriate literal property +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
val + + +String +| + +Boolean +| + +Number + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

createObjectWithSuppliedProperty(j, key, prop) → {Node}

+ + + + + + +
+ Creates an object with an supplied property as parameter +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
key + + +String + + + + object name
prop + + +Node + + + + property to be added
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - An property with the supplied property +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

createOrUpdatePluginByName(j, rootNodePath, pluginName, options) → {Void}

+ + + + + + +
+ Findes or creates a node for a given plugin name string with options object +If plugin decalaration already exist, options are merged. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
rootNodePath + + +Node + + + + `plugins: []` NodePath where plugin should be added. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths
pluginName + + +String + + + + ex. `webpack.LoaderOptionsPlugin`
options + + +Object + + + + plugin options
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + + + + + + +

createProperty(j, key, value) → {Node}

+ + + + + + +
+ Creates an Object's property with a given key and value +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
key + + +String +| + +Number + + + + Property key
value + + +String +| + +Number +| + +Boolean + + + + Property value
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

creator(options) → {function}

+ + + + + + +
+ Runs yeoman and runs the transformations based on the object +built up from an author/user +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
options + + +String + + + + An path to the given generator
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ runTransform - Run transformations based on the finished +yeoman instance +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

defineTest(dirName, transformName, testFilePrefixopt, transformObject, action) → {Void}

+ + + + + + +
+ Handles some boilerplate around defining a simple jest/Jasmine test for a +jscodeshift transform. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
dirName + + +String + + + + + + + + + + contains the name of the directory the test is located in. This + should normally be passed via __dirname.
transformName + + +String + + + + + + + + + + contains the filename of the transform being tested, + excluding the .js extension.
testFilePrefix + + +String + + + + + + <optional>
+ + + + + +
Optionally contains the name of the file with the test + data. If not specified, it defaults to the same value as `transformName`. + This will be suffixed with ".input.js" for the input file and ".output.js" + for the expected output. For example, if set to "foo", we will read the + "foo.input.js" file, pass this to the transform, and expect its output to + be equal to the contents of "foo.output.js".
transformObject + + +any + + + + + + + + + + Object to be transformed with the transformations
action + + +String + + + + + + + + + + init, update or remove, decides how to format the AST
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ Jest makes sure to execute the globally defined functions +
+ + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + + + + + + +

findPluginsByName(j, node, pluginNamesArray) → {Node}

+ + + + + + +
+ Find paths that match `new name.space.PluginName()` for a +given array of plugin names +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
node + + +Node + + + + Node to start search from
pluginNamesArray + + +Array.<String> + + + + Array of plugin names like `webpack.LoaderOptionsPlugin`
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ Node that has the pluginName +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

findRootNodesByName(j, node, propName) → {Node}

+ + + + + + +
+ Finds the path to the `name: []` node +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
node + + +Node + + + + Node to start search from
propName + + +String + + + + property to search for
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ found node and +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

findVariableToPlugin(j, rootNode, pluginPackageName) → {String}

+ + + + + + +
+ Finds the variable to which a third party plugin is assigned to +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
rootNode + + +Node + + + + `plugins: []` Root Node. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths
pluginPackageName + + +String + + + + ex. `extract-text-plugin`
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ variable name - ex. 'var s = require(s) gives "s"` +
+ + + +
+
+ Type +
+
+ +String + + +
+
+ + + + + + + + + + + + + +

generatorCopy(generator, templateDir) → {function}

+ + + + + + +
+ Takes in a file path in the `./templates` directory. Copies that +file to the destination, with the `.tpl` extension stripped. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
generator + + +Generator + + + + A Yeoman Generator instance
templateDir + + +string + + + + Absolute path to template directory
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ A curried function that takes a file path and copies it +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

generatorCopyTpl(generator, templateDir, templateData) → {function}

+ + + + + + +
+ Takes in a file path in the `./templates` directory. Copies that +file to the destination, with the `.tpl` extension and `_` prefix +stripped. Passes `this.props` to the template. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
generator + + +Generator + + + + A Yeoman Generator instance
templateDir + + +string + + + + Absolute path to template directory
templateData + + +any + + + + An object containing the data passed to +the template files.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ A curried function that takes a file path and copies it +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

getPackageManager() → {String}

+ + + + + + +
+ Returns the name of package manager to use, +preferring yarn over npm if available +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - The package manager name +
+ + + +
+
+ Type +
+
+ +String + + +
+
+ + + + + + + + + + + + + +

getRequire(j, constName, packagePath) → {Node}

+ + + + + + +
+ Returns constructed require symbol +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
constName + + +String + + + + Name of require
packagePath + + +String + + + + path of required package
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - the created ast +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

getRootPathModule(dep) → {String}

+ + + + + + +
+ Find the path of a given module +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
dep + + +Object + + + + dependency to find
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ string with given path +
+ + + +
+
+ Type +
+
+ +String + + +
+
+ + + + + + + + + + + + + +

isAssignment(j, p, cb, identifier, property) → {function}

+ + + + + + +
+ Checks if we are at the correct node and later invokes a callback +for the transforms to either use their own transform function or +use pushCreateProperty if the transform doesn't expect any properties +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
p + + +Node + + + + Node to push against
cb + + +function + + + + callback to be invoked
identifier + + +String + + + + key to use as property
property + + +Object + + + + WebpackOptions that later will be converted via +pushCreateProperty via WebpackOptions[identifier]
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ cb - Returns the callback and pushes a new node +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

isType(path, type) → {Boolean}

+ + + + + + +
+ Returns true if type is given type +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
path + + +Node + + + + pathNode
type + + +String + + + + node type
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Boolean + + +
+
+ + + + + + + + + + + + + +

loaderCreator() → {void}

+ + + + + + +
+ Runs a yeoman generator to create a new webpack loader project +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +void + + +
+
+ + + + + + + + + + + + + +

loopThroughObjects(j, p, obj) → {function|Node}

+ + + + + + +
+ Loops through an object and adds property to an object with no identifier +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
p + + +Node + + + + node to add value to
obj + + +Object + + + + Object to loop through
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Either pushes the node, or reruns until +nothing is left +
+ + + +
+
+ Type +
+
+ +function +| + +Node + + +
+
+ + + + + + + + + + + + + +

makeLoaderName(name) → {string}

+ + + + + + +
+ Formats a string into webpack loader format +(eg: 'style-loader', 'raw-loader') +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
name + + +string + + + + A loader name to be formatted
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ The formatted string +
+ + + +
+
+ Type +
+
+ +string + + +
+
+ + + + + + + + + + + + + +

pluginCreator() → {void}

+ + + + + + +
+ Runs a yeoman generator to create a new webpack plugin project +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +void + + +
+
+ + + + + + + + + + + + + +

processPromise(child) → {Promise}

+ + + + + + +
+ Attaches a promise to the installation of the package +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
child + + +function + + + + The function to attach a promise to
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ promise - Returns a promise to the installation +
+ + + +
+
+ Type +
+
+ +Promise + + +
+
+ + + + + + + + + + + + + +

pushCreateProperty(j, p, key, val) → {Node}

+ + + + + + +
+ Creates a property and pushes the value to a node +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
p + + +Node + + + + Node to push against
key + + +String + + + + key used as identifier
val + + +String + + + + property value
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ - Returns node the pushed property +
+ + + +
+
+ Type +
+
+ +Node + + +
+
+ + + + + + + + + + + + + +

pushObjectKeys(j, p, webpackProperties, name) → {Node|function}

+ + + + + + + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
j + + +any + + + + — jscodeshift API
p + + +Node + + + + path to push
webpackProperties + + +Object + + + + The object to loop over
name + + +String + + + + Key that will be the identifier we find and add values to
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ Returns a function that will push a node if +subProperty is an array, else it will invoke a function that will push a single node +
+ + + +
+
+ Type +
+
+ +Node +| + +function + + +
+
+ + + + + + + + + + + + + +

replaceAt(string, index, replace) → {String}

+ + + + + + +
+ Replaces the string with a substring at the given index +https://gist.github.com/efenacigiray/9367920 +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
string + + +String + + + + string to be modified
index + + +Number + + + + index to replace from
replace + + +String + + + + string to replace starting from index
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ string - The newly mutated string +
+ + + +
+
+ Type +
+
+ +String + + +
+
+ + + + + + + + + + + + + +

resolvePackages(pkg) → {function|Error}

+ + + + + + +
+ Resolves and installs the packages, later sending them to @creator +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pkg + + +Array.<String> + + + + The dependencies to be installed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ creator - Builds +a webpack configuration through yeoman or throws an error +
+ + + +
+
+ Type +
+
+ +function +| + +Error + + +
+
+ + + + + + + + + + + + + +

runSingleTansform(dirName, transformName, testFilePrefixopt, initOptions, action) → {function}

+ + + + + + +
+ Utility function to run a jscodeshift script within a unit test. +This makes several assumptions about the environment. + +Notes: +- The test should be located in a subdirectory next to the transform itself. + Commonly tests are located in a directory called __tests__. + +- Test data should be located in a directory called __testfixtures__ + alongside the transform and __tests__ directory. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeAttributesDescription
dirName + + +String + + + + + + + + + + contains the name of the directory the test is located in. This + should normally be passed via __dirname.
transformName + + +String + + + + + + + + + + contains the filename of the transform being tested, + excluding the .js extension.
testFilePrefix + + +String + + + + + + <optional>
+ + + + + +
Optionally contains the name of the file with the test + data. If not specified, it defaults to the same value as `transformName`. + This will be suffixed with ".input.js" for the input file and ".output.js" + for the expected output. For example, if set to "foo", we will read the + "foo.input.js" file, pass this to the transform, and expect its output to + be equal to the contents of "foo.output.js".
initOptions + + +Object +| + +Boolean +| + +String + + + + + + + + + + TBD
action + + +String + + + + + + + + + + init, update or remove, decides how to format the AST
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ Function that fires of the transforms +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

serve(args) → {function}

+ + + + + + +
+ Prompts for installing the devServer and running it +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
args + + +Object + + + + args processed from the CLI
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ invokes the devServer API +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

spawnChild(pkg) → {function}

+ + + + + + +
+ Spawns a new process that installs the addon/dependency +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pkg + + +String + + + + The dependency to be installed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ spawn - Installs the package +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

spawnNPM(pkg, isNew) → {function}

+ + + + + + +
+ Spawns a new process using npm +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pkg + + +String + + + + The dependency to be installed
isNew + + +Boolean + + + + indicates if it needs to be updated or installed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ spawn - Installs the package +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

spawnNPMWithArg(cmd) → {Void}

+ + + + + + +
+ Installs WDS using NPM with --save --dev etc +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cmd + + +Object + + + + arg to spawn with
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + + + + + + +

spawnYarn(pkg, isNew) → {function}

+ + + + + + +
+ Spawns a new process using yarn +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
pkg + + +String + + + + The dependency to be installed
isNew + + +Boolean + + + + indicates if it needs to be updated or installed
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ spawn - Installs the package +
+ + + +
+
+ Type +
+
+ +function + + +
+
+ + + + + + + + + + + + + +

spawnYarnWithArg(cmd) → {Void}

+ + + + + + +
+ Installs WDS using Yarn with add etc +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
cmd + + +Object + + + + arg to spawn with
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + + + +
+
+ Type +
+
+ +Void + + +
+
+ + + + + + + + + + + + + +

traverseAndGetProperties(arr, prop) → {Boolean}

+ + + + + + +
+ Checks if the given array has a given property +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
arr + + +Array + + + + array to check
prop + + +String + + + + property to check existence of
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ hasProp - Boolean indicating if the property +is present +
+ + + +
+
+ Type +
+
+ +Boolean + + +
+
+ + + + + + + + + + + + + +

webpackGenerator(prompts, templateDir, copyFiles, copyTemplateFiles, templateFn) → {Generator}

+ + + + + + +
+ Creates a Yeoman Generator that generates a project conforming +to webpack-defaults. +
+ + + + + + + + + +
Parameters:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription
prompts + + +Array.<any> + + + + An array of Yeoman prompt objects
templateDir + + +string + + + + Absolute path to template directory
copyFiles + + +Array.<string> + + + + An array of file paths (relative to `./templates`) +of files to be copied to the generated project. File paths should be of the +form `path/to/file.js.tpl`.
copyTemplateFiles + + +Array.<string> + + + + An array of file paths (relative to +`./templates`) of files to be copied to the generated project. Template +file paths should be of the form `path/to/_file.js.tpl`.
templateFn + + +function + + + + A function that is passed a generator instance and +returns an object containing data to be supplied to the template files.
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + + + + + + + + + + +
Returns:
+ + +
+ A class extending Generator +
+ + + +
+
+ Type +
+
+ +Generator + + +
+
+ + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000000..12d86a492be --- /dev/null +++ b/docs/index.html @@ -0,0 +1,65 @@ + + + + + JSDoc: Home + + + + + + + + + + +
+ +

Home

+ + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/index.js.html b/docs/index.js.html new file mode 100644 index 00000000000..a37079fc1e8 --- /dev/null +++ b/docs/index.js.html @@ -0,0 +1,111 @@ + + + + + JSDoc: Source: index.js + + + + + + + + + + +
+ +

Source: index.js

+ + + + + + +
+
+
"use strict";
+
+const path = require("path");
+
+/**
+ *
+ * First function to be called after running a flag. This is a check,
+ * to match the flag with the respective require.
+ *
+ * @param {String} command - which feature to use
+ * @param {Object} args - arguments from the CLI
+ * @returns {Function} invokes the module with the supplied command
+ *
+ */
+
+module.exports = function initialize(command, args) {
+	const popArgs = args ? args.slice(2).pop() : null;
+	switch (command) {
+		case "init": {
+			const initPkgs = args.slice(2).length === 1 ? [] : [popArgs];
+			//eslint-disable-next-line
+			return require("./commands/init.js")(initPkgs);
+		}
+		case "migrate": {
+			const filePaths = args.slice(2).length === 1 ? [] : [popArgs];
+			if (!filePaths.length) {
+				throw new Error("Please specify a path to your webpack config");
+			}
+			const inputConfigPath = path.resolve(process.cwd(), filePaths[0]);
+			//eslint-disable-next-line
+			return require("./commands/migrate.js")(inputConfigPath, inputConfigPath);
+		}
+		case "add": {
+			//eslint-disable-next-line
+			return require("./commands/add")();
+		}
+		case "remove": {
+			//eslint-disable-next-line
+			return require("./commands/remove")();
+		}
+		case "update": {
+			return require("./commands/update")();
+		}
+		case "serve": {
+			return require("./commands/serve").serve();
+		}
+		case "make": {
+			return require("./commands/make")();
+		}
+		case "generate-loader": {
+			return require("./generate-loader/index.js")();
+		}
+		case "generate-plugin": {
+			return require("./generate-plugin/index.js")();
+		}
+		default: {
+			throw new Error(`Unknown command ${command} found`);
+		}
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_index.js.html b/docs/init_index.js.html new file mode 100644 index 00000000000..7a4db591e87 --- /dev/null +++ b/docs/init_index.js.html @@ -0,0 +1,116 @@ + + + + + JSDoc: Source: init/index.js + + + + + + + + + + +
+ +

Source: init/index.js

+ + + + + + +
+
+
"use strict";
+
+const yeoman = require("yeoman-environment");
+const Generator = require("yeoman-generator");
+const path = require("path");
+const defaultGenerator = require("../generators/init-generator");
+const runTransform = require("./transformations/index");
+
+/**
+ *
+ * Runs yeoman and runs the transformations based on the object
+ * built up from an author/user
+ *
+ * @param {String} options - An path to the given generator
+ * @returns {Function} runTransform - Run transformations based on the finished
+ * yeoman instance
+ */
+
+function creator(options) {
+	let env = yeoman.createEnv("webpack", null);
+	const generatorName = options
+		? replaceGeneratorName(path.basename(options[0]))
+		: "webpack-default-generator";
+	if (options) {
+		const WebpackGenerator = class extends Generator {
+			initializing() {
+				options.forEach(path => {
+					return this.composeWith(require.resolve(path));
+				});
+			}
+		};
+		env.registerStub(WebpackGenerator, generatorName);
+	} else {
+		env.registerStub(defaultGenerator, "webpack-default-generator");
+	}
+
+	env.run(generatorName).on("end", _ => {
+		if (generatorName !== "webpack-default-generator") {
+			//HACK / FIXME
+			env = env.options.env;
+			return runTransform(env.configuration);
+		} else {
+			return runTransform(env.getArgument("configuration"));
+		}
+	});
+}
+
+/*
+* @function replaceGeneratorName
+*
+* Replaces the webpack-addons pattern with the end of the addons name merged
+* with 'generator'
+*
+* @param { String } name - name of the generator
+* @returns { String } name - replaced pattern of the name
+*/
+
+function replaceGeneratorName(name) {
+	return name.replace(/(webpack-addons)?([^:]+)(:.*)?/g, "generator$2");
+}
+
+module.exports = {
+	creator,
+	replaceGeneratorName
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_context_context.js.html b/docs/init_transformations_context_context.js.html new file mode 100644 index 00000000000..50757233a29 --- /dev/null +++ b/docs/init_transformations_context_context.js.html @@ -0,0 +1,106 @@ + + + + + JSDoc: Source: init/transformations/context/context.js + + + + + + + + + + +
+ +

Source: init/transformations/context/context.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for context. Finds the context property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function contextTransform(j, ast, webpackProperties, action) {
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"context",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const contextNode = utils.findRootNodesByName(j, ast, "context");
+			if (contextNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"context",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return contextTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_devServer_devServer.js.html b/docs/init_transformations_devServer_devServer.js.html new file mode 100644 index 00000000000..0eeb34d1335 --- /dev/null +++ b/docs/init_transformations_devServer_devServer.js.html @@ -0,0 +1,140 @@ + + + + + JSDoc: Source: init/transformations/devServer/devServer.js + + + + + + + + + + +
+ +

Source: init/transformations/devServer/devServer.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for devServer. Finds the devServer property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function devServerTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createDevServerProperty(p) {
+		utils.pushCreateProperty(j, p, "devServer", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "devServer");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createDevServerProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"devServer",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const devServerNode = utils.findRootNodesByName(j, ast, "devServer");
+			if (devServerNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"devServer"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (devServerNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"devServer"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return devServerTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_devtool_devtool.js.html b/docs/init_transformations_devtool_devtool.js.html new file mode 100644 index 00000000000..663c1e0c7cc --- /dev/null +++ b/docs/init_transformations_devtool_devtool.js.html @@ -0,0 +1,105 @@ + + + + + JSDoc: Source: init/transformations/devtool/devtool.js + + + + + + + + + + +
+ +

Source: init/transformations/devtool/devtool.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for devtool. Finds the devtool property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function devToolTransform(j, ast, webpackProperties, action) {
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"devtool",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const devToolNode = utils.findRootNodesByName(j, ast, "devtool");
+			if (devToolNode.size() !== 0) {
+				return devToolNode.forEach(p => {
+					j(p).replaceWith(
+						j.property(
+							"init",
+							j.identifier("devtool"),
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+				});
+			} else {
+				return devToolTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_entry_entry.js.html b/docs/init_transformations_entry_entry.js.html new file mode 100644 index 00000000000..b2a525b9648 --- /dev/null +++ b/docs/init_transformations_entry_entry.js.html @@ -0,0 +1,136 @@ + + + + + JSDoc: Source: init/transformations/entry/entry.js + + + + + + + + + + +
+ +

Source: init/transformations/entry/entry.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for entry. Finds the entry property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function entryTransform(j, ast, webpackProperties, action) {
+	function createEntryProperty(p) {
+		if (typeof webpackProperties === "string") {
+			return utils.pushCreateProperty(j, p, "entry", webpackProperties);
+		}
+		if (Array.isArray(webpackProperties)) {
+			const externalArray = utils.createArrayWithChildren(
+				j,
+				"entry",
+				webpackProperties,
+				true
+			);
+			return p.value.properties.push(externalArray);
+		} else {
+			utils.pushCreateProperty(j, p, "entry", j.objectExpression([]));
+			return utils.pushObjectKeys(j, p, webpackProperties, "entry");
+		}
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createEntryProperty));
+		} else if (action === "add") {
+			const entryNode = utils.findRootNodesByName(j, ast, "entry");
+			if (entryNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"entry"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (entryNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"entry"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return entryTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_externals_externals.js.html b/docs/init_transformations_externals_externals.js.html new file mode 100644 index 00000000000..daba38746e0 --- /dev/null +++ b/docs/init_transformations_externals_externals.js.html @@ -0,0 +1,160 @@ + + + + + JSDoc: Source: init/transformations/externals/externals.js + + + + + + + + + + +
+ +

Source: init/transformations/externals/externals.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for externals. Finds the externals property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function externalsTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createExternalProperty(p) {
+		if (
+			webpackProperties instanceof RegExp ||
+			typeof webpackProperties === "string"
+		) {
+			return utils.pushCreateProperty(j, p, "externals", webpackProperties);
+		}
+		if (Array.isArray(webpackProperties)) {
+			const externalArray = utils.createArrayWithChildren(
+				j,
+				"externals",
+				webpackProperties,
+				true
+			);
+			return p.value.properties.push(externalArray);
+		} else {
+			utils.pushCreateProperty(j, p, "externals", j.objectExpression([]));
+			return utils.pushObjectKeys(j, p, webpackProperties, "externals");
+		}
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(
+					p =>
+						utils.safeTraverse(p, [
+							"parent",
+							"value",
+							"left",
+							"property",
+							"name"
+						]) === "exports"
+				)
+				.forEach(createExternalProperty);
+		} else if (action === "add") {
+			const externalNode = utils.findRootNodesByName(j, ast, "externals");
+			if (externalNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"externals"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							// need to check for every prop beneath, use the recursion util
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				externalNode.size() !== 0 &&
+				Array.isArray(webpackProperties)
+			) {
+				// Todo
+			} else if (externalNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"externals"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return externalsTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_index.js.html b/docs/init_transformations_index.js.html new file mode 100644 index 00000000000..737682c8de6 --- /dev/null +++ b/docs/init_transformations_index.js.html @@ -0,0 +1,201 @@ + + + + + JSDoc: Source: init/transformations/index.js + + + + + + + + + + +
+ +

Source: init/transformations/index.js

+ + + + + + +
+
+
"use strict";
+
+const path = require("path");
+const j = require("jscodeshift");
+const chalk = require("chalk");
+const pEachSeries = require("p-each-series");
+
+const runPrettier = require("../../utils/run-prettier");
+
+const entryTransform = require("./entry/entry");
+const outputTransform = require("./output/output");
+const contextTransform = require("./context/context");
+const resolveTransform = require("./resolve/resolve");
+const devtoolTransform = require("./devtool/devtool");
+const targetTransform = require("./target/target");
+const watchTransform = require("./watch/watch");
+const watchOptionsTransform = require("./watch/watchOptions");
+const externalsTransform = require("./externals/externals");
+const nodeTransform = require("./node/node");
+const performanceTransform = require("./performance/performance");
+const statsTransform = require("./stats/stats");
+const amdTransform = require("./other/amd");
+const bailTransform = require("./other/bail");
+const cacheTransform = require("./other/cache");
+const profileTransform = require("./other/profile");
+const mergeTransform = require("./other/merge");
+const parallelismTransform = require("./other/parallelism");
+const recordsInputPathTransform = require("./other/recordsInputPath");
+const recordsOutputPathTransform = require("./other/recordsOutputPath");
+const recordsPathTransform = require("./other/recordsPath");
+const moduleTransform = require("./module/module");
+const pluginsTransform = require("./plugins/plugins");
+const topScopeTransform = require("./top-scope/top-scope");
+const devServerTransform = require("./devServer/devServer");
+const modeTransform = require("./mode/mode");
+const resolveLoaderTransform = require("./resolveLoader/resolveLoader");
+
+/**
+ *
+ * Runs the transformations from an object we get from yeoman
+ *
+ * @param {Object} webpackProperties - Configuration to transform
+ * @param {String} action - Action to be done on the given ast
+ * @returns {Promise} - A promise that writes each transform, runs prettier
+ * and writes the file
+ */
+
+const transformsObject = {
+	entryTransform,
+	outputTransform,
+	contextTransform,
+	resolveTransform,
+	devtoolTransform,
+	targetTransform,
+	watchTransform,
+	watchOptionsTransform,
+	externalsTransform,
+	nodeTransform,
+	performanceTransform,
+	statsTransform,
+	amdTransform,
+	bailTransform,
+	cacheTransform,
+	profileTransform,
+	moduleTransform,
+	pluginsTransform,
+	topScopeTransform,
+	mergeTransform,
+	devServerTransform,
+	modeTransform,
+	parallelismTransform,
+	recordsInputPathTransform,
+	recordsOutputPathTransform,
+	recordsPathTransform,
+	resolveLoaderTransform
+};
+
+module.exports = function runTransform(webpackProperties, action) {
+	// webpackOptions.name sent to nameTransform if match
+	const webpackConfig = action
+		? { config: webpackProperties.config }
+		: webpackProperties;
+	Object.keys(webpackConfig).forEach(scaffoldPiece => {
+		const config = webpackConfig[scaffoldPiece];
+		const transformations = Object.keys(transformsObject)
+			.map(k => {
+				const stringVal = k.substr(0, k.indexOf("Transform"));
+				if (config.webpackOptions) {
+					if (config.webpackOptions[stringVal]) {
+						return [transformsObject[k], config.webpackOptions[stringVal]];
+					} else {
+						return [transformsObject[k], config[stringVal]];
+					}
+				} else {
+					return [transformsObject[k]];
+				}
+			})
+			.filter(e => e[1]);
+
+		const ast = j(
+			action ? webpackProperties.configFile : "module.exports = {}"
+		);
+		const transformAction = action || null;
+
+		return pEachSeries(transformations, f => {
+			if (!f[1]) {
+				return f[0](j, ast, transformAction);
+			} else {
+				return f[0](j, ast, f[1], transformAction);
+			}
+		})
+			.then(_ => {
+				let configurationName;
+				if (!config.configName) {
+					configurationName = "webpack.config.js";
+				} else {
+					configurationName = "webpack." + config.configName + ".js";
+				}
+
+				const outputPath = action
+					? webpackProperties.configPath
+					: path.join(process.cwd(), configurationName);
+				const source = ast.toSource({
+					quote: "single"
+				});
+
+				runPrettier(outputPath, source);
+			})
+			.catch(err => {
+				console.error(err.message ? err.message : err);
+			});
+	});
+	if (action) {
+		process.stdout.write(
+			"\n" +
+				chalk.green(
+					`Congratulations! ${
+						webpackProperties.config.item
+					} has been ${action}ed!\n`
+				)
+		);
+	} else {
+		process.stdout.write(
+			"\n" +
+				chalk.green(
+					"Congratulations! Your new webpack configuration file has been created!\n"
+				)
+		);
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_mode_mode.js.html b/docs/init_transformations_mode_mode.js.html new file mode 100644 index 00000000000..255866a1b59 --- /dev/null +++ b/docs/init_transformations_mode_mode.js.html @@ -0,0 +1,106 @@ + + + + + JSDoc: Source: init/transformations/mode/mode.js + + + + + + + + + + +
+ +

Source: init/transformations/mode/mode.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for mode. Finds the mode property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function modeTransform(j, ast, webpackProperties, action) {
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"mode",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const modeNode = utils.findRootNodesByName(j, ast, "mode");
+			if (modeNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"mode",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return modeTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_module_module.js.html b/docs/init_transformations_module_module.js.html new file mode 100644 index 00000000000..d4ac799616e --- /dev/null +++ b/docs/init_transformations_module_module.js.html @@ -0,0 +1,124 @@ + + + + + JSDoc: Source: init/transformations/module/module.js + + + + + + + + + + +
+ +

Source: init/transformations/module/module.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for module. Finds the module property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function moduleTransform(j, ast, webpackProperties, action) {
+	function createModuleProperty(p) {
+		if (typeof webpackProperties === "string") {
+			return utils.pushCreateProperty(j, p, "module", webpackProperties);
+		}
+		if (Array.isArray(webpackProperties)) {
+			const externalArray = utils.createArrayWithChildren(
+				j,
+				"module",
+				webpackProperties,
+				true
+			);
+			return p.value.properties.push(externalArray);
+		} else {
+			utils.pushCreateProperty(j, p, "module", j.objectExpression([]));
+			return utils.pushObjectKeys(j, p, webpackProperties, "module");
+		}
+	}
+	function editModuleProperty(p) {
+		return utils.pushObjectKeys(j, p, webpackProperties, "module", true);
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createModuleProperty));
+		} else if (action === "add") {
+			const moduleNode = utils.findRootNodesByName(j, ast, "module");
+			if (moduleNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.isAssignment(null, p, editModuleProperty));
+			} else if (moduleNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"module"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return moduleTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_node_node.js.html b/docs/init_transformations_node_node.js.html new file mode 100644 index 00000000000..c7a6f1b6cd3 --- /dev/null +++ b/docs/init_transformations_node_node.js.html @@ -0,0 +1,95 @@ + + + + + JSDoc: Source: init/transformations/node/node.js + + + + + + + + + + +
+ +

Source: init/transformations/node/node.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for node. Finds the node property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function nodeTransform(j, ast, webpackProperties, action) {
+	function createNodeProperty(p) {
+		utils.pushCreateProperty(j, p, "node", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "node");
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createNodeProperty));
+		} else if (action === "add") {
+			const nodeNode = utils.findRootNodesByName(j, ast, "node");
+			if (nodeNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.pushObjectKeys(j, p, webpackProperties, "node"));
+			} else {
+				return nodeTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_amd.js.html b/docs/init_transformations_other_amd.js.html new file mode 100644 index 00000000000..cf69f223e43 --- /dev/null +++ b/docs/init_transformations_other_amd.js.html @@ -0,0 +1,135 @@ + + + + + JSDoc: Source: init/transformations/other/amd.js + + + + + + + + + + +
+ +

Source: init/transformations/other/amd.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for amd. Finds the amd property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function amdTransform(j, ast, webpackProperties, action) {
+	function createAmdProperty(p) {
+		utils.pushCreateProperty(j, p, "amd", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "amd");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createAmdProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"amd",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const amdNode = utils.findRootNodesByName(j, ast, "amd");
+			if (amdNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"amd"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (amdNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"amd"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return amdTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_bail.js.html b/docs/init_transformations_other_bail.js.html new file mode 100644 index 00000000000..67c3b1b6842 --- /dev/null +++ b/docs/init_transformations_other_bail.js.html @@ -0,0 +1,106 @@ + + + + + JSDoc: Source: init/transformations/other/bail.js + + + + + + + + + + +
+ +

Source: init/transformations/other/bail.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for bail. Finds the bail property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function bailTransform(j, ast, webpackProperties, action) {
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"bail",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const bailNode = utils.findRootNodesByName(j, ast, "bail");
+			if (bailNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"bail",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return bailTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_cache.js.html b/docs/init_transformations_other_cache.js.html new file mode 100644 index 00000000000..a61ccef9af0 --- /dev/null +++ b/docs/init_transformations_other_cache.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: init/transformations/other/cache.js + + + + + + + + + + +
+ +

Source: init/transformations/other/cache.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for cache. Finds the cache property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function cacheTransform(j, ast, webpackProperties, action) {
+	function createCacheProperty(p) {
+		utils.pushCreateProperty(j, p, "cache", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "cache");
+	}
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createCacheProperty));
+		} else if (
+			action === "init" &&
+			(webpackProperties.length || typeof webpackProperties === "boolean")
+		) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"cache",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const cacheNode = utils.findRootNodesByName(j, ast, "cache");
+			if (cacheNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"cache"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				cacheNode.size() !== 0 &&
+				(typeof webpackProperties === "boolean" || webpackProperties.length > 0)
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"cache",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return cacheTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_merge.js.html b/docs/init_transformations_other_merge.js.html new file mode 100644 index 00000000000..2dfed8c900c --- /dev/null +++ b/docs/init_transformations_other_merge.js.html @@ -0,0 +1,98 @@ + + + + + JSDoc: Source: init/transformations/other/merge.js + + + + + + + + + + +
+ +

Source: init/transformations/other/merge.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ *
+ * Transform for merge. Finds the merge property from yeoman and creates a way
+ * for users to allow webpack-merge in their scaffold
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function(j, ast, webpackProperties, action) {
+	function createMergeProperty(p) {
+		// FIXME Use j.callExp()
+		let exportsDecl = p.value.body.map(n => {
+			if (n.expression) {
+				return n.expression.right;
+			}
+		});
+		const bodyLength = exportsDecl.length;
+		let newVal = {};
+		newVal.type = "ExpressionStatement";
+		newVal.expression = {
+			type: "AssignmentExpression",
+			operator: "=",
+			left: {
+				type: "MemberExpression",
+				computed: false,
+				object: j.identifier("module"),
+				property: j.identifier("exports")
+			},
+			right: j.callExpression(j.identifier("merge"), [
+				j.identifier(webpackProperties),
+				exportsDecl.pop()
+			])
+		};
+		p.value.body[bodyLength - 1] = newVal;
+	}
+	if (webpackProperties) {
+		return ast.find(j.Program).filter(p => createMergeProperty(p));
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_parallelism.js.html b/docs/init_transformations_other_parallelism.js.html new file mode 100644 index 00000000000..3d81b3b70f8 --- /dev/null +++ b/docs/init_transformations_other_parallelism.js.html @@ -0,0 +1,111 @@ + + + + + JSDoc: Source: init/transformations/other/parallelism.js + + + + + + + + + + +
+ +

Source: init/transformations/other/parallelism.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for parallelism. Finds the parallelism property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function parallelismTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"parallelism",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const parallelismNode = utils.findRootNodesByName(j, ast, "parallelism");
+			if (parallelismNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"parallelism",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return parallelismTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_profile.js.html b/docs/init_transformations_other_profile.js.html new file mode 100644 index 00000000000..a2fc79eca85 --- /dev/null +++ b/docs/init_transformations_other_profile.js.html @@ -0,0 +1,139 @@ + + + + + JSDoc: Source: init/transformations/other/profile.js + + + + + + + + + + +
+ +

Source: init/transformations/other/profile.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for profile. Finds the profile property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function profileTransform(j, ast, webpackProperties, action) {
+	function createProfileProperty(p) {
+		utils.pushCreateProperty(j, p, "profile", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "profile");
+	}
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createProfileProperty));
+		} else if (
+			action === "init" &&
+			(webpackProperties.length || typeof webpackProperties === "boolean")
+		) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"profile",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const profileNode = utils.findRootNodesByName(j, ast, "profile");
+			if (profileNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"profile"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				profileNode.size() !== 0 &&
+				(typeof webpackProperties === "boolean" || webpackProperties.length > 0)
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"profile",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return profileTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_recordsInputPath.js.html b/docs/init_transformations_other_recordsInputPath.js.html new file mode 100644 index 00000000000..be2364b96a1 --- /dev/null +++ b/docs/init_transformations_other_recordsInputPath.js.html @@ -0,0 +1,151 @@ + + + + + JSDoc: Source: init/transformations/other/recordsInputPath.js + + + + + + + + + + +
+ +

Source: init/transformations/other/recordsInputPath.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for recordsInputPath. Finds the recordsInputPath property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function recordsInputPathTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createRecordsInputPathProperty(p) {
+		utils.pushCreateProperty(j, p, "recordsInputPath", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "recordsInputPath");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(null, p, createRecordsInputPathProperty)
+				);
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"recordsInputPath",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const recordsInputPathNode = utils.findRootNodesByName(
+				j,
+				ast,
+				"recordsInputPath"
+			);
+			if (
+				recordsInputPathNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"recordsInputPath"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				recordsInputPathNode.size() !== 0 &&
+				webpackProperties.length > 0
+			) {
+				return utils
+					.findRootNodesByName(j, ast, "recordsInputPath")
+					.forEach(p => {
+						j(p).replaceWith(
+							j.property(
+								"init",
+								utils.createIdentifierOrLiteral(j, "recordsInputPath"),
+								utils.createIdentifierOrLiteral(j, webpackProperties)
+							)
+						);
+					});
+			} else {
+				return recordsInputPathTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_recordsOutputPath.js.html b/docs/init_transformations_other_recordsOutputPath.js.html new file mode 100644 index 00000000000..267cadc6219 --- /dev/null +++ b/docs/init_transformations_other_recordsOutputPath.js.html @@ -0,0 +1,151 @@ + + + + + JSDoc: Source: init/transformations/other/recordsOutputPath.js + + + + + + + + + + +
+ +

Source: init/transformations/other/recordsOutputPath.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for recordsOutputPath. Finds the recordsOutputPath property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function recordsOutputPathTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createRecordsOutputPathProperty(p) {
+		utils.pushCreateProperty(j, p, "recordsOutputPath", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "recordsOutputPath");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(null, p, createRecordsOutputPathProperty)
+				);
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"recordsOutputPath",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const recordsOutputPathNode = utils.findRootNodesByName(
+				j,
+				ast,
+				"recordsOutputPath"
+			);
+			if (
+				recordsOutputPathNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"recordsOutputPath"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				recordsOutputPathNode.size() !== 0 &&
+				webpackProperties.length > 0
+			) {
+				return utils
+					.findRootNodesByName(j, ast, "recordsOutputPath")
+					.forEach(p => {
+						j(p).replaceWith(
+							j.property(
+								"init",
+								utils.createIdentifierOrLiteral(j, "recordsOutputPath"),
+								utils.createIdentifierOrLiteral(j, webpackProperties)
+							)
+						);
+					});
+			} else {
+				return recordsOutputPathTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_other_recordsPath.js.html b/docs/init_transformations_other_recordsPath.js.html new file mode 100644 index 00000000000..d72f53c78a9 --- /dev/null +++ b/docs/init_transformations_other_recordsPath.js.html @@ -0,0 +1,140 @@ + + + + + JSDoc: Source: init/transformations/other/recordsPath.js + + + + + + + + + + +
+ +

Source: init/transformations/other/recordsPath.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for recordsPath. Finds the recordsPath property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function recordsPathTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createRecordsPathProperty(p) {
+		utils.pushCreateProperty(j, p, "recordsPath", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "recordsPath");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createRecordsPathProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"recordsPath",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const recordsPathNode = utils.findRootNodesByName(j, ast, "recordsPath");
+			if (
+				recordsPathNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"recordsPath"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (recordsPathNode.size() !== 0 && webpackProperties.length > 0) {
+				return recordsPathNode.forEach(p => {
+					j(p).replaceWith(
+						j.property(
+							"init",
+							utils.createIdentifierOrLiteral(j, "recordsPath"),
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+				});
+			} else {
+				return recordsPathTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_output_output.js.html b/docs/init_transformations_output_output.js.html new file mode 100644 index 00000000000..0aa2dfa72c8 --- /dev/null +++ b/docs/init_transformations_output_output.js.html @@ -0,0 +1,135 @@ + + + + + JSDoc: Source: init/transformations/output/output.js + + + + + + + + + + +
+ +

Source: init/transformations/output/output.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for output. Finds the output property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function outputTransform(j, ast, webpackProperties, action) {
+	function createOutputProperty(p) {
+		utils.pushCreateProperty(j, p, "output", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "output");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createOutputProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"output",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const outputNode = utils.findRootNodesByName(j, ast, "output");
+			if (outputNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"output"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (outputNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"output"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return outputTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_performance_performance.js.html b/docs/init_transformations_performance_performance.js.html new file mode 100644 index 00000000000..2f9355e321e --- /dev/null +++ b/docs/init_transformations_performance_performance.js.html @@ -0,0 +1,143 @@ + + + + + JSDoc: Source: init/transformations/performance/performance.js + + + + + + + + + + +
+ +

Source: init/transformations/performance/performance.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for performance. Finds the performance property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function performanceTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createPerformanceProperty(p) {
+		utils.pushCreateProperty(j, p, "performance", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "performance");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createPerformanceProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"performance",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const performanceNode = utils.findRootNodesByName(j, ast, "performance");
+			if (
+				performanceNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"performance"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (performanceNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"performance"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return performanceTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_plugins_plugins.js.html b/docs/init_transformations_plugins_plugins.js.html new file mode 100644 index 00000000000..a6b266d0fcb --- /dev/null +++ b/docs/init_transformations_plugins_plugins.js.html @@ -0,0 +1,107 @@ + + + + + JSDoc: Source: init/transformations/plugins/plugins.js + + + + + + + + + + +
+ +

Source: init/transformations/plugins/plugins.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for plugins. Finds the plugins property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function pluginsTransform(j, ast, webpackProperties, action) {
+	function createPluginsProperty(p) {
+		const pluginArray = utils.createArrayWithChildren(
+			j,
+			"plugins",
+			webpackProperties,
+			true
+		);
+		return p.value.properties.push(pluginArray);
+	}
+	if (webpackProperties) {
+		if (Array.isArray(webpackProperties) && action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createPluginsProperty));
+		} else if (action === "add") {
+			const pluginsNode = utils.findRootNodesByName(j, ast, "plugins");
+			if (pluginsNode.size() !== 0) {
+				return pluginsNode.filter(p => {
+					let node = utils.createFunctionWithArguments(j, p, webpackProperties);
+					if (node) {
+						p.value.value.elements.push(node);
+					} else {
+						return null;
+					}
+				});
+			} else {
+				return pluginsTransform(j, ast, [webpackProperties], "init");
+			}
+		} else if (action === "remove") {
+			return utils
+				.findRootNodesByName(j, ast, "plugins")
+				.filter(p =>
+					p.value.value.elements.filter(name => name !== webpackProperties)
+				);
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_resolveLoader_resolveLoader.js.html b/docs/init_transformations_resolveLoader_resolveLoader.js.html new file mode 100644 index 00000000000..cb4db8c748b --- /dev/null +++ b/docs/init_transformations_resolveLoader_resolveLoader.js.html @@ -0,0 +1,136 @@ + + + + + JSDoc: Source: init/transformations/resolveLoader/resolveLoader.js + + + + + + + + + + +
+ +

Source: init/transformations/resolveLoader/resolveLoader.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for resolveLoader. Finds the resolveLoader property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function resolveLoaderTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createResolveLoaderProperty(p) {
+		if (typeof webpackProperties === "string") {
+			return utils.pushCreateProperty(j, p, "resolveLoader", webpackProperties);
+		}
+		if (Array.isArray(webpackProperties)) {
+			const externalArray = utils.createArrayWithChildren(
+				j,
+				"resolveLoader",
+				webpackProperties,
+				true
+			);
+			return p.value.properties.push(externalArray);
+		} else {
+			utils.pushCreateProperty(j, p, "resolveLoader", j.objectExpression([]));
+			return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader");
+		}
+	}
+	function editResolveLoaderProperty(p) {
+		return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader", true);
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createResolveLoaderProperty));
+		} else if (action === "add") {
+			const resolveLoaderNode = utils.findRootNodesByName(
+				j,
+				ast,
+				"resolveLoader"
+			);
+			if (
+				resolveLoaderNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.isAssignment(null, p, editResolveLoaderProperty));
+			} else if (resolveLoaderNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"resolveLoader"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return resolveLoaderTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_resolve_resolve.js.html b/docs/init_transformations_resolve_resolve.js.html new file mode 100644 index 00000000000..93f5b8b6a6f --- /dev/null +++ b/docs/init_transformations_resolve_resolve.js.html @@ -0,0 +1,124 @@ + + + + + JSDoc: Source: init/transformations/resolve/resolve.js + + + + + + + + + + +
+ +

Source: init/transformations/resolve/resolve.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for resolve. Finds the resolve property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function resolveTransform(j, ast, webpackProperties, action) {
+	function createResolveProperty(p) {
+		if (typeof webpackProperties === "string") {
+			return utils.pushCreateProperty(j, p, "resolve", webpackProperties);
+		}
+		if (Array.isArray(webpackProperties)) {
+			const externalArray = utils.createArrayWithChildren(
+				j,
+				"resolve",
+				webpackProperties,
+				true
+			);
+			return p.value.properties.push(externalArray);
+		} else {
+			utils.pushCreateProperty(j, p, "resolve", j.objectExpression([]));
+			return utils.pushObjectKeys(j, p, webpackProperties, "resolve");
+		}
+	}
+	function editResolveProperty(p) {
+		return utils.pushObjectKeys(j, p, webpackProperties, "resolve", true);
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createResolveProperty));
+		} else if (action === "add") {
+			const resolveNode = utils.findRootNodesByName(j, ast, "resolve");
+			if (resolveNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.isAssignment(null, p, editResolveProperty));
+			} else if (resolveNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"resolve"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return resolveTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_stats_stats.js.html b/docs/init_transformations_stats_stats.js.html new file mode 100644 index 00000000000..8e6a93a621d --- /dev/null +++ b/docs/init_transformations_stats_stats.js.html @@ -0,0 +1,135 @@ + + + + + JSDoc: Source: init/transformations/stats/stats.js + + + + + + + + + + +
+ +

Source: init/transformations/stats/stats.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for stats. Finds the stats property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function statsTransform(j, ast, webpackProperties, action) {
+	function createStatsProperty(p) {
+		utils.pushCreateProperty(j, p, "stats", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "stats");
+	}
+	if (webpackProperties) {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createStatsProperty));
+		} else if (action === "init" && webpackProperties.length) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"stats",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const statsNode = utils.findRootNodesByName(j, ast, "stats");
+			if (statsNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"stats"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (statsNode.size() !== 0 && webpackProperties.length) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"stats"
+					)
+					.forEach(p => {
+						j(p).replaceWith(
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						);
+					});
+			} else {
+				return statsTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_target_target.js.html b/docs/init_transformations_target_target.js.html new file mode 100644 index 00000000000..767569b988c --- /dev/null +++ b/docs/init_transformations_target_target.js.html @@ -0,0 +1,106 @@ + + + + + JSDoc: Source: init/transformations/target/target.js + + + + + + + + + + +
+ +

Source: init/transformations/target/target.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for target. Finds the target property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function targetTransform(j, ast, webpackProperties, action) {
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"target",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const targetNode = utils.findRootNodesByName(j, ast, "target");
+			if (targetNode.size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"target",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return targetTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_top-scope_top-scope.js.html b/docs/init_transformations_top-scope_top-scope.js.html new file mode 100644 index 00000000000..d59dee86806 --- /dev/null +++ b/docs/init_transformations_top-scope_top-scope.js.html @@ -0,0 +1,80 @@ + + + + + JSDoc: Source: init/transformations/top-scope/top-scope.js + + + + + + + + + + +
+ +

Source: init/transformations/top-scope/top-scope.js

+ + + + + + +
+
+
/**
+ *
+ * Get an property named topScope from yeoman and inject it to the top scope of
+ * the config, outside module.exports
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function(j, ast, webpackProperties, action) {
+	function createTopScopeProperty(p) {
+		webpackProperties.forEach(n => {
+			if (
+				!p.value.body[0].declarations ||
+				n.indexOf(p.value.body[0].declarations[0].id.name) <= 0
+			) {
+				p.value.body.splice(-1, 0, n);
+			}
+		});
+	}
+	if (webpackProperties) {
+		return ast.find(j.Program).filter(p => createTopScopeProperty(p));
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_watch_watch.js.html b/docs/init_transformations_watch_watch.js.html new file mode 100644 index 00000000000..cde222873b2 --- /dev/null +++ b/docs/init_transformations_watch_watch.js.html @@ -0,0 +1,136 @@ + + + + + JSDoc: Source: init/transformations/watch/watch.js + + + + + + + + + + +
+ +

Source: init/transformations/watch/watch.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for watch. Finds the watch property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function watchTransform(j, ast, webpackProperties, action) {
+	function createWatchProperty(p) {
+		utils.pushCreateProperty(j, p, "watch", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "watch");
+	}
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createWatchProperty));
+		} else if (action === "init" && typeof webpackProperties === "boolean") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"watch",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const watchNode = utils.findRootNodesByName(j, ast, "watch");
+			if (watchNode.size() !== 0 && typeof webpackProperties === "object") {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"watch"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				watchNode.size() !== 0 &&
+				(webpackProperties.length || typeof webpackProperties === "boolean")
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"watch",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return watchTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_transformations_watch_watchOptions.js.html b/docs/init_transformations_watch_watchOptions.js.html new file mode 100644 index 00000000000..162e6c46239 --- /dev/null +++ b/docs/init_transformations_watch_watchOptions.js.html @@ -0,0 +1,151 @@ + + + + + JSDoc: Source: init/transformations/watch/watchOptions.js + + + + + + + + + + +
+ +

Source: init/transformations/watch/watchOptions.js

+ + + + + + +
+
+
"use strict";
+
+const utils = require("../../../utils/ast-utils");
+
+/**
+ *
+ * Transform for watchOptions. Finds the watchOptions property from yeoman and creates a
+ * property based on what the user has given us.
+ *
+ * @param j — jscodeshift API
+ * @param ast - jscodeshift API
+ * @param {any} webpackProperties - transformation object to scaffold
+ * @param {String} action - action that indicates what to be done to the AST
+ * @returns ast - jscodeshift API
+ */
+
+module.exports = function watchOptionsTransform(
+	j,
+	ast,
+	webpackProperties,
+	action
+) {
+	function createWatchOptionsProperty(p) {
+		utils.pushCreateProperty(j, p, "watchOptions", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "watchOptions");
+	}
+	if (webpackProperties || typeof webpackProperties === "boolean") {
+		if (action === "init" && typeof webpackProperties === "object") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createWatchOptionsProperty));
+		} else if (
+			action === "init" &&
+			(webpackProperties.length || typeof webpackProperties === "boolean")
+		) {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"watchOptions",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			const watchOptionsNode = utils.findRootNodesByName(
+				j,
+				ast,
+				"watchOptions"
+			);
+			if (
+				watchOptionsNode.size() !== 0 &&
+				typeof webpackProperties === "object"
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(
+						p =>
+							utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) ===
+							"watchOptions"
+					)
+					.filter(p => {
+						Object.keys(webpackProperties).forEach(prop => {
+							utils.checkIfExistsAndAddValue(
+								j,
+								p,
+								prop,
+								utils.createIdentifierOrLiteral(j, webpackProperties[prop])
+							);
+						});
+						return ast;
+					});
+			} else if (
+				watchOptionsNode.size() !== 0 &&
+				(typeof webpackProperties === "boolean" || webpackProperties.length > 0)
+			) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.checkIfExistsAndAddValue(
+							j,
+							p,
+							"watchOptions",
+							utils.createIdentifierOrLiteral(j, webpackProperties)
+						)
+					);
+			} else {
+				return watchOptionsTransform(j, ast, webpackProperties, "init");
+			}
+		} else if (action === "remove") {
+			// TODO
+		} else if (action === "update") {
+			// TODO
+		}
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/scripts/linenumber.js b/docs/scripts/linenumber.js new file mode 100644 index 00000000000..8d52f7eafdb --- /dev/null +++ b/docs/scripts/linenumber.js @@ -0,0 +1,25 @@ +/*global document */ +(function() { + var source = document.getElementsByClassName('prettyprint source linenums'); + var i = 0; + var lineNumber = 0; + var lineId; + var lines; + var totalLines; + var anchorHash; + + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; + + for (; i < totalLines; i++) { + lineNumber++; + lineId = 'line' + lineNumber; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } + } + } +})(); diff --git a/docs/scripts/prettify/Apache-License-2.0.txt b/docs/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 00000000000..d6456956733 --- /dev/null +++ b/docs/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/scripts/prettify/lang-css.js b/docs/scripts/prettify/lang-css.js new file mode 100644 index 00000000000..041e1f59067 --- /dev/null +++ b/docs/scripts/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/docs/scripts/prettify/prettify.js b/docs/scripts/prettify/prettify.js new file mode 100644 index 00000000000..eef5ad7e6a0 --- /dev/null +++ b/docs/scripts/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p th:last-child { border-right: 1px solid #ddd; } + +.ancestors, .attribs { color: #999; } +.ancestors a, .attribs a +{ + color: #999 !important; + text-decoration: none; +} + +.clear +{ + clear: both; +} + +.important +{ + font-weight: bold; + color: #950B02; +} + +.yes-def { + text-indent: -1000px; +} + +.type-signature { + color: #aaa; +} + +.name, .signature { + font-family: Consolas, Monaco, 'Andale Mono', monospace; +} + +.details { margin-top: 14px; border-left: 2px solid #DDD; } +.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } +.details dd { margin-left: 70px; } +.details ul { margin: 0; } +.details ul { list-style-type: none; } +.details li { margin-left: 30px; padding-top: 6px; } +.details pre.prettyprint { margin: 0 } +.details .object-value { padding-top: 0; } + +.description { + margin-bottom: 1em; + margin-top: 1em; +} + +.code-caption +{ + font-style: italic; + font-size: 107%; + margin: 0; +} + +.prettyprint +{ + border: 1px solid #ddd; + width: 80%; + overflow: auto; +} + +.prettyprint.source { + width: inherit; +} + +.prettyprint code +{ + font-size: 100%; + line-height: 18px; + display: block; + padding: 4px 12px; + margin: 0; + background-color: #fff; + color: #4D4E53; +} + +.prettyprint code span.line +{ + display: inline-block; +} + +.prettyprint.linenums +{ + padding-left: 70px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.prettyprint.linenums ol +{ + padding-left: 0; +} + +.prettyprint.linenums li +{ + border-left: 3px #ddd solid; +} + +.prettyprint.linenums li.selected, +.prettyprint.linenums li.selected * +{ + background-color: lightyellow; +} + +.prettyprint.linenums li * +{ + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} + +.params .name, .props .name, .name code { + color: #4D4E53; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 100%; +} + +.params td.description > p:first-child, +.props td.description > p:first-child +{ + margin-top: 0; + padding-top: 0; +} + +.params td.description > p:last-child, +.props td.description > p:last-child +{ + margin-bottom: 0; + padding-bottom: 0; +} + +.disabled { + color: #454545; +} diff --git a/docs/styles/prettify-jsdoc.css b/docs/styles/prettify-jsdoc.css new file mode 100644 index 00000000000..5a2526e3748 --- /dev/null +++ b/docs/styles/prettify-jsdoc.css @@ -0,0 +1,111 @@ +/* JSDoc prettify.js theme */ + +/* plain text */ +.pln { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* string content */ +.str { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a keyword */ +.kwd { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a comment */ +.com { + font-weight: normal; + font-style: italic; +} + +/* a type name */ +.typ { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a literal value */ +.lit { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* punctuation */ +.pun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp open bracket */ +.opn { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* lisp close bracket */ +.clo { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a markup tag name */ +.tag { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute name */ +.atn { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a markup attribute value */ +.atv { + color: #006400; + font-weight: normal; + font-style: normal; +} + +/* a declaration */ +.dec { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* a variable name */ +.var { + color: #000000; + font-weight: normal; + font-style: normal; +} + +/* a function name */ +.fun { + color: #000000; + font-weight: bold; + font-style: normal; +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; +} diff --git a/docs/styles/prettify-tomorrow.css b/docs/styles/prettify-tomorrow.css new file mode 100644 index 00000000000..b6f92a78db9 --- /dev/null +++ b/docs/styles/prettify-tomorrow.css @@ -0,0 +1,132 @@ +/* Tomorrow Theme */ +/* Original theme - https://github.com/chriskempson/tomorrow-theme */ +/* Pretty printing styles. Used with prettify.js. */ +/* SPAN elements with the classes below are added by prettyprint. */ +/* plain text */ +.pln { + color: #4d4d4c; } + +@media screen { + /* string content */ + .str { + color: #718c00; } + + /* a keyword */ + .kwd { + color: #8959a8; } + + /* a comment */ + .com { + color: #8e908c; } + + /* a type name */ + .typ { + color: #4271ae; } + + /* a literal value */ + .lit { + color: #f5871f; } + + /* punctuation */ + .pun { + color: #4d4d4c; } + + /* lisp open bracket */ + .opn { + color: #4d4d4c; } + + /* lisp close bracket */ + .clo { + color: #4d4d4c; } + + /* a markup tag name */ + .tag { + color: #c82829; } + + /* a markup attribute name */ + .atn { + color: #f5871f; } + + /* a markup attribute value */ + .atv { + color: #3e999f; } + + /* a declaration */ + .dec { + color: #f5871f; } + + /* a variable name */ + .var { + color: #c82829; } + + /* a function name */ + .fun { + color: #4271ae; } } +/* Use higher contrast and text-weight for printable form. */ +@media print, projection { + .str { + color: #060; } + + .kwd { + color: #006; + font-weight: bold; } + + .com { + color: #600; + font-style: italic; } + + .typ { + color: #404; + font-weight: bold; } + + .lit { + color: #044; } + + .pun, .opn, .clo { + color: #440; } + + .tag { + color: #006; + font-weight: bold; } + + .atn { + color: #404; } + + .atv { + color: #060; } } +/* Style */ +/* +pre.prettyprint { + background: white; + font-family: Consolas, Monaco, 'Andale Mono', monospace; + font-size: 12px; + line-height: 1.5; + border: 1px solid #ccc; + padding: 10px; } +*/ + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin-top: 0; + margin-bottom: 0; } + +/* IE indents via margin-left */ +li.L0, +li.L1, +li.L2, +li.L3, +li.L4, +li.L5, +li.L6, +li.L7, +li.L8, +li.L9 { + /* */ } + +/* Alternate shading for lines */ +li.L1, +li.L3, +li.L5, +li.L7, +li.L9 { + /* */ } diff --git a/docs/utils_ast-utils.js.html b/docs/utils_ast-utils.js.html new file mode 100644 index 00000000000..67fc45dad44 --- /dev/null +++ b/docs/utils_ast-utils.js.html @@ -0,0 +1,813 @@ + + + + + JSDoc: Source: utils/ast-utils.js + + + + + + + + + + +
+ +

Source: utils/ast-utils.js

+ + + + + + +
+
+
//      
+// eslint-disable-next-line node/no-unsupported-features
+             
+             
+       
+           
+          
+             
+                     
+                   
+                 
+                  
+
+const hashtable = require("./hashtable");
+
+function safeTraverse(obj        , paths          )       {
+	let val         = obj;
+	let idx         = 0;
+
+	while (idx < paths.length) {
+		if (!val) {
+			return null;
+		}
+		val = val[paths[idx]];
+		idx++;
+	}
+	return val;
+}
+
+// Convert nested MemberExpressions to strings like webpack.optimize.DedupePlugin
+function memberExpressionToPathString(path        )         {
+	if (path && path.object) {
+		return [memberExpressionToPathString(path.object), path.property.name].join(
+			"."
+		);
+	}
+	return path.name;
+}
+
+// Convert Array<string> like ['webpack', 'optimize', 'DedupePlugin'] to nested MemberExpressions
+function pathsToMemberExpression(j             , paths          ) {
+	if (!paths.length) {
+		return null;
+	} else if (paths.length === 1) {
+		return j.identifier(paths[0]);
+	} else {
+		const first = paths.slice(0, 1);
+		const rest = paths.slice(1);
+		return j.memberExpression(
+			pathsToMemberExpression(j, rest),
+			pathsToMemberExpression(j, first)
+		);
+	}
+}
+
+/**
+ *
+ * Find paths that match `new name.space.PluginName()` for a
+ * given array of plugin names
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} node - Node to start search from
+ * @param {String[]} pluginNamesArray - Array of plugin names like `webpack.LoaderOptionsPlugin`
+ * @returns {Node} Node that has the pluginName
+ */
+
+function findPluginsByName(
+	j             ,
+	node          ,
+	pluginNamesArray          
+)           {
+	return node.find(j.NewExpression).filter(path => {
+		return pluginNamesArray.some(
+			plugin =>
+				memberExpressionToPathString(path.get("callee").value) === plugin
+		);
+	});
+}
+
+/**
+ *
+ * Finds the path to the `name: []` node
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} node - Node to start search from
+ * @param {String} propName - property to search for
+ * @returns {Node} found node and
+ */
+
+function findRootNodesByName(
+	j             ,
+	node          ,
+	propName        
+)                      {
+	return node.find(j.Property, { key: { name: propName } });
+}
+
+/**
+ *
+ * Creates an Object's property with a given key and value
+ *
+ * @param {any} j — jscodeshift API
+ * @param {String | Number} key - Property key
+ * @param {String | Number | Boolean} value - Property value
+ * @returns {Node}
+ */
+
+function createProperty(
+	j             ,
+	key                 ,
+	value     
+)               {
+	return j.property(
+		"init",
+		createIdentifierOrLiteral(j, key),
+		createLiteral(j, value)
+	);
+}
+
+/**
+ *
+ * Creates an appropriate literal property
+ *
+ * @param {any} j — jscodeshift API
+ * @param {String | Boolean | Number} val
+ * @returns {Node}
+ */
+
+function createLiteral(
+	j             ,
+	val                           
+)                  {
+	let literalVal      = val;
+	// We'll need String to native type conversions
+	if (typeof val === "string") {
+		// 'true' => true
+		if (val === "true") literalVal = true;
+		// 'false' => false
+		if (val === "false") literalVal = false;
+		// '1' => 1
+		if (!isNaN(Number(val))) literalVal = Number(val);
+	}
+	return j.literal(literalVal);
+}
+
+/**
+ *
+ * Creates an appropriate identifier or literal property
+ *
+ * @param {any} j — jscodeshift API
+ * @param {String | Boolean | Number} val
+ * @returns {Node}
+ */
+
+function createIdentifierOrLiteral(j             , val     )      {
+	// IPath<IIdentifier> | IPath<ILiteral> doesn't work, find another way
+	let literalVal = val;
+	// We'll need String to native type conversions
+	if (typeof val === "string" || val.__paths) {
+		// 'true' => true
+		if (val === "true") {
+			literalVal = true;
+			return j.literal(literalVal);
+		}
+		// 'false' => false
+		if (val === "false") {
+			literalVal = false;
+			return j.literal(literalVal);
+		}
+		// '1' => 1
+		if (!isNaN(Number(val))) {
+			literalVal = Number(val);
+			return j.literal(literalVal);
+		}
+
+		if (val.__paths) {
+			return createExternalRegExp(j, val);
+		} else {
+			// Use identifier instead
+			// TODO: Check if literalVal is a valid Identifier!
+			return j.identifier(literalVal);
+		}
+	}
+	return j.literal(literalVal);
+}
+
+/**
+ *
+ * Findes or creates a node for a given plugin name string with options object
+ * If plugin decalaration already exist, options are merged.
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} rootNodePath - `plugins: []` NodePath where plugin should be added. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths
+ * @param {String} pluginName - ex. `webpack.LoaderOptionsPlugin`
+ * @param {Object} options - plugin options
+ * @returns {Void}
+ */
+
+function createOrUpdatePluginByName(
+	j             ,
+	rootNodePath          ,
+	pluginName        ,
+	options     
+) {
+	const pluginInstancePath = findPluginsByName(j, j(rootNodePath), [
+		pluginName
+	]);
+	let optionsProps;
+	if (options) {
+		optionsProps = Object.keys(options).map(key => {
+			return createProperty(j, key, options[key]);
+		});
+	}
+
+	// If plugin declaration already exist
+	if (pluginInstancePath.size()) {
+		pluginInstancePath.forEach(path => {
+			// There are options we want to pass as argument
+			if (optionsProps) {
+				const args = path.value.arguments;
+				if (args.length) {
+					// Plugin is called with object as arguments
+					// we will merge those objects
+					let currentProps = j(path)
+						.find(j.ObjectExpression)
+						.get("properties");
+
+					optionsProps.forEach((opt     ) => {
+						// Search for same keys in the existing object
+						const existingProps = j(currentProps)
+							.find(j.Identifier)
+							.filter(path => opt.key.value === path.value.name);
+
+						if (existingProps.size()) {
+							// Replacing values for the same key
+							existingProps.forEach(path => {
+								j(path.parent).replaceWith(opt);
+							});
+						} else {
+							// Adding new key:values
+							currentProps.value.push(opt);
+						}
+					});
+				} else {
+					// Plugin is called without arguments
+					args.push(j.objectExpression(optionsProps));
+				}
+			}
+		});
+	} else {
+		let argumentsArray = [];
+		if (optionsProps) {
+			argumentsArray = [j.objectExpression(optionsProps)];
+		}
+		const loaderPluginInstance = j.newExpression(
+			pathsToMemberExpression(j, pluginName.split(".").reverse()),
+			argumentsArray
+		);
+		rootNodePath.value.elements.push(loaderPluginInstance);
+	}
+}
+
+/**
+ *
+ * Finds the variable to which a third party plugin is assigned to
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} rootNode - `plugins: []` Root Node. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths
+ * @param {String} pluginPackageName - ex. `extract-text-plugin`
+ * @returns {String} variable name - ex. 'var s = require(s) gives "s"`
+ */
+
+function findVariableToPlugin(
+	j             ,
+	rootNode          ,
+	pluginPackageName        
+)          {
+	const moduleVarNames                        = rootNode
+		.find(j.VariableDeclarator)
+		.filter(j.filters.VariableDeclarator.requiresModule(pluginPackageName))
+		.nodes();
+	if (moduleVarNames.length === 0) return null;
+	return moduleVarNames.pop().id.name;
+}
+
+/**
+ *
+ * Returns true if type is given type
+ * @param {Node} path - pathNode
+ * @param {String} type - node type
+ * @returns {Boolean}
+ */
+
+function isType(path          , type        )          {
+	return path.type === type;
+}
+
+function findObjWithOneOfKeys(p          , keyNames          )          {
+	return p.value.properties.reduce((predicate, prop) => {
+		const name = prop.key.name;
+		return keyNames.indexOf(name) > -1 || predicate;
+	}, false);
+}
+
+/**
+ *
+ * Returns constructed require symbol
+ * @param {any} j — jscodeshift API
+ * @param {String} constName - Name of require
+ * @param {String} packagePath - path of required package
+ * @returns {Node} - the created ast
+ */
+
+function getRequire(
+	j             ,
+	constName        ,
+	packagePath        
+)                             {
+	return j.variableDeclaration("const", [
+		j.variableDeclarator(
+			j.identifier(constName),
+			j.callExpression(j.identifier("require"), [j.literal(packagePath)])
+		)
+	]);
+}
+
+/**
+ *
+ * If a prop exists, it overrides it, else it creates a new one
+ * @param {any} j — jscodeshift API
+ * @param {Node} node - objectexpression to check
+ * @param {String} key - Key of the property
+ * @param {String} value - computed value of the property
+ * @returns {Void}
+ */
+
+function checkIfExistsAndAddValue(
+	j             ,
+	node                          ,
+	key        ,
+	value        
+)       {
+	const existingProp = node.value.properties.filter(
+		prop => prop.key.name === key
+	);
+	let prop;
+	if (existingProp.length > 0) {
+		prop = existingProp[0];
+		prop.value = value;
+	} else {
+		prop = j.property("init", j.identifier(key), value);
+		node.value.properties.push(prop);
+	}
+}
+
+/**
+ *
+ * Creates an empty array
+ * @param {any} j — jscodeshift API
+ * @param {String} key - array name
+ * @returns {Array} arr - An empty array
+ */
+function createEmptyArrayProperty(
+	j             ,
+	key        
+)                              {
+	return j.property("init", j.identifier(key), j.arrayExpression([]));
+}
+
+/**
+ *
+ * Creates an array and iterates on an object with properties
+ *
+ * @param {any} j — jscodeshift API
+ * @param {String} key - object name
+ * @param {String} subProps - computed value of the property
+ * @param {Boolean} shouldDropKeys - bool to ask to use obj.keys or not
+ * @returns {Array} arr - An array with the object properties
+ */
+
+function createArrayWithChildren(
+	j             ,
+	key        ,
+	subProps                   ,
+	shouldDropKeys         
+) {
+	let arr = createEmptyArrayProperty(j, key);
+	if (shouldDropKeys) {
+		subProps.forEach((subProperty          ) => {
+			let objectOfArray = j.objectExpression([]);
+			if (typeof subProperty !== "string") {
+				loopThroughObjects(j, objectOfArray, subProperty);
+				arr.value.elements.push(objectOfArray);
+			} else {
+				return arr.value.elements.push(
+					createIdentifierOrLiteral(j, subProperty)
+				);
+			}
+		});
+	} else {
+		Object.keys(subProps[key]).forEach(subProperty => {
+			arr.value.elements.push(
+				createIdentifierOrLiteral(j, subProps[key][subProperty])
+			);
+		});
+	}
+	return arr;
+}
+
+/**
+ *
+ * Loops through an object and adds property to an object with no identifier
+ * @param {any} j — jscodeshift API
+ * @param {Node} p - node to add value to
+ * @param {Object} obj - Object to loop through
+ * @returns {Function | Node} - Either pushes the node, or reruns until
+ * nothing is left
+ */
+
+function loopThroughObjects(
+	j             ,
+	p                   ,
+	obj        
+)       {
+	Object.keys(obj).forEach(prop => {
+		if (prop.indexOf("inject") >= 0) {
+			// TODO to insert the type of node, identifier or literal
+			const propertyExpression           = createIdentifierOrLiteral(
+				j,
+				obj[prop]
+			);
+			return p.properties.push(propertyExpression);
+		}
+		// eslint-disable-next-line no-irregular-whitespace
+		if (typeof obj[prop] !== "object" || obj[prop] instanceof RegExp) {
+			p.properties.push(
+				createObjectWithSuppliedProperty(
+					j,
+					prop,
+					createIdentifierOrLiteral(j, obj[prop])
+				)
+			);
+		} else if (Array.isArray(obj[prop])) {
+			let arrayProp = createArrayWithChildren(j, prop, obj[prop], true);
+			p.properties.push(arrayProp);
+		} else {
+			let objectBlock = j.objectExpression([]);
+			let propertyOfBlock = createObjectWithSuppliedProperty(
+				j,
+				prop,
+				objectBlock
+			);
+			loopThroughObjects(j, objectBlock, obj[prop]);
+			p.properties.push(propertyOfBlock);
+		}
+	});
+}
+
+/**
+ *
+ * Creates an object with an supplied property as parameter
+ *
+ * @param {any} j — jscodeshift API
+ * @param {String} key - object name
+ * @param {Node} prop - property to be added
+ * @returns {Node} - An property with the supplied property
+ */
+
+function createObjectWithSuppliedProperty(
+	j             ,
+	key        ,
+	prop     
+)               {
+	return j.property("init", j.identifier(key), prop);
+}
+
+/**
+ *
+ * Finds a regexp property with an already parsed AST from the user
+ * @param {any} j — jscodeshift API
+ * @param {String} prop - property to find the value at
+ * @returns {Node} - A literal node with the found regexp
+ */
+
+function createExternalRegExp(j             , prop     )                  {
+	let regExpProp = prop.__paths[0].value.program.body[0].expression;
+	return j.literal(regExpProp.value);
+}
+
+/**
+ *
+ * Creates a property and pushes the value to a node
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} p - Node to push against
+ * @param {String} key - key used as identifier
+ * @param {String} val - property value
+ * @returns {Node} - Returns node the pushed property
+ */
+
+function pushCreateProperty(
+	j             ,
+	p                          ,
+	key        ,
+	val     
+)         {
+	let property                                               ;
+	const findProp = findRootNodesByName(j, j(p), key);
+	if (findProp.size()) {
+		findProp.filter(p => {
+			p.value.value = createIdentifierOrLiteral(j, val);
+		});
+	} else {
+		if (val.hasOwnProperty("type")) {
+			property = val;
+		} else {
+			property = createIdentifierOrLiteral(j, val);
+		}
+		return p.value.properties.push(
+			createObjectWithSuppliedProperty(j, key, property)
+		);
+	}
+}
+
+/**
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} p - path to push
+ * @param {Object} webpackProperties - The object to loop over
+ * @param {String} name - Key that will be the identifier we find and add values to
+ * @returns {Node | Function} Returns a function that will push a node if
+ * subProperty is an array, else it will invoke a function that will push a single node
+ */
+
+function pushObjectKeys(
+	j             ,
+	p          ,
+	webpackProperties        ,
+	name        ,
+	reassign     
+)      {
+	p.value.properties
+		.filter(n => safeTraverse(n, ["key", "name"]) === name)
+		.forEach(prop => {
+			Object.keys(webpackProperties).forEach(webpackProp => {
+				try {
+					webpackProperties[webpackProp] = JSON.parse(
+						webpackProperties[webpackProp]
+					);
+				} catch (err) {}
+
+				if (webpackProp.indexOf("inject") >= 0) {
+					if (reassign) {
+						return checkIfExistsAndAddValue(
+							j,
+							prop,
+							webpackProp,
+							webpackProperties[webpackProp]
+						);
+					} else {
+						return prop.value.properties.push(
+							createIdentifierOrLiteral(j, webpackProperties[webpackProp])
+						);
+					}
+				} else if (Array.isArray(webpackProperties[webpackProp])) {
+					if (reassign) {
+						return j(p)
+							.find(j.Property, { key: { name: webpackProp } })
+							.filter(props => props.value.key.name === webpackProp)
+							.forEach(property => {
+								let markedProps = [];
+								let propsToMerge = [];
+								property.value.value.elements.forEach(elem => {
+									if (elem.value) {
+										markedProps.push(elem.value);
+									}
+								});
+								webpackProperties[webpackProp].forEach(underlyingprop => {
+									if (typeof underlyingprop === "object") {
+										//TODO loaders
+										return;
+									}
+									if (!markedProps.includes(underlyingprop)) {
+										propsToMerge.push(underlyingprop);
+									}
+								});
+								const hashtableForProps = hashtable(propsToMerge);
+								hashtableForProps.forEach(elem => {
+									property.value.value.elements.push(
+										createIdentifierOrLiteral(j, elem)
+									);
+								});
+							});
+					} else {
+						const propArray = createArrayWithChildren(
+							j,
+							webpackProp,
+							webpackProperties[webpackProp],
+							true
+						);
+						return prop.value.properties.push(propArray);
+					}
+				} else if (
+					typeof webpackProperties[webpackProp] !== "object" ||
+					webpackProperties[webpackProp].__paths ||
+					webpackProperties[webpackProp] instanceof RegExp
+				) {
+					return pushCreateProperty(
+						j,
+						prop,
+						webpackProp,
+						webpackProperties[webpackProp]
+					);
+				} else {
+					if (!reassign) {
+						pushCreateProperty(j, prop, webpackProp, j.objectExpression([]));
+					}
+					return pushObjectKeys(
+						j,
+						prop,
+						webpackProperties[webpackProp],
+						webpackProp,
+						reassign
+					);
+				}
+			});
+		});
+}
+
+/**
+ *
+ * Checks if we are at the correct node and later invokes a callback
+ * for the transforms to either use their own transform function or
+ * use pushCreateProperty if the transform doesn't expect any properties
+ *
+ * @param {any} j — jscodeshift API
+ * @param {Node} p - Node to push against
+ * @param {Function} cb - callback to be invoked
+ * @param {String} identifier - key to use as property
+ * @param {Object} property - WebpackOptions that later will be converted via
+ * pushCreateProperty via WebpackOptions[identifier]
+ * @returns {Function} cb - Returns the callback and pushes a new node
+ */
+
+function isAssignment(
+	j             ,
+	p          ,
+	cb            ,
+	identifier        ,
+	property        
+)      {
+	if (p.parent.value.type === "AssignmentExpression") {
+		if (j) {
+			return cb(j, p, identifier, property);
+		} else {
+			return cb(p);
+		}
+	}
+}
+
+/**
+ *
+ * Creates a function call with arguments
+ * @param {any} j — jscodeshift API
+ * @param {Node} p - Node to push against
+ * @param {String} name - Name for the given function
+ * @returns {Node} -  Returns the node for the created
+ * function
+ */
+
+function createFunctionWithArguments(
+	j             ,
+	p          ,
+	name        
+)      {
+	if (typeof name === "object") {
+		let node;
+		Object.keys(name).forEach(key => {
+			const pluginExist = findPluginsByName(j, j(p), [key]);
+			if (pluginExist.size() !== 0) {
+				let pluginName =
+					key.indexOf("webpack") >= 0
+						? key.indexOf("webpack.optimize") >= 0
+							? key.replace("webpack.optimize.", " ")
+							: key.replace("webpack.", " ")
+						: key;
+				pluginExist
+					.filter(
+						p => pluginName.trim(" ") === p.value.callee.property.name.trim(" ")
+					)
+					.forEach(n => {
+						Object.keys(name[key]).forEach(subKey => {
+							const foundNode = findRootNodesByName(j, j(n), subKey);
+							if (foundNode.size() !== 0) {
+								foundNode.forEach(n => {
+									j(n).replaceWith(
+										createObjectWithSuppliedProperty(
+											j,
+											subKey,
+											createIdentifierOrLiteral(j, name[key][subKey])
+										)
+									);
+									node = createObjectWithSuppliedProperty(
+										j,
+										subKey,
+										createIdentifierOrLiteral(j, name[key][subKey])
+									);
+								});
+							} else {
+								const method = j.property(
+									"init",
+									createLiteral(j, subKey),
+									createIdentifierOrLiteral(j, name[key][subKey])
+								);
+								n.value.arguments[0].properties.push(method);
+								node = null;
+								//node.arguments.push(j.objectExpression([method]));
+							}
+						});
+					});
+				return node;
+			}
+			node = j.newExpression(j.identifier(key), []);
+			return Object.keys(name[key]).forEach(subKey => {
+				const method = createObjectWithSuppliedProperty(
+					j,
+					subKey,
+					createIdentifierOrLiteral(j, name[key][subKey])
+				);
+				node.arguments.push(j.objectExpression([method]));
+			});
+		});
+		return node;
+	}
+	return j.callExpression(j.identifier(name), [
+		j.literal("/* Add your arguments here */")
+	]);
+}
+
+module.exports = {
+	safeTraverse,
+	createProperty,
+	findPluginsByName,
+	findRootNodesByName,
+	createOrUpdatePluginByName,
+	findVariableToPlugin,
+	isType,
+	createLiteral,
+	createIdentifierOrLiteral,
+	findObjWithOneOfKeys,
+	getRequire,
+	checkIfExistsAndAddValue,
+	createArrayWithChildren,
+	createEmptyArrayProperty,
+	createObjectWithSuppliedProperty,
+	createExternalRegExp,
+	createFunctionWithArguments,
+	pushCreateProperty,
+	pushObjectKeys,
+	isAssignment,
+	loopThroughObjects
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_copy-utils.js.html b/docs/utils_copy-utils.js.html new file mode 100644 index 00000000000..705f47664fe --- /dev/null +++ b/docs/utils_copy-utils.js.html @@ -0,0 +1,108 @@ + + + + + JSDoc: Source: utils/copy-utils.js + + + + + + + + + + +
+ +

Source: utils/copy-utils.js

+ + + + + + +
+
+
var path = require("path");
+
+/**
+ * Takes in a file path in the `./templates` directory. Copies that
+ * file to the destination, with the `.tpl` extension stripped.
+ *
+ * @param {Generator} generator A Yeoman Generator instance
+ * @param {string} templateDir Absolute path to template directory
+ * @returns {Function} A curried function that takes a file path and copies it
+ */
+var generatorCopy = (
+	generator,
+	templateDir
+) => /** @param {string} filePath */ filePath => {
+	var sourceParts = templateDir.split(path.delimiter);
+	sourceParts.push.apply(sourceParts, filePath.split("/"));
+	var targetParts = path.dirname(filePath).split("/");
+	targetParts.push(path.basename(filePath, ".tpl"));
+
+	generator.fs.copy(
+		path.join.apply(null, sourceParts),
+		generator.destinationPath(path.join.apply(null, targetParts))
+	);
+};
+
+/**
+ * Takes in a file path in the `./templates` directory. Copies that
+ * file to the destination, with the `.tpl` extension and `_` prefix
+ * stripped. Passes `this.props` to the template.
+ *
+ * @param {Generator} generator A Yeoman Generator instance
+ * @param {string} templateDir Absolute path to template directory
+ * @param {any} templateData An object containing the data passed to
+ * the template files.
+ * @returns {Function} A curried function that takes a file path and copies it
+ */
+var generatorCopyTpl = (
+	generator,
+	templateDir,
+	templateData
+) => /** @param {string} filePath */ filePath => {
+	var sourceParts = templateDir.split(path.delimiter);
+	sourceParts.push.apply(sourceParts, filePath.split("/"));
+	var targetParts = path.dirname(filePath).split("/");
+	targetParts.push(path.basename(filePath, ".tpl").slice(1));
+
+	generator.fs.copyTpl(
+		path.join.apply(null, sourceParts),
+		generator.destinationPath(path.join.apply(null, targetParts)),
+		templateData
+	);
+};
+
+module.exports = {
+	generatorCopy,
+	generatorCopyTpl
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_defineTest.js.html b/docs/utils_defineTest.js.html new file mode 100644 index 00000000000..5afc93254a9 --- /dev/null +++ b/docs/utils_defineTest.js.html @@ -0,0 +1,156 @@ + + + + + JSDoc: Source: utils/defineTest.js + + + + + + + + + + +
+ +

Source: utils/defineTest.js

+ + + + + + +
+
+
"use strict";
+
+const fs = require("fs");
+const path = require("path");
+
+/**
+ * Utility function to run a jscodeshift script within a unit test.
+ * This makes several assumptions about the environment.
+ *
+ * Notes:
+ * - The test should be located in a subdirectory next to the transform itself.
+ *   Commonly tests are located in a directory called __tests__.
+ *
+ * - Test data should be located in a directory called __testfixtures__
+ *   alongside the transform and __tests__ directory.
+ * @param  {String} dirName          contains the name of the directory the test is located in. This
+ *                                   should normally be passed via __dirname.
+ * @param  {String} transformName    contains the filename of the transform being tested,
+ *                                   excluding the .js extension.
+ * @param  {String} [testFilePrefix] Optionally contains the name of the file with the test
+ *                                   data. If not specified, it defaults to the same value as `transformName`.
+ *                                   This will be suffixed with ".input.js" for the input file and ".output.js"
+ *                                   for the expected output. For example, if set to "foo", we will read the
+ *                                   "foo.input.js" file, pass this to the transform, and expect its output to
+ *                                   be equal to the contents of "foo.output.js".
+ * @param  {Object|Boolean|String} initOptions TBD
+ * @param  {String} action init, update or remove, decides how to format the AST
+ * @return {Function} Function that fires of the transforms
+ */
+function runSingleTansform(
+	dirName,
+	transformName,
+	testFilePrefix,
+	initOptions,
+	action
+) {
+	if (!testFilePrefix) {
+		testFilePrefix = transformName;
+	}
+	const fixtureDir = path.join(dirName, "__testfixtures__");
+	const inputPath = path.join(fixtureDir, testFilePrefix + ".input.js");
+	const source = fs.readFileSync(inputPath, "utf8");
+	// Assumes transform and test are on the same level
+	const module = require(path.join(dirName, transformName + ".js"));
+	// Handle ES6 modules using default export for the transform
+	const transform = module.default ? module.default : module;
+
+	// Jest resets the module registry after each test, so we need to always get
+	// a fresh copy of jscodeshift on every test run.
+	let jscodeshift = require("jscodeshift/dist/core");
+	if (module.parser) {
+		jscodeshift = jscodeshift.withParser(module.parser);
+	}
+	const ast = jscodeshift(source);
+	if (initOptions || typeof initOptions === "boolean") {
+		return transform(jscodeshift, ast, initOptions, action).toSource({
+			quote: "single"
+		});
+	}
+	return transform(jscodeshift, ast, source, action).toSource({
+		quote: "single"
+	});
+}
+
+/**
+ * Handles some boilerplate around defining a simple jest/Jasmine test for a
+ * jscodeshift transform.
+ * @param  {String} dirName          contains the name of the directory the test is located in. This
+ *                                   should normally be passed via __dirname.
+ * @param  {String} transformName    contains the filename of the transform being tested,
+ *                                   excluding the .js extension.
+ * @param  {String} [testFilePrefix] Optionally contains the name of the file with the test
+ *                                   data. If not specified, it defaults to the same value as `transformName`.
+ *                                   This will be suffixed with ".input.js" for the input file and ".output.js"
+ *                                   for the expected output. For example, if set to "foo", we will read the
+ *                                   "foo.input.js" file, pass this to the transform, and expect its output to
+ *                                   be equal to the contents of "foo.output.js".
+ * @param  {any} transformObject     Object to be transformed with the transformations
+ * @param  {String} action init, update or remove, decides how to format the AST
+ * @return {Void} Jest makes sure to execute the globally defined functions
+ */
+function defineTest(
+	dirName,
+	transformName,
+	testFilePrefix,
+	transformObject,
+	action
+) {
+	const testName = testFilePrefix
+		? `transforms correctly using "${testFilePrefix}" data`
+		: "transforms correctly";
+	describe(transformName, () => {
+		it(testName, () => {
+			const output = runSingleTansform(
+				dirName,
+				transformName,
+				testFilePrefix,
+				transformObject,
+				action
+			);
+			expect(output).toMatchSnapshot();
+		});
+	});
+}
+module.exports = defineTest;
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_hashtable.js.html b/docs/utils_hashtable.js.html new file mode 100644 index 00000000000..3e043177510 --- /dev/null +++ b/docs/utils_hashtable.js.html @@ -0,0 +1,71 @@ + + + + + JSDoc: Source: utils/hashtable.js + + + + + + + + + + +
+ +

Source: utils/hashtable.js

+ + + + + + +
+
+
/**
+ * Combined hashtable that sorts duplicate elements
+ * https://stackoverflow.com/questions/9229645/remove-duplicate-values-from-js-array
+ *
+ * @param {Array} a Array to lookup
+ * @returns {Array} A sorted array with removed dupe elements
+ */
+module.exports = function hashtable(a) {
+	var prims = { boolean: {}, number: {}, string: {} },
+		objs = [];
+
+	return a.filter(function(item) {
+		var type = typeof item;
+		if (type in prims)
+			return prims[type].hasOwnProperty(item)
+				? false
+				: (prims[type][item] = true);
+		else return objs.indexOf(item) >= 0 ? false : objs.push(item);
+	});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_modify-config-helper.js.html b/docs/utils_modify-config-helper.js.html new file mode 100644 index 00000000000..eb6080b46bd --- /dev/null +++ b/docs/utils_modify-config-helper.js.html @@ -0,0 +1,91 @@ + + + + + JSDoc: Source: utils/modify-config-helper.js + + + + + + + + + + +
+ +

Source: utils/modify-config-helper.js

+ + + + + + +
+
+
"use strict";
+
+const fs = require("fs");
+const path = require("path");
+const yeoman = require("yeoman-environment");
+const runTransform = require("../init/transformations/index");
+
+/**
+ *
+ * Looks up the webpack.config in the user's path and runs a given
+ * generator scaffold followed up by a transform
+ *
+ * @param {String} action — action to be done (add, remove, update, init)
+ * @param {Class} name - Name for the given function
+ * @returns {Function} runTransform - Returns a transformation instance
+ */
+
+module.exports = function modifyHelperUtil(action, generator) {
+	const configPath = path.resolve(process.cwd(), "webpack.config.js");
+	const webpackConfigExists = fs.existsSync(configPath);
+	if (!webpackConfigExists) {
+		throw new Error(
+			"Couldn't find a webpack configuration in your project path"
+		);
+	}
+	const env = yeoman.createEnv("webpack", null);
+	const generatorName = `webpack-${action}-generator`;
+	env.registerStub(generator, generatorName);
+
+	env.run(generatorName).on("end", () => {
+		const config = Object.assign(
+			{
+				configFile: fs.readFileSync(configPath, "utf8"),
+				configPath: configPath
+			},
+			env.getArgument("configuration")
+		);
+		return runTransform(config, action);
+	});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_npm-exists.js.html b/docs/utils_npm-exists.js.html new file mode 100644 index 00000000000..f1598caa87d --- /dev/null +++ b/docs/utils_npm-exists.js.html @@ -0,0 +1,74 @@ + + + + + JSDoc: Source: utils/npm-exists.js + + + + + + + + + + +
+ +

Source: utils/npm-exists.js

+ + + + + + +
+
+
"use strict";
+
+const got = require("got");
+const constant = value => _ => value;
+
+/**
+ *
+ * Checks if the given dependency/module is registered on npm
+ *
+ * @param {String} moduleName - The dependency to be checked
+ * @returns {Promise} constant - Returns either true or false,
+ * based on if it exists or not
+ */
+
+module.exports = function npmExists(moduleName) {
+	const hostname = "https://www.npmjs.org";
+	const pkgUrl = `${hostname}/package/${moduleName}`;
+	return got(pkgUrl, {
+		method: "HEAD"
+	})
+		.then(constant(true))
+		.catch(constant(false));
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_npm-packages-exists.js.html b/docs/utils_npm-packages-exists.js.html new file mode 100644 index 00000000000..40ab09f7ec1 --- /dev/null +++ b/docs/utils_npm-packages-exists.js.html @@ -0,0 +1,97 @@ + + + + + JSDoc: Source: utils/npm-packages-exists.js + + + + + + + + + + +
+ +

Source: utils/npm-packages-exists.js

+ + + + + + +
+
+
"use strict";
+const chalk = require("chalk");
+const npmExists = require("./npm-exists");
+const resolvePackages = require("./resolve-packages").resolvePackages;
+
+/**
+ *
+ * Loops through an array and checks if a package is registered
+ * on npm and throws an error if it is not.
+ *
+ * @param {String[]} pkg - Array of packages to check existence of
+ * @returns {Array} resolvePackages - Returns an process to install the packages
+ */
+
+module.exports = function npmPackagesExists(pkg) {
+	let acceptedPackages = [];
+	pkg.forEach(addon => {
+		//eslint-disable-next-line
+		if (addon.length <= 14 || addon.slice(0, 14) !== "webpack-addons") {
+			throw new TypeError(
+				chalk.bold(`${addon} isn't a valid name.\n`) +
+					chalk.red(
+						"\nIt should be prefixed with 'webpack-addons', but have different suffix.\n"
+					)
+			);
+		}
+		npmExists(addon)
+			.then(moduleExists => {
+				if (!moduleExists) {
+					Error.stackTraceLimit = 0;
+					throw new TypeError("Package isn't registered on npm.");
+				}
+				if (moduleExists) {
+					acceptedPackages.push(addon);
+				}
+			})
+			.catch(err => {
+				console.error(err.stack || err);
+				process.exit(0);
+			})
+			.then(_ => {
+				if (acceptedPackages.length === pkg.length)
+					return resolvePackages(acceptedPackages);
+			});
+	});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_package-manager.js.html b/docs/utils_package-manager.js.html new file mode 100644 index 00000000000..bf6ee4a58ad --- /dev/null +++ b/docs/utils_package-manager.js.html @@ -0,0 +1,128 @@ + + + + + JSDoc: Source: utils/package-manager.js + + + + + + + + + + +
+ +

Source: utils/package-manager.js

+ + + + + + +
+
+
"use strict";
+
+const path = require("path");
+const fs = require("fs");
+const spawn = require("cross-spawn");
+const globalPath = require("global-modules");
+
+const SPAWN_FUNCTIONS = {
+	npm: spawnNPM,
+	yarn: spawnYarn
+};
+
+/**
+ *
+ * Spawns a new process using npm
+ *
+ * @param {String} pkg - The dependency to be installed
+ * @param {Boolean} isNew - indicates if it needs to be updated or installed
+ * @returns {Function} spawn - Installs the package
+ */
+
+function spawnNPM(pkg, isNew) {
+	return spawn.sync("npm", [isNew ? "install" : "update", "-g", pkg], {
+		stdio: "inherit"
+	});
+}
+
+/**
+ *
+ * Spawns a new process using yarn
+ *
+ * @param {String} pkg - The dependency to be installed
+ * @param {Boolean} isNew - indicates if it needs to be updated or installed
+ * @returns {Function} spawn - Installs the package
+ */
+
+function spawnYarn(pkg, isNew) {
+	return spawn.sync("yarn", ["global", isNew ? "add" : "upgrade", pkg], {
+		stdio: "inherit"
+	});
+}
+/**
+ *
+ * Spawns a new process that installs the addon/dependency
+ *
+ * @param {String} pkg - The dependency to be installed
+ * @returns {Function} spawn - Installs the package
+ */
+
+function spawnChild(pkg) {
+	const pkgPath = path.resolve(globalPath, pkg);
+	const packageManager = getPackageManager();
+	const isNew = !fs.existsSync(pkgPath);
+
+	return SPAWN_FUNCTIONS[packageManager](pkg, isNew);
+}
+
+/**
+ *
+ * Returns the name of package manager to use,
+ * preferring yarn over npm if available
+ *
+ * @returns {String} - The package manager name
+ */
+
+function getPackageManager() {
+	if (spawn.sync("yarn", [" --version"], { stdio: "ignore" }).error) {
+		return "npm";
+	}
+
+	return "yarn";
+}
+
+module.exports = {
+	getPackageManager,
+	spawnChild
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_prop-types.js.html b/docs/utils_prop-types.js.html new file mode 100644 index 00000000000..9de034962ae --- /dev/null +++ b/docs/utils_prop-types.js.html @@ -0,0 +1,86 @@ + + + + + JSDoc: Source: utils/prop-types.js + + + + + + + + + + +
+ +

Source: utils/prop-types.js

+ + + + + + +
+
+
/**
+ *
+ * A Set of all accepted properties
+ *
+ * @returns {Set} A new set with accepted webpack properties
+ */
+
+module.exports = new Set([
+	"context",
+	"devServer",
+	"devtool",
+	"entry",
+	"externals",
+	"module",
+	"node",
+	"output",
+	"performance",
+	"plugins",
+	"resolve",
+	"target",
+	"watch",
+	"watchOptions",
+	"stats",
+	"mode",
+	"amd",
+	"bail",
+	"cache",
+	"profile",
+	"merge",
+	"parallelism",
+	"recordsInputPath",
+	"recordsOutputPath",
+	"recordsPath",
+	"resolveLoader"
+]);
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_resolve-packages.js.html b/docs/utils_resolve-packages.js.html new file mode 100644 index 00000000000..052568432ce --- /dev/null +++ b/docs/utils_resolve-packages.js.html @@ -0,0 +1,124 @@ + + + + + JSDoc: Source: utils/resolve-packages.js + + + + + + + + + + +
+ +

Source: utils/resolve-packages.js

+ + + + + + +
+
+
"use strict";
+
+const path = require("path");
+const chalk = require("chalk");
+const globalPath = require("global-modules");
+
+const creator = require("../init/index").creator;
+
+const spawnChild = require("./package-manager").spawnChild;
+
+/**
+ *
+ * Attaches a promise to the installation of the package
+ *
+ * @param {Function} child - The function to attach a promise to
+ * @returns {Promise} promise - Returns a promise to the installation
+ */
+
+function processPromise(child) {
+	return new Promise(function(resolve, reject) {
+		//eslint-disable-line
+		if (child.status !== 0) {
+			reject();
+		} else {
+			resolve();
+		}
+	});
+}
+
+/**
+ *
+ * Resolves and installs the packages, later sending them to @creator
+ *
+ * @param {String[]} pkg - The dependencies to be installed
+ * @returns {Function|Error} creator - Builds
+ * a webpack configuration through yeoman or throws an error
+ */
+
+function resolvePackages(pkg) {
+	Error.stackTraceLimit = 30;
+
+	let packageLocations = [];
+
+	pkg.forEach(addon => {
+		processPromise(spawnChild(addon))
+			.then(_ => {
+				try {
+					packageLocations.push(path.resolve(globalPath, addon));
+				} catch (err) {
+					console.log("Package wasn't validated correctly..");
+					console.log("Submit an issue for", pkg, "if this persists");
+					console.log("\nReason: \n");
+					console.error(chalk.bold.red(err));
+					process.exitCode = 1;
+				}
+			})
+			.catch(err => {
+				console.log("Package Coudln't be installed, aborting..");
+				console.log("\nReason: \n");
+				console.error(chalk.bold.red(err));
+				process.exitCode = 1;
+			})
+			.then(_ => {
+				if (packageLocations.length === pkg.length)
+					return creator(packageLocations);
+			});
+	});
+}
+
+module.exports = {
+	resolvePackages,
+	processPromise
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_run-prettier.js.html b/docs/utils_run-prettier.js.html new file mode 100644 index 00000000000..0b8cb59470b --- /dev/null +++ b/docs/utils_run-prettier.js.html @@ -0,0 +1,95 @@ + + + + + JSDoc: Source: utils/run-prettier.js + + + + + + + + + + +
+ +

Source: utils/run-prettier.js

+ + + + + + +
+
+
"use strict";
+
+const prettier = require("prettier");
+const fs = require("fs");
+const chalk = require("chalk");
+
+/**
+ *
+ * Runs prettier and later prints the output configuration
+ *
+ * @param {String} outputPath - Path to write the config to
+ * @param {Node} source - AST to write at the given path
+ * @param {Function} cb - exectues a callback after execution if supplied
+ * @returns {Function} Writes a file at given location and prints messages accordingly
+ */
+
+module.exports = function runPrettier(outputPath, source, cb) {
+	function validateConfig() {
+		let prettySource;
+		let error;
+		try {
+			prettySource = prettier.format(source, {
+				singleQuote: true,
+				useTabs: true,
+				tabWidth: 1
+			});
+		} catch (err) {
+			process.stdout.write(
+				"\n" +
+					chalk.yellow(
+						`WARNING: Could not apply prettier to ${outputPath}` +
+							" due validation error, but the file has been created\n"
+					)
+			);
+			prettySource = source;
+			error = err;
+		}
+		if (cb) {
+			return cb(error);
+		}
+		return fs.writeFileSync(outputPath, prettySource, "utf8");
+	}
+	return fs.writeFile(outputPath, source, "utf8", validateConfig);
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Thu Dec 21 2017 16:51:05 GMT+0100 (CET) +
+ + + + + diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 00000000000..0870b074915 --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,10 @@ + +{ + "source": { + "include": [ + "dist/" + ], + "includePattern": "dist/.+\\.js$", + "excludePattern": "dist/migrate" + } +} diff --git a/lib/commands/add.js b/lib/commands/add.js new file mode 100644 index 00000000000..4d66abeb7f8 --- /dev/null +++ b/lib/commands/add.js @@ -0,0 +1,16 @@ +"use strict"; + +const defaultGenerator = require("../generators/add-generator"); +const modifyHelper = require("../utils/modify-config-helper"); + +/** + * Is called and returns a scaffolding instance, adding properties + * + * @returns {Function} modifyHelper - A helper function that uses the action + * we're given on a generator + * + */ + +module.exports = function add() { + return modifyHelper("add", defaultGenerator); +}; diff --git a/lib/commands/init.js b/lib/commands/init.js new file mode 100644 index 00000000000..e3748d5dc85 --- /dev/null +++ b/lib/commands/init.js @@ -0,0 +1,21 @@ +"use strict"; + +const npmPackagesExists = require("../utils/npm-packages-exists"); +const creator = require("../init/index").creator; + +/** + * + * First function to be called after running the init flag. This is a check, + * if we are running the init command with no arguments or if we got dependencies + * + * @param {Object} pkg - packages included when running the init command + * @returns {Function} creator/npmPackagesExists - returns an installation of the package, + * followed up with a yeoman instance of that if there's packages. If not, it creates a defaultGenerator + */ + +module.exports = function initializeInquirer(pkg) { + if (pkg.length === 0) { + return creator(); + } + return npmPackagesExists(pkg); +}; diff --git a/lib/commands/make.js b/lib/commands/make.js new file mode 100644 index 00000000000..639130d3322 --- /dev/null +++ b/lib/commands/make.js @@ -0,0 +1,12 @@ +"use strict"; + +/** + * Is called and returns a scaffolding instance, adding properties + * + * @returns {Function} TBD + * + */ + +module.exports = function make() { + return console.log("make me"); +}; diff --git a/lib/commands/migrate.js b/lib/commands/migrate.js new file mode 100644 index 00000000000..670e26c8d0f --- /dev/null +++ b/lib/commands/migrate.js @@ -0,0 +1,151 @@ +"use strict"; + +const fs = require("fs"); +const chalk = require("chalk"); +const diff = require("diff"); +const inquirer = require("inquirer"); +const PLazy = require("p-lazy"); +const Listr = require("listr"); + +const validateSchema = require("webpack/lib/validateSchema"); +const WebpackOptionsValidationError = require("webpack/lib/WebpackOptionsValidationError"); +const webpackOptionsSchema = require("webpack/schemas/webpackOptionsSchema.json"); + +const runPrettier = require("../utils/run-prettier"); + +/** +* +* Runs migration on a given configuration using AST's and promises +* to sequentially transform a configuration file. +* +* @param {String} currentConfigPath - Location of the configuration to be migrated +* @param {String} outputConfigPath - Location to where the configuration should be written +* @param {Object} options - Any additional options regarding code style of the written configuration + +* @returns {Promise} Runs the migration using a promise that will throw any errors during each transform +* or output if the user decides to abort the migration +*/ + +module.exports = function migrate( + currentConfigPath, + outputConfigPath, + options +) { + const recastOptions = Object.assign( + { + quote: "single" + }, + options + ); + const tasks = new Listr([ + { + title: "Reading webpack config", + task: ctx => + new PLazy((resolve, reject) => { + fs.readFile(currentConfigPath, "utf8", (err, content) => { + if (err) { + reject(err); + } + try { + const jscodeshift = require("jscodeshift"); + ctx.source = content; + ctx.ast = jscodeshift(content); + resolve(); + } catch (err) { + reject("Error generating AST", err); + } + }); + }) + }, + { + title: "Migrating config from v1 to v2", + task: ctx => { + const transformations = require("../migrate").transformations; + return new Listr( + Object.keys(transformations).map(key => { + const transform = transformations[key]; + return { + title: key, + task: _ => transform(ctx.ast, ctx.source) + }; + }) + ); + } + } + ]); + + tasks + .run() + .then(ctx => { + const result = ctx.ast.toSource(recastOptions); + const diffOutput = diff.diffLines(ctx.source, result); + diffOutput.forEach(diffLine => { + if (diffLine.added) { + process.stdout.write(chalk.green(`+ ${diffLine.value}`)); + } else if (diffLine.removed) { + process.stdout.write(chalk.red(`- ${diffLine.value}`)); + } + }); + return inquirer + .prompt([ + { + type: "confirm", + name: "confirmMigration", + message: "Are you sure these changes are fine?", + default: "Y" + } + ]) + .then(answers => { + if (answers["confirmMigration"]) { + return inquirer.prompt([ + { + type: "confirm", + name: "confirmValidation", + message: + "Do you want to validate your configuration? " + + "(If you're using webpack merge, validation isn't useful)", + default: "Y" + } + ]); + } else { + console.log(chalk.red("✖ Migration aborted")); + } + }) + .then(answer => { + runPrettier(outputConfigPath, result, err => { + if (err) { + throw err; + } + }); + + if (answer["confirmValidation"]) { + const webpackOptionsValidationErrors = validateSchema( + webpackOptionsSchema, + require(outputConfigPath) + ); + if (webpackOptionsValidationErrors.length) { + console.log( + chalk.red( + "\n✖ Your configuration validation wasn't successful \n" + ) + ); + console.error( + new WebpackOptionsValidationError( + webpackOptionsValidationErrors + ).message + ); + } + } + console.log( + chalk.green( + `\n ✔︎ New webpack v2 config file is at ${outputConfigPath}` + ) + ); + }); + }) + .catch(err => { + console.log(chalk.red("✖ ︎Migration aborted due to some errors")); + console.error(err); + process.exitCode = 1; + }); +}; diff --git a/lib/commands/remove.js b/lib/commands/remove.js new file mode 100644 index 00000000000..2b1b73607a6 --- /dev/null +++ b/lib/commands/remove.js @@ -0,0 +1,16 @@ +"use strict"; + +const defaultGenerator = require("../generators/remove-generator"); +const modifyHelper = require("../utils/modify-config-helper"); + +/** + * Is called and returns a scaffolding instance, removing properties + * + * @returns {Function} modifyHelper - A helper function that uses the action + * we're given on a generator + * + */ + +module.exports = function() { + return modifyHelper("remove", defaultGenerator); +}; diff --git a/lib/commands/serve.js b/lib/commands/serve.js new file mode 100644 index 00000000000..a3b1f2743b0 --- /dev/null +++ b/lib/commands/serve.js @@ -0,0 +1,171 @@ +"use strict"; + +const inquirer = require("inquirer"); +const path = require("path"); +const chalk = require("chalk"); +const spawn = require("cross-spawn"); +const List = require("webpack-addons").List; +const processPromise = require("../utils/resolve-packages").processPromise; + +/** + * + * Installs WDS using NPM with --save --dev etc + * + * @param {Object} cmd - arg to spawn with + * @returns {Void} + */ + +const spawnNPMWithArg = cmd => + spawn.sync("npm", ["install", "webpack-dev-server", cmd], { + stdio: "inherit" + }); + +/** + * + * Installs WDS using Yarn with add etc + * + * @param {Object} cmd - arg to spawn with + * @returns {Void} + */ + +const spawnYarnWithArg = cmd => + spawn.sync("yarn", ["add", "webpack-dev-server", cmd], { + stdio: "inherit" + }); + +/** + * + * Find the path of a given module + * + * @param {Object} dep - dependency to find + * @returns {String} string with given path + */ + +const getRootPathModule = dep => path.resolve(process.cwd(), dep); + +/** + * + * Prompts for installing the devServer and running it + * + * @param {Object} args - args processed from the CLI + * @returns {Function} invokes the devServer API + */ + +function serve() { + let packageJSONPath = getRootPathModule("package.json"); + if (!packageJSONPath) { + console.log( + "\n", + chalk.red("✖ Could not find your package.json file"), + "\n" + ); + process.exit(1); + } + let packageJSON = require(packageJSONPath); + /* + * We gotta do this, cause some configs might not have devdep, + * dep or optional dep, so we'd need sanity checks for each + */ + let hasDevServerDep = packageJSON + ? Object.keys(packageJSON).filter(p => packageJSON[p]["webpack-dev-server"]) + : []; + + if (hasDevServerDep.length) { + let WDSPath = getRootPathModule("node_modules/webpack-dev-server/cli.js"); + if (!WDSPath) { + console.log( + "\n", + chalk.red( + "✖ Could not find the webpack-dev-server dependency in node_modules root path" + ) + ); + console.log( + chalk.bold.green(" ✔︎"), + "Try this command:", + chalk.bold.green("rm -rf node_modules && npm install") + ); + process.exit(1); + } + return require(WDSPath); + } else { + process.stdout.write( + "\n" + + chalk.bold( + "✖ We didn't find any webpack-dev-server dependency in your project," + ) + + "\n" + + chalk.bold.green(" 'webpack serve'") + + " " + + chalk.bold("requires you to have it installed ") + + "\n\n" + ); + return inquirer + .prompt([ + { + type: "confirm", + name: "confirmDevserver", + message: "Do you want to install it? (default: Y)", + default: "Y" + } + ]) + .then(answer => { + if (answer["confirmDevserver"]) { + return inquirer + .prompt( + List( + "confirmDepType", + "What kind of dependency do you want it to be under? (default: devDependency)", + ["devDependency", "optionalDependency", "dependency"] + ) + ) + .then(depTypeAns => { + const packager = getRootPathModule("package-lock.json") + ? "npm" + : "yarn"; + let spawnAction; + if (depTypeAns["confirmDepType"] === "devDependency") { + if (packager === "yarn") { + spawnAction = _ => spawnYarnWithArg("--dev"); + } else { + spawnAction = _ => spawnNPMWithArg("--save-dev"); + } + } + if (depTypeAns["confirmDepType"] === "dependency") { + if (packager === "yarn") { + spawnAction = _ => spawnYarnWithArg(" "); + } else { + spawnAction = _ => spawnNPMWithArg("--save"); + } + } + if (depTypeAns["confirmDepType"] === "optionalDependency") { + if (packager === "yarn") { + spawnAction = _ => spawnYarnWithArg("--optional"); + } else { + spawnAction = _ => spawnNPMWithArg("--save-optional"); + } + } + return processPromise(spawnAction()).then(_ => { + // Recursion doesn't work well with require call being cached + delete require.cache[require.resolve(packageJSONPath)]; + return serve(); + }); + }); + } else { + console.log(chalk.bold.red("✖ Serve aborted due cancelling")); + process.exitCode = 1; + } + }) + .catch(err => { + console.log(chalk.red("✖ Serve aborted due to some errors")); + console.error(err); + process.exitCode = 1; + }); + } +} + +module.exports = { + serve, + getRootPathModule, + spawnNPMWithArg, + spawnYarnWithArg +}; diff --git a/lib/commands/update.js b/lib/commands/update.js new file mode 100644 index 00000000000..598cf7f13de --- /dev/null +++ b/lib/commands/update.js @@ -0,0 +1,16 @@ +"use strict"; + +const defaultGenerator = require("../generators/update-generator"); +const modifyHelper = require("../utils/modify-config-helper"); + +/** + * Is called and returns a scaffolding instance, updating properties + * + * @returns {Function} modifyHelper - A helper function that uses the action + * we're given on a generator + * + */ + +module.exports = function() { + return modifyHelper("update", defaultGenerator); +}; diff --git a/lib/creator/transformations/context/context.js b/lib/creator/transformations/context/context.js deleted file mode 100644 index 15926ce0aef..00000000000 --- a/lib/creator/transformations/context/context.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for context. Finds the context property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "context", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/context/context.test.js b/lib/creator/transformations/context/context.test.js deleted file mode 100644 index d21b1d8dec5..00000000000 --- a/lib/creator/transformations/context/context.test.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "context", "context-0", "path.resolve(__dirname, 'app')"); -defineTest(__dirname, "context", "context-1", "'./some/fake/path'"); -defineTest(__dirname, "context", "context-2", "contextVariable"); diff --git a/lib/creator/transformations/devServer/__snapshots__/devServer.test.js.snap b/lib/creator/transformations/devServer/__snapshots__/devServer.test.js.snap deleted file mode 100644 index f1342f6724b..00000000000 --- a/lib/creator/transformations/devServer/__snapshots__/devServer.test.js.snap +++ /dev/null @@ -1,31 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`devServer transforms correctly using "devServer-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devServer: { - contentBase: path.join(__dirname, 'dist'), - compress: true, - port: 9000 - } -} -" -`; - -exports[`devServer transforms correctly using "devServer-1" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devServer: someVar -} -" -`; diff --git a/lib/creator/transformations/devServer/devServer.js b/lib/creator/transformations/devServer/devServer.js deleted file mode 100644 index 14d6b765b5a..00000000000 --- a/lib/creator/transformations/devServer/devServer.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for devServer. Finds the devServer property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createDevServerProperty(p) { - utils.pushCreateProperty(j, p, "devServer", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "devServer"); - } - if (webpackProperties && typeof webpackProperties === "object") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createDevServerProperty)); - } else if (webpackProperties && webpackProperties.length) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "devServer", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/devServer/devServer.test.js b/lib/creator/transformations/devServer/devServer.test.js deleted file mode 100644 index 14b3b7d11de..00000000000 --- a/lib/creator/transformations/devServer/devServer.test.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "devServer", "devServer-0", { - contentBase: "path.join(__dirname, 'dist')", - compress: true, - port: 9000 -}); -defineTest(__dirname, "devServer", "devServer-1", "someVar"); diff --git a/lib/creator/transformations/devtool/__snapshots__/devtool.test.js.snap b/lib/creator/transformations/devtool/__snapshots__/devtool.test.js.snap deleted file mode 100644 index 254078625ca..00000000000 --- a/lib/creator/transformations/devtool/__snapshots__/devtool.test.js.snap +++ /dev/null @@ -1,53 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`devtool transforms correctly using "devtool-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devtool: 'source-map' -} -" -`; - -exports[`devtool transforms correctly using "devtool-0" data 2`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devtool: myVariable -} -" -`; - -exports[`devtool transforms correctly using "devtool-1" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devtool: 'cheap-module-source-map' -} -" -`; - -exports[`devtool transforms correctly using "devtool-1" data 2`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - devtool: false -} -" -`; diff --git a/lib/creator/transformations/devtool/devtool.js b/lib/creator/transformations/devtool/devtool.js deleted file mode 100644 index 87cf628dc41..00000000000 --- a/lib/creator/transformations/devtool/devtool.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for devtool. Finds the devtool property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "devtool", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/devtool/devtool.test.js b/lib/creator/transformations/devtool/devtool.test.js deleted file mode 100644 index 8702e338922..00000000000 --- a/lib/creator/transformations/devtool/devtool.test.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "devtool", "devtool-0", "'source-map'"); -defineTest(__dirname, "devtool", "devtool-0", "myVariable"); -defineTest(__dirname, "devtool", "devtool-1", "'cheap-module-source-map'"); -defineTest(__dirname, "devtool", "devtool-1", "false"); diff --git a/lib/creator/transformations/entry/entry.js b/lib/creator/transformations/entry/entry.js deleted file mode 100644 index 8b0970f0eef..00000000000 --- a/lib/creator/transformations/entry/entry.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for entry. Finds the entry property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createEntryProperty(p) { - if (typeof webpackProperties === "string") { - return utils.pushCreateProperty(j, p, "entry", webpackProperties); - } - if (Array.isArray(webpackProperties)) { - const externalArray = utils.createArrayWithChildren( - j, - "entry", - webpackProperties, - true - ); - return p.value.properties.push(externalArray); - } else { - utils.pushCreateProperty(j, p, "entry", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "entry"); - } - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createEntryProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/entry/entry.test.js b/lib/creator/transformations/entry/entry.test.js deleted file mode 100644 index 1124378369a..00000000000 --- a/lib/creator/transformations/entry/entry.test.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "entry", "entry-0", "'index.js'"); -defineTest(__dirname, "entry", "entry-0", ["'index.js'", "'app.js'"]); -defineTest(__dirname, "entry", "entry-0", { - index: "'index.js'", - app: "'app.js'" -}); - -defineTest(__dirname, "entry", "entry-0", { - inject: "something", - app: "'app.js'", - inject_1: "else" -}); -defineTest(__dirname, "entry", "entry-0", "() => 'index.js'"); -defineTest( - __dirname, - "entry", - "entry-0", - "() => new Promise((resolve) => resolve(['./app', './router']))" -); -defineTest(__dirname, "entry", "entry-0", "entryStringVariable"); diff --git a/lib/creator/transformations/externals/externals.js b/lib/creator/transformations/externals/externals.js deleted file mode 100644 index 29b394a1e37..00000000000 --- a/lib/creator/transformations/externals/externals.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for externals. Finds the externals property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createExternalProperty(p) { - if ( - webpackProperties instanceof RegExp || - typeof webpackProperties === "string" - ) { - return utils.pushCreateProperty(j, p, "externals", webpackProperties); - } - if (Array.isArray(webpackProperties)) { - const externalArray = utils.createArrayWithChildren( - j, - "externals", - webpackProperties, - true - ); - return p.value.properties.push(externalArray); - } else { - utils.pushCreateProperty(j, p, "externals", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "externals"); - } - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter( - p => - utils.safeTraverse(p, [ - "parent", - "value", - "left", - "property", - "name" - ]) === "exports" - ) - .forEach(createExternalProperty); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/externals/externals.test.js b/lib/creator/transformations/externals/externals.test.js deleted file mode 100644 index a64bceaef78..00000000000 --- a/lib/creator/transformations/externals/externals.test.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "externals", "externals-0", /react/); -defineTest(__dirname, "externals", "externals-1", { - jquery: "'jQuery'", - react: "'react'" -}); - -defineTest(__dirname, "externals", "externals-1", "myObj"); - -defineTest(__dirname, "externals", "externals-1", { - jquery: "'jQuery'", - react: "reactObj" -}); - -defineTest(__dirname, "externals", "externals-1", { - jquery: "'jQuery'", - react: ["reactObj", "path.join(__dirname, 'app')", "'jquery'"] -}); - -defineTest(__dirname, "externals", "externals-1", { - lodash: { - commonjs: "'lodash'", - amd: "'lodash'", - root: "'_'" - } -}); - -defineTest(__dirname, "externals", "externals-1", { - lodash: { - commonjs: "lodash", - amd: "hidash", - root: "_" - } -}); - -defineTest(__dirname, "externals", "externals-1", [ - { - a: "false", - b: "true", - "'./ext'": "./hey" - }, - "function(context, request, callback) {" + - "if (/^yourregex$/.test(request)){" + - "return callback(null, 'commonjs ' + request);" + - "}" + - "callback();" + - "}" -]); - -defineTest(__dirname, "externals", "externals-1", [ - "myObj", - "function(context, request, callback) {" + - "if (/^yourregex$/.test(request)){" + - "return callback(null, 'commonjs ' + request);" + - "}" + - "callback();" + - "}" -]); diff --git a/lib/creator/transformations/index.js b/lib/creator/transformations/index.js deleted file mode 100644 index 5768a743ba9..00000000000 --- a/lib/creator/transformations/index.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; - -const path = require("path"); -const j = require("jscodeshift"); -const chalk = require("chalk"); -const pEachSeries = require("p-each-series"); - -const runPrettier = require("../utils/run-prettier"); - -const entryTransform = require("./entry/entry"); -const outputTransform = require("./output/output"); -const contextTransform = require("./context/context"); -const resolveTransform = require("./resolve/resolve"); -const devtoolTransform = require("./devtool/devtool"); -const targetTransform = require("./target/target"); -const watchTransform = require("./watch/watch"); -const watchOptionsTransform = require("./watch/watchOptions"); -const externalsTransform = require("./externals/externals"); -const nodeTransform = require("./node/node"); -const performanceTransform = require("./performance/performance"); -const statsTransform = require("./stats/stats"); -const amdTransform = require("./other/amd"); -const bailTransform = require("./other/bail"); -const cacheTransform = require("./other/cache"); -const profileTransform = require("./other/profile"); -const mergeTransform = require("./other/merge"); -const moduleTransform = require("./module/module"); -const pluginsTransform = require("./plugins/plugins"); -const topScopeTransform = require("./top-scope/top-scope"); -const devServerTransform = require("./devServer/devServer"); - -/* -* @function runTransform -* -* Runs the transformations from an object we get from yeoman -* -* @param { Object } transformObject - Options to transform -* @returns { } - A promise that writes each transform, runs prettier -* and writes the file -*/ - -const transformsObject = { - entryTransform, - outputTransform, - contextTransform, - resolveTransform, - devtoolTransform, - targetTransform, - watchTransform, - watchOptionsTransform, - externalsTransform, - nodeTransform, - performanceTransform, - statsTransform, - amdTransform, - bailTransform, - cacheTransform, - profileTransform, - moduleTransform, - pluginsTransform, - topScopeTransform, - mergeTransform, - devServerTransform -}; - -module.exports = function runTransform(webpackProperties) { - // webpackOptions.name sent to nameTransform if match - Object.keys(webpackProperties).forEach(scaffoldPiece => { - const config = webpackProperties[scaffoldPiece]; - - const transformations = Object.keys(transformsObject).map(k => { - const stringVal = k.substr(0, k.indexOf("Transform")); - if (config.webpackOptions) { - if (config.webpackOptions[stringVal]) { - return [transformsObject[k], config.webpackOptions[stringVal]]; - } else { - return [transformsObject[k], config[stringVal]]; - } - } else { - return [transformsObject[k]]; - } - }); - - const ast = j("module.exports = {}"); - - return pEachSeries(transformations, f => { - if (!f[1]) { - return f[0](j, ast); - } else { - return f[0](j, ast, f[1]); - } - }) - .then(() => { - let configurationName; - if (!config.configName) { - configurationName = "webpack.config.js"; - } else { - configurationName = "webpack." + config.configName + ".js"; - } - - const outputPath = path.join(process.cwd(), configurationName); - const source = ast.toSource({ - quote: "single" - }); - - runPrettier(outputPath, source); - }) - .catch(err => { - console.error(err.message ? err.message : err); - }); - }); - process.stdout.write( - "\n" + - chalk.green( - "Congratulations! Your new webpack configuration file has been created!\n" - ) - ); -}; diff --git a/lib/creator/transformations/module/module.js b/lib/creator/transformations/module/module.js deleted file mode 100644 index 991a7497e8a..00000000000 --- a/lib/creator/transformations/module/module.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for module. Finds the module property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createModuleProperties(p) { - utils.pushCreateProperty(j, p, "module", j.objectExpression([])); - return utils.safeTraverse(p, ["key", "name"] === "module"); - } - function createRules(p) { - return utils.pushObjectKeys(j, p, webpackProperties, "module"); - } - if (!webpackProperties) { - return ast; - } else { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createModuleProperties)) - .forEach(p => createRules(p)); - } -}; diff --git a/lib/creator/transformations/module/module.test.js b/lib/creator/transformations/module/module.test.js deleted file mode 100644 index 278f246c28f..00000000000 --- a/lib/creator/transformations/module/module.test.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "module", "module-0", { - rules: [ - { - test: new RegExp(/\.(js|vue)$/), - loader: "'eslint-loader'", - enforce: "'pre'", - include: ["customObj", "'Stringy'"], - options: { - formatter: "'someOption'" - } - }, - { - test: new RegExp(/\.vue$/), - loader: "'vue-loader'", - options: "vueObject" - }, - { - test: new RegExp(/\.js$/), - loader: "'babel-loader'", - include: ["resolve('src')", "resolve('test')"] - }, - { - test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), - loader: "'url-loader'", - options: { - limit: 10000, - name: "utils.assetsPath('img/[name].[hash:7].[ext]')" - } - }, - { - test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), - loader: "'url-loader'", - options: { - limit: "10000", - name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')", - someArr: ["Hey"] - } - } - ] -}); - -defineTest(__dirname, "module", "module-1", { - noParse: /jquery|lodash/, - rules: [ - { - test: new RegExp(/\.js$/), - parser: { - amd: false - }, - use: [ - "'htmllint-loader'", - { - loader: "'html-loader'", - options: { - hello: "'world'" - } - } - ] - } - ] -}); - -defineTest(__dirname, "module", "module-0", { - rules: [ - "{{#if_eq build 'standalone'}}", - { - test: new RegExp(/\.(js|vue)$/), - loader: "'eslint-loader'", - enforce: "'pre'", - include: ["customObj", "'Stringy'"], - options: { - formatter: "'someOption'" - } - }, - { - test: new RegExp(/\.vue$/), - loader: "'vue-loader'", - options: "vueObject" - }, - { - test: new RegExp(/\.js$/), - loader: "'babel-loader'", - include: ["resolve('src')", "resolve('test')"] - }, - { - test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), - loader: "'url-loader'", - options: { - limit: 10000, - name: "utils.assetsPath('img/[name].[hash:7].[ext]')", - inject: "{{#if_eq build 'standalone'}}" - } - }, - { - test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), - loader: "'url-loader'", - inject: "{{#if_eq build 'standalone'}}", - options: { - limit: "10000", - name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')" - } - } - ] -}); diff --git a/lib/creator/transformations/node/node.js b/lib/creator/transformations/node/node.js deleted file mode 100644 index 92a3d31a271..00000000000 --- a/lib/creator/transformations/node/node.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for node. Finds the node property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createNodeProperty(p) { - utils.pushCreateProperty(j, p, "node", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "node"); - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createNodeProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/node/node.test.js b/lib/creator/transformations/node/node.test.js deleted file mode 100644 index bfa478d9e19..00000000000 --- a/lib/creator/transformations/node/node.test.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "node", "node-0", { - console: false, - global: true, - process: true, - Buffer: true, - __filename: "mock", - __dirname: "mock", - setImmediate: true -}); diff --git a/lib/creator/transformations/other/__snapshots__/other.test.js.snap b/lib/creator/transformations/other/__snapshots__/other.test.js.snap deleted file mode 100644 index acb7ebaebc0..00000000000 --- a/lib/creator/transformations/other/__snapshots__/other.test.js.snap +++ /dev/null @@ -1,79 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`amd transforms correctly using "other-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - amd: { - jQuery: true, - kQuery: false - } -} -" -`; - -exports[`bail transforms correctly using "other-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - bail: true -} -" -`; - -exports[`cache transforms correctly using "other-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - cache: true -} -" -`; - -exports[`cache transforms correctly using "other-0" data 2`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - cache: cacheVal -} -" -`; - -exports[`merge transforms correctly using "other-0" data 1`] = ` -"module.exports = merge(myConfig, { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -}); -" -`; - -exports[`profile transforms correctly using "other-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - profile: true -} -" -`; diff --git a/lib/creator/transformations/other/amd.js b/lib/creator/transformations/other/amd.js deleted file mode 100644 index 24d0aa9a24e..00000000000 --- a/lib/creator/transformations/other/amd.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for amd. Finds the amd property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createAMDProperty(p) { - utils.pushCreateProperty(j, p, "amd", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "amd"); - } - if (webpackProperties && typeof webpackProperties === "object") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createAMDProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/other/bail.js b/lib/creator/transformations/other/bail.js deleted file mode 100644 index 1fe4f3bed37..00000000000 --- a/lib/creator/transformations/other/bail.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for bail. Finds the bail property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "bail", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/other/cache.js b/lib/creator/transformations/other/cache.js deleted file mode 100644 index ecb9eae8d72..00000000000 --- a/lib/creator/transformations/other/cache.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for cache. Finds the cache property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "cache", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/other/other.test.js b/lib/creator/transformations/other/other.test.js deleted file mode 100644 index a976a9ba25f..00000000000 --- a/lib/creator/transformations/other/other.test.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "amd", "other-0", { - jQuery: true, - kQuery: false -}); -defineTest(__dirname, "bail", "other-0", true); -defineTest(__dirname, "cache", "other-0", true); -defineTest(__dirname, "cache", "other-0", "cacheVal"); -defineTest(__dirname, "profile", "other-0", true); -defineTest(__dirname, "merge", "other-0", "myConfig"); diff --git a/lib/creator/transformations/other/profile.js b/lib/creator/transformations/other/profile.js deleted file mode 100644 index 07f08bea4f7..00000000000 --- a/lib/creator/transformations/other/profile.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for profile. Finds the profile property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "profile", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/output/output.js b/lib/creator/transformations/output/output.js deleted file mode 100644 index 1c19f70d095..00000000000 --- a/lib/creator/transformations/output/output.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for output. Finds the output property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ -module.exports = function(j, ast, webpackProperties) { - function createOutputProperties(p) { - utils.pushCreateProperty(j, p, "output", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "output"); - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createOutputProperties)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/output/output.test.js b/lib/creator/transformations/output/output.test.js deleted file mode 100644 index 9b7544604b8..00000000000 --- a/lib/creator/transformations/output/output.test.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); -const jscodeshift = require("jscodeshift"); - -defineTest(__dirname, "output", "output-0", { - filename: "'bundle'", - path: "'dist/assets'", - pathinfo: true, - publicPath: "'https://google.com'", - sourceMapFilename: "'[name].map'", - sourcePrefix: jscodeshift("'\t'"), - umdNamedDefine: true, - strictModuleExceptionHandling: true -}); diff --git a/lib/creator/transformations/performance/performance.js b/lib/creator/transformations/performance/performance.js deleted file mode 100644 index f00c1e21572..00000000000 --- a/lib/creator/transformations/performance/performance.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for performance. Finds the performance property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createPerformanceProperty(p) { - utils.pushCreateProperty(j, p, "performance", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "performance"); - } - if (webpackProperties && typeof webpackProperties === "object") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createPerformanceProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/performance/performance.test.js b/lib/creator/transformations/performance/performance.test.js deleted file mode 100644 index 61840ca16ff..00000000000 --- a/lib/creator/transformations/performance/performance.test.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "performance", "performance-0", { - hints: "'warning'", - maxEntrypointSize: 400000, - maxAssetSize: 100000, - assetFilter: - "function(assetFilename) {" + "return assetFilename.endsWith('.js');" + "}" -}); diff --git a/lib/creator/transformations/plugins/__snapshots__/plugins.test.js.snap b/lib/creator/transformations/plugins/__snapshots__/plugins.test.js.snap deleted file mode 100644 index 3f59e16478a..00000000000 --- a/lib/creator/transformations/plugins/__snapshots__/plugins.test.js.snap +++ /dev/null @@ -1,16 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`plugins transforms correctly using "plugins-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - plugins: [ - new webpack.optimize.CommonsChunkPlugin({name:'vendor',filename:'vendor-[hash].min.js'}) - ] -} -" -`; diff --git a/lib/creator/transformations/plugins/plugins.js b/lib/creator/transformations/plugins/plugins.js deleted file mode 100644 index 45c382501f1..00000000000 --- a/lib/creator/transformations/plugins/plugins.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for plugins. Finds the plugins property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createPluginsProperty(p) { - const pluginArray = utils.createArrayWithChildren( - j, - "plugins", - webpackProperties, - true - ); - return p.value.properties.push(pluginArray); - } - if (webpackProperties && Array.isArray(webpackProperties)) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createPluginsProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/plugins/plugins.test.js b/lib/creator/transformations/plugins/plugins.test.js deleted file mode 100644 index 7412024992f..00000000000 --- a/lib/creator/transformations/plugins/plugins.test.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "plugins", "plugins-0", [ - "new webpack.optimize.CommonsChunkPlugin({name:" + - "'" + - "vendor" + - "'" + - ",filename:" + - "'" + - "vendor" + - "-[hash].min.js'})" -]); diff --git a/lib/creator/transformations/resolve/__snapshots__/resolve.test.js.snap b/lib/creator/transformations/resolve/__snapshots__/resolve.test.js.snap deleted file mode 100644 index b303657fe2d..00000000000 --- a/lib/creator/transformations/resolve/__snapshots__/resolve.test.js.snap +++ /dev/null @@ -1,41 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`resolve transforms correctly using "resolve-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - resolve: { - alias: { - {{#if_eq build 'standalone'}}, - hello: 'world', - {{/if_eq}}, - world: hello - }, - - aliasFields: ['browser', wars], - descriptionFiles: ['a', b], - enforceExtension: false, - enforceModuleExtension: false, - extensions: [hey, 'ho'], - mainFields: [main, 'story'], - mainFiles: ['noMainFileHere', iGuess], - modules: [one, 'two'], - unsafeCache: false, - - resolveLoader: { - modules: ['node_modules', mode_nodules], - extensions: [jsVal, '.json'], - mainFields: [loader, 'main'], - moduleExtensions: ['-loader', value] - }, - - plugins: [somePlugin, 'stringVal'], - symlinks: true - } -} -" -`; diff --git a/lib/creator/transformations/resolve/resolve.js b/lib/creator/transformations/resolve/resolve.js deleted file mode 100644 index 01bba7000e3..00000000000 --- a/lib/creator/transformations/resolve/resolve.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for resolve. Finds the resolve property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createResolveProperties(p) { - utils.pushCreateProperty(j, p, "resolve", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "resolve"); - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createResolveProperties)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/resolve/resolve.test.js b/lib/creator/transformations/resolve/resolve.test.js deleted file mode 100644 index 89ecd087957..00000000000 --- a/lib/creator/transformations/resolve/resolve.test.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "resolve", "resolve-0", { - alias: { - inject: "{{#if_eq build 'standalone'}}", - hello: "'world'", - inject_1: "{{/if_eq}}", - world: "hello" - }, - aliasFields: ["'browser'", "wars"], - descriptionFiles: ["'a'", "b"], - enforceExtension: false, - enforceModuleExtension: false, - extensions: ["hey", "'ho'"], - mainFields: ["main", "'story'"], - mainFiles: ["'noMainFileHere'", "iGuess"], - modules: ["one", "'two'"], - unsafeCache: false, - resolveLoader: { - modules: ["'node_modules'", "mode_nodules"], - extensions: ["jsVal", "'.json'"], - mainFields: ["loader", "'main'"], - moduleExtensions: ["'-loader'", "value"] - }, - plugins: ["somePlugin", "'stringVal'"], - symlinks: true -}); diff --git a/lib/creator/transformations/stats/stats.js b/lib/creator/transformations/stats/stats.js deleted file mode 100644 index d843caf04ee..00000000000 --- a/lib/creator/transformations/stats/stats.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for stats. Finds the stats property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createStatsProperty(p) { - utils.pushCreateProperty(j, p, "stats", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "stats"); - } - if (webpackProperties && typeof webpackProperties === "object") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createStatsProperty)); - } else if (webpackProperties && webpackProperties.length) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "stats", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/stats/stats.test.js b/lib/creator/transformations/stats/stats.test.js deleted file mode 100644 index c830ddb38e2..00000000000 --- a/lib/creator/transformations/stats/stats.test.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "stats", "stats-0", { - assets: true, - assetsSort: "'field'", - cached: true, - cachedAssets: true, - children: true, - chunks: true, - chunkModules: true, - chunkOrigins: true, - chunksSort: "'field'", - context: "'../src/'", - colors: true, - depth: false, - entrypoints: "customVal", - errors: true, - errorDetails: true, - exclude: [], - hash: true, - maxModules: 15, - modules: true, - modulesSort: "'field'", - performance: true, - providedExports: false, - publicPath: true, - reasons: true, - source: true, - timings: true, - usedExports: false, - version: true, - warnings: true -}); -defineTest(__dirname, "stats", "stats-0", "'errors-only'"); diff --git a/lib/creator/transformations/target/__snapshots__/target.test.js.snap b/lib/creator/transformations/target/__snapshots__/target.test.js.snap deleted file mode 100644 index e89e95acc08..00000000000 --- a/lib/creator/transformations/target/__snapshots__/target.test.js.snap +++ /dev/null @@ -1,27 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`target transforms correctly using "target-0" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - target: 'async-node' -} -" -`; - -exports[`target transforms correctly using "target-1" data 1`] = ` -"module.exports = { - entry: 'index.js', - - output: { - filename: 'bundle.js' - }, - - target: node -} -" -`; diff --git a/lib/creator/transformations/target/target.js b/lib/creator/transformations/target/target.js deleted file mode 100644 index 7b5dca6bed1..00000000000 --- a/lib/creator/transformations/target/target.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for target. Finds the target property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties && webpackProperties.length) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "target", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/target/target.test.js b/lib/creator/transformations/target/target.test.js deleted file mode 100644 index e29d6ab1853..00000000000 --- a/lib/creator/transformations/target/target.test.js +++ /dev/null @@ -1,6 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "target", "target-0", "'async-node'"); -defineTest(__dirname, "target", "target-1", "node"); diff --git a/lib/creator/transformations/top-scope/top-scope.js b/lib/creator/transformations/top-scope/top-scope.js deleted file mode 100644 index daa92a75642..00000000000 --- a/lib/creator/transformations/top-scope/top-scope.js +++ /dev/null @@ -1,21 +0,0 @@ -/* -* -* Get an property named topScope from yeoman and inject it to the top scope of -* the config, outside module.exports -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing topscope properties -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createTopScopeProperty(p) { - webpackProperties.forEach(n => { - p.value.body.splice(-1, 0, n); - }); - } - if (webpackProperties) { - return ast.find(j.Program).filter(p => createTopScopeProperty(p)); - } -}; diff --git a/lib/creator/transformations/top-scope/top-scope.test.js b/lib/creator/transformations/top-scope/top-scope.test.js deleted file mode 100644 index 728b777c5d3..00000000000 --- a/lib/creator/transformations/top-scope/top-scope.test.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "top-scope", "top-scope-0", ["var test = 'me';"]); diff --git a/lib/creator/transformations/watch/watch.js b/lib/creator/transformations/watch/watch.js deleted file mode 100644 index ed92c572672..00000000000 --- a/lib/creator/transformations/watch/watch.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for watch. Finds the watch property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - if (typeof webpackProperties === "boolean") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "watch", - webpackProperties - ) - ); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/watch/watch.test.js b/lib/creator/transformations/watch/watch.test.js deleted file mode 100644 index ddaec086374..00000000000 --- a/lib/creator/transformations/watch/watch.test.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "watch", "watch-0", true); -defineTest(__dirname, "watch", "watch-0", false); -defineTest(__dirname, "watch", "watch-1", true); -defineTest(__dirname, "watch", "watch-1", false); diff --git a/lib/creator/transformations/watch/watchOptions.js b/lib/creator/transformations/watch/watchOptions.js deleted file mode 100644 index c7f88cb48ab..00000000000 --- a/lib/creator/transformations/watch/watchOptions.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -const utils = require("../../../transformations/utils"); - -/* -* -* Transform for watchOptions. Finds the watchOptions property from yeoman and creates a -* property based on what the user has given us. -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ - -module.exports = function(j, ast, webpackProperties) { - function createWatchOptionsProperty(p) { - utils.pushCreateProperty(j, p, "watchOptions", j.objectExpression([])); - return utils.pushObjectKeys(j, p, webpackProperties, "watchOptions"); - } - if (webpackProperties) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createWatchOptionsProperty)); - } else { - return ast; - } -}; diff --git a/lib/creator/transformations/watch/watchOptions.test.js b/lib/creator/transformations/watch/watchOptions.test.js deleted file mode 100644 index 33a7d369fc3..00000000000 --- a/lib/creator/transformations/watch/watchOptions.test.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -const defineTest = require("../../../transformations/defineTest"); - -defineTest(__dirname, "watchOptions", "watch-0", { - aggregateTimeout: 300, - poll: 1000, - ignored: "/node_modules/" -}); - -defineTest(__dirname, "watchOptions", "watch-1", { - aggregateTimeout: 300, - poll: 1000, - ignored: "/node_modules/" -}); - -defineTest(__dirname, "watchOptions", "watch-2", { - aggregateTimeout: 300, - poll: 1000, - ignored: "/node_modules/" -}); diff --git a/lib/creator/utils/validate-options.js b/lib/creator/utils/validate-options.js deleted file mode 100644 index 143e623f63e..00000000000 --- a/lib/creator/utils/validate-options.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -const fs = require("fs"); -const path = require("path"); - -/* -* @function getPath -* -* Finds the current filepath of a given string -* -* @param { String } part - The name of the file to be checked. -* @returns { String } - returns an string with the filepath -*/ - -function getPath(part) { - return path.join(process.cwd(), part); -} - -/* -* @function validateOptions -* -* Validates the options passed from an inquirer instance to make -* sure the path supplied exists -* -* @param { String } part - The name of the file to be checked. -* @returns { } part - checks if the path exists or throws an error -*/ - -module.exports = function validateOptions(opts) { - return Object.keys(opts).forEach(location => { - let part = getPath(opts[location]); - try { - fs.readFileSync(part); - } catch (err) { - console.error("Found no file at:", part); - process.exitCode = 1; - } - }); -}; diff --git a/lib/creator/utils/validate-options.spec.js b/lib/creator/utils/validate-options.spec.js deleted file mode 100644 index fe342e78fa1..00000000000 --- a/lib/creator/utils/validate-options.spec.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -"use strict"; - -const validateOptions = require("../../../__mocks__/creator/validate-options.mock") - .validateOptions; - -describe("validate-options", () => { - it("should throw on fake paths", () => { - expect(() => { - validateOptions({ - entry: "noop", - output: "noopsi" - }); - }).toThrowError("Did not find the file"); - }); - - it("should find the real files", () => { - expect(() => { - validateOptions({ - entry: "package.json" - }); - }).not.toThrowError(/'Did not find the file'/); - }); -}); diff --git a/lib/creator/yeoman/utils/module.js b/lib/creator/yeoman/utils/module.js deleted file mode 100644 index b9b8660f606..00000000000 --- a/lib/creator/yeoman/utils/module.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = () => { - return { - test: new RegExp(/\.js$/), - exclude: "/node_modules/", - loader: "'babel-loader'", - options: { - presets: ["'es2015'"] - } - }; -}; diff --git a/lib/creator/yeoman/utils/plugins.js b/lib/creator/yeoman/utils/plugins.js deleted file mode 100644 index bcd523ad462..00000000000 --- a/lib/creator/yeoman/utils/plugins.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = () => { - return ["new UglifyJSPlugin()"]; -}; diff --git a/lib/creator/yeoman/utils/validate.js b/lib/creator/yeoman/utils/validate.js deleted file mode 100644 index 9f8f932f7e8..00000000000 --- a/lib/creator/yeoman/utils/validate.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -module.exports = value => { - const pass = value.length; - if (pass) { - return true; - } - return "Please specify an answer!"; -}; diff --git a/lib/creator/yeoman/webpack-adapter.js b/lib/creator/yeoman/webpack-adapter.js deleted file mode 100644 index 4a9262ea848..00000000000 --- a/lib/creator/yeoman/webpack-adapter.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; - -const inquirer = require("inquirer"); - -/* -* @class - WebpackAdapter -* -* Custom adapter that is integrated in the scaffold. Here we can validate -* paths and answers from the user -* -*/ -module.exports = class WebpackAdapter { - prompt(questions, callback) { - const promise = inquirer.prompt(questions); - promise.then(callback || function() {}); - return promise; - } -}; diff --git a/lib/creator/yeoman/webpack-generator.js b/lib/creator/yeoman/webpack-generator.js deleted file mode 100644 index 0c3ffc1ddcf..00000000000 --- a/lib/creator/yeoman/webpack-generator.js +++ /dev/null @@ -1,401 +0,0 @@ -"use strict"; - -const Generator = require("yeoman-generator"); -const chalk = require("chalk"); - -const createCommonsChunkPlugin = require("webpack-addons") - .createCommonsChunkPlugin; - -const Input = require("webpack-addons").Input; -const Confirm = require("webpack-addons").Confirm; -const RawList = require("webpack-addons").RawList; - -const getPackageManager = require("../../utils/package-manager") - .getPackageManager; - -const entryQuestions = require("./utils/entry"); -const getBabelPlugin = require("./utils/module"); -const getDefaultPlugins = require("./utils/plugins"); -const tooltip = require("./utils/tooltip"); - -module.exports = class WebpackGenerator extends Generator { - constructor(args, opts) { - super(args, opts); - this.isProd = false; - this.dependencies = ["webpack", "uglifyjs-webpack-plugin"]; - this.configuration = { - config: { - webpackOptions: {}, - topScope: [] - } - }; - } - prompting() { - let done = this.async(); - let self = this; - let oneOrMoreEntries; - let regExpForStyles; - let ExtractUseProps; - let outputPath = "dist"; - process.stdout.write( - `\n${chalk.bold("Insecure about some of the questions?")}\n` - ); - process.stdout.write( - `\n${chalk.bold.green( - "https://github.com/webpack/webpack-cli/blob/master/INIT.md" - )}\n\n` - ); - this.configuration.config.webpackOptions.module = { - rules: [] - }; - this.configuration.config.webpackOptions.plugins = getDefaultPlugins(); - this.configuration.config.topScope.push( - "const webpack = require('webpack')", - "const path = require('path')", - tooltip.uglify(), - "const UglifyJSPlugin = require('uglifyjs-webpack-plugin');", - "\n" - ); - this.prompt([ - Confirm("entryType", "Will your application have multiple bundles?") - ]).then(entryTypeAnswer => { - // Ask different questions for entry points - entryQuestions(self, entryTypeAnswer) - .then(entryOptions => { - this.configuration.config.webpackOptions.entry = entryOptions; - oneOrMoreEntries = Object.keys(entryOptions); - }) - .then(() => { - this.prompt([ - Input( - "outputType", - "Which folder will your generated bundles be in? [default: dist]:" - ) - ]) - .then(outputTypeAnswer => { - if (!this.configuration.config.webpackOptions.entry.length) { - this.configuration.config.topScope.push(tooltip.commonsChunk()); - this.configuration.config.webpackOptions.output = { - filename: "'[name].[chunkhash].js'", - chunkFilename: "'[name].[chunkhash].js'" - }; - } else { - this.configuration.config.webpackOptions.output = { - filename: "'[name].bundle.js'" - }; - } - if (outputTypeAnswer["outputType"].length) { - outputPath = outputTypeAnswer["outputType"]; - } - this.configuration.config.webpackOptions.output.path = `path.resolve(__dirname, '${outputPath}')`; - }) - .then(() => { - this.prompt([ - Confirm( - "prodConfirm", - "Are you going to use this in production?" - ) - ]) - .then(prodAnswer => { - if (prodAnswer["prodConfirm"] === true) { - this.isProd = true; - } else { - this.isProd = false; - } - }) - .then(() => { - this.prompt([ - Confirm("babelConfirm", "Will you be using ES2015?") - ]) - .then(ans => { - if (ans["babelConfirm"] === true) { - this.configuration.config.webpackOptions.module.rules.push( - getBabelPlugin() - ); - this.dependencies.push( - "babel-loader", - "babel-core", - "babel-preset-es2015" - ); - } - }) - .then(() => { - this.prompt([ - RawList( - "stylingType", - "Will you use one of the below CSS solutions?", - ["SASS", "LESS", "CSS", "PostCSS", "No"] - ) - ]) - .then(stylingAnswer => { - if (!this.isProd) { - ExtractUseProps = []; - } - switch (stylingAnswer["stylingType"]) { - case "SASS": - this.dependencies.push( - "sass-loader", - "node-sass", - "style-loader", - "css-loader" - ); - regExpForStyles = new RegExp(/\.(scss|css)$/); - if (this.isProd) { - ExtractUseProps = `use: [{ - loader: "css-loader", - options: { - sourceMap: true - } - }, { - loader: "sass-loader", - options: { - sourceMap: true - } - }], - fallback: "style-loader"`; - } else { - ExtractUseProps.push( - { - loader: "'style-loader'" - }, - { - loader: "'css-loader'" - }, - { - loader: "'sass-loader'" - } - ); - } - break; - case "LESS": - regExpForStyles = new RegExp(/\.(less|css)$/); - this.dependencies.push( - "less-loader", - "less", - "style-loader", - "css-loader" - ); - if (this.isProd) { - ExtractUseProps = ` - use: [{ - loader: "css-loader", - options: { - sourceMap: true - } - }, { - loader: "less-loader", - options: { - sourceMap: true - } - }], - fallback: "style-loader"`; - } else { - ExtractUseProps.push( - { - loader: "'css-loader'", - options: { - sourceMap: true - } - }, - { - loader: "'less-loader'", - options: { - sourceMap: true - } - } - ); - } - break; - case "PostCSS": - this.configuration.config.topScope.push( - tooltip.postcss(), - "const autoprefixer = require('autoprefixer');", - "const precss = require('precss');", - "\n" - ); - this.dependencies.push( - "style-loader", - "css-loader", - "postcss-loader", - "precss", - "autoprefixer" - ); - regExpForStyles = new RegExp(/\.css$/); - if (this.isProd) { - ExtractUseProps = ` - use: [{ - loader: "style-loader" - },{ - loader: "css-loader", - options: { - sourceMap: true, - importLoaders: 1 - } - }, { - loader: "postcss-loader", - options: { - plugins: function () { - return [ - precss, - autoprefixer - ]; - } - } - }], - fallback: "style-loader"`; - } else { - ExtractUseProps.push( - { - loader: "'style-loader'" - }, - { - loader: "'css-loader'", - options: { - sourceMap: true, - importLoaders: 1 - } - }, - { - loader: "'postcss-loader'", - options: { - plugins: `function () { - return [ - precss, - autoprefixer - ]; - }` - } - } - ); - } - break; - case "CSS": - this.dependencies.push( - "style-loader", - "css-loader" - ); - regExpForStyles = new RegExp(/\.css$/); - if (this.isProd) { - ExtractUseProps = `use: [{ - loader: "css-loader", - options: { - sourceMap: true - } - }], - fallback: "style-loader"`; - } else { - ExtractUseProps.push( - { - loader: "'style-loader'", - options: { - sourceMap: true - } - }, - { - loader: "'css-loader'" - } - ); - } - break; - default: - regExpForStyles = null; - } - }) - .then(() => { - // Ask if the user wants to use extractPlugin - this.prompt([ - Input( - "extractPlugin", - "If you want to bundle your CSS files, what will you name the bundle? (press enter to skip)" - ) - ]) - .then(extractAnswer => { - if (regExpForStyles) { - if (this.isProd) { - this.configuration.config.topScope.push( - tooltip.cssPlugin() - ); - this.dependencies.push( - "extract-text-webpack-plugin" - ); - if ( - extractAnswer["extractPlugin"].length !== 0 - ) { - this.configuration.config.webpackOptions.plugins.push( - "new ExtractTextPlugin('" + - extractAnswer["extractPlugin"] + - ".[contentHash].css')" - ); - } else { - this.configuration.config.webpackOptions.plugins.push( - "new ExtractTextPlugin('" + "style.css')" - ); - } - const moduleRulesObj = { - test: regExpForStyles, - use: `ExtractTextPlugin.extract({ - ${ExtractUseProps} - })` - }; - this.configuration.config.webpackOptions.module.rules.push( - moduleRulesObj - ); - this.configuration.config.topScope.push( - "const ExtractTextPlugin = require('extract-text-webpack-plugin');", - "\n" - ); - } else { - const moduleRulesObj = { - test: regExpForStyles, - use: ExtractUseProps - }; - this.configuration.config.webpackOptions.module.rules.push( - moduleRulesObj - ); - } - } - }) - .then(() => { - if ( - !this.configuration.config.webpackOptions.entry - .length - ) { - oneOrMoreEntries.forEach(prop => { - this.configuration.config.webpackOptions.plugins.push( - createCommonsChunkPlugin(prop) - ); - }); - } - done(); - }); - }); - }); - }); - }); - }); - }); - } - installPlugins() { - let asyncNamePrompt = this.async(); - let defaultName = this.isProd ? "prod" : "config"; - this.prompt([ - Input( - "nameType", - `Name your 'webpack.[name].js?' [default: '${defaultName}']:` - ) - ]) - .then(nameAnswer => { - if (nameAnswer["nameType"].length) { - this.configuration.config.configName = nameAnswer["nameType"]; - } else { - this.configuration.config.configName = defaultName; - } - }) - .then(() => { - asyncNamePrompt(); - this.runInstall(getPackageManager(), this.dependencies, { - "save-dev": true - }); - }); - } -}; diff --git a/lib/generate-loader/index.js b/lib/generate-loader/index.js index ff83f5f84fa..58e582ccfff 100644 --- a/lib/generate-loader/index.js +++ b/lib/generate-loader/index.js @@ -1,5 +1,5 @@ var yeoman = require("yeoman-environment"); -var LoaderGenerator = require("./loader-generator").LoaderGenerator; +var LoaderGenerator = require("../generators/loader-generator").LoaderGenerator; /** * Runs a yeoman generator to create a new webpack loader project diff --git a/lib/generate-plugin/index.js b/lib/generate-plugin/index.js index 82fe7dd386d..35f9483138e 100644 --- a/lib/generate-plugin/index.js +++ b/lib/generate-plugin/index.js @@ -1,5 +1,5 @@ var yeoman = require("yeoman-environment"); -var PluginGenerator = require("./plugin-generator").PluginGenerator; +var PluginGenerator = require("../generators/plugin-generator").PluginGenerator; /** * Runs a yeoman generator to create a new webpack plugin project diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js new file mode 100644 index 00000000000..8994a608f56 --- /dev/null +++ b/lib/generators/add-generator.js @@ -0,0 +1,450 @@ +const Generator = require("yeoman-generator"); +const glob = require("glob-all"); +const path = require("path"); +const Confirm = require("webpack-addons").Confirm; +const List = require("webpack-addons").List; +const Input = require("webpack-addons").Input; + +const webpackSchema = require("webpack/schemas/WebpackOptions"); +const webpackDevServerSchema = require("webpack-dev-server/lib/optionsSchema.json"); +const PROP_TYPES = require("../utils/prop-types"); + +const getPackageManager = require("../utils/package-manager").getPackageManager; +const npmExists = require("../utils/npm-exists"); +const entryQuestions = require("./utils/entry"); + +/** + * + * Replaces the string with a substring at the given index + * https://gist.github.com/efenacigiray/9367920 + * + * @param {String} string - string to be modified + * @param {Number} index - index to replace from + * @param {String} replace - string to replace starting from index + * + * @returns {String} string - The newly mutated string + * + */ +function replaceAt(string, index, replace) { + return string.substring(0, index) + replace + string.substring(index + 1); +} + +/** + * + * Checks if the given array has a given property + * + * @param {Array} arr - array to check + * @param {String} prop - property to check existence of + * + * @returns {Boolean} hasProp - Boolean indicating if the property + * is present + */ +const traverseAndGetProperties = (arr, prop) => { + let hasProp = false; + arr.forEach(p => { + if (p[prop]) { + hasProp = true; + } + }); + return hasProp; +}; + +/** + * + * Generator for adding properties + * @class AddGenerator + * @extends Generator + * @returns {Void} After execution, transforms are triggered + * + */ + +module.exports = class AddGenerator extends Generator { + constructor(args, opts) { + super(args, opts); + this.dependencies = []; + this.configuration = { + config: { + webpackOptions: {}, + topScope: ["const webpack = require('webpack')"] + } + }; + } + + prompting() { + let done = this.async(); + let action; + let self = this; + let manualOrListInput = action => + Input("actionAnswer", `what do you want to add to ${action}?`); + // first index indicates if it has a deep prop, 2nd indicates what kind of + let isDeepProp = [false, false]; + + return this.prompt([ + List( + "actionType", + "What property do you want to add to?", + Array.from(PROP_TYPES.keys()) + ) + ]) + .then(actionTypeAnswer => { + // Set initial prop, like devtool + this.configuration.config.webpackOptions[ + actionTypeAnswer.actionType + ] = null; + // update the action variable, we're using it later + action = actionTypeAnswer.actionType; + }) + .then(() => { + if (action === "entry") { + return this.prompt([ + Confirm("entryType", "Will your application have multiple bundles?") + ]) + .then(entryTypeAnswer => { + // Ask different questions for entry points + return entryQuestions(self, entryTypeAnswer); + }) + .then(entryOptions => { + this.configuration.config.webpackOptions[action] = entryOptions; + this.configuration.config.item = action; + }); + } + let temp = action; + if (action === "resolveLoader") { + action = "resolve"; + } + const webpackSchemaProp = webpackSchema.definitions[action]; + /* + * https://github.com/webpack/webpack/blob/next/schemas/WebpackOptions.json + * Find the properties directly in the properties prop, or the anyOf prop + */ + let defOrPropDescription = webpackSchemaProp + ? webpackSchemaProp.properties + : webpackSchema.properties[action].properties + ? webpackSchema.properties[action].properties + : webpackSchema.properties[action].anyOf + ? webpackSchema.properties[action].anyOf.filter( + p => p.properties || p.enum + ) + : null; + if (Array.isArray(defOrPropDescription)) { + // Todo: Generalize these to go through the array, then merge enum with props if needed + const hasPropertiesProp = traverseAndGetProperties( + defOrPropDescription, + "properties" + ); + const hasEnumProp = traverseAndGetProperties( + defOrPropDescription, + "enum" + ); + /* as we know he schema only has two arrays that might hold our values, + * check them for either having arr.enum or arr.properties + */ + if (hasPropertiesProp) { + defOrPropDescription = + defOrPropDescription[0].properties || + defOrPropDescription[1].properties; + if (!defOrPropDescription) { + defOrPropDescription = defOrPropDescription[0].enum; + } + // TODO: manually implement stats and devtools like sourcemaps + } else if (hasEnumProp) { + const originalPropDesc = defOrPropDescription[0].enum; + // Array -> Object -> Merge objects into one for compat in manualOrListInput + defOrPropDescription = Object.keys(defOrPropDescription[0].enum) + .map(p => { + return Object.assign( + {}, + { + [originalPropDesc[p]]: "noop" + } + ); + }) + .reduce((result, currentObject) => { + for (let key in currentObject) { + if (currentObject.hasOwnProperty(key)) { + result[key] = currentObject[key]; + } + } + return result; + }, {}); + } + } + // WDS has its own schema, so we gonna need to check that too + const webpackDevserverSchemaProp = + action === "devServer" ? webpackDevServerSchema : null; + // Watch has a boolean arg, but we need to append to it manually + if (action === "watch") { + defOrPropDescription = { + true: {}, + false: {} + }; + } + if (action === "mode") { + defOrPropDescription = { + development: {}, + production: {} + }; + } + action = temp; + if (action === "resolveLoader") { + defOrPropDescription = Object.assign(defOrPropDescription, { + moduleExtensions: {} + }); + } + // If we've got a schema prop or devServer Schema Prop + if (defOrPropDescription || webpackDevserverSchemaProp) { + // Check for properties in definitions[action] or properties[action] + if (defOrPropDescription) { + if (action !== "devtool") { + // Add the option of adding an own variable if the user wants + defOrPropDescription = Object.assign(defOrPropDescription, { + other: {} + }); + } else { + // The schema doesn't have the source maps we can prompt, so add those + defOrPropDescription = Object.assign(defOrPropDescription, { + eval: {}, + "cheap-eval-source-map": {}, + "cheap-module-eval-source-map": {}, + "eval-source-map": {}, + "cheap-source-map": {}, + "cheap-module-source-map": {}, + "inline-cheap-source-map": {}, + "inline-cheap-module-source-map": {}, + "source-map": {}, + "inline-source-map": {}, + "hidden-source-map": {}, + "nosources-source-map": {} + }); + } + manualOrListInput = List( + "actionAnswer", + `what do you want to add to ${action}?`, + Object.keys(defOrPropDescription) + ); + // We know we're gonna append some deep prop like module.rule + isDeepProp[0] = true; + } else if (webpackDevserverSchemaProp) { + // Append the custom property option + webpackDevserverSchemaProp.properties = Object.assign( + webpackDevserverSchemaProp.properties, + { + other: {} + } + ); + manualOrListInput = List( + "actionAnswer", + `what do you want to add to ${action}?`, + Object.keys(webpackDevserverSchemaProp.properties) + ); + // We know we are in a devServer.prop scenario + isDeepProp[0] = true; + } else { + // manual input if non-existent + manualOrListInput = manualOrListInput(action); + } + } else { + manualOrListInput = manualOrListInput(action); + } + return this.prompt([manualOrListInput]); + }) + .then(answerToAction => { + if (!answerToAction) { + done(); + return; + } + /* + * Plugins got their own logic, + * find the names of each natively plugin and check if it matches + */ + if (action === "plugins") { + const pluginExist = glob + .sync([ + "node_modules/webpack/lib/*Plugin.js", + "node_modules/webpack/lib/**/*Plugin.js" + ]) + .map(p => + p + .split("/") + .pop() + .replace(".js", "") + ) + .find( + p => p.toLowerCase().indexOf(answerToAction.actionAnswer) >= 0 + ); + if (pluginExist) { + this.configuration.config.item = pluginExist; + const pluginsSchemaPath = glob + .sync([ + "node_modules/webpack/schemas/plugins/*Plugin.json", + "node_modules/webpack/schemas/plugins/**/*Plugin.json" + ]) + .find( + p => + p + .split("/") + .pop() + .replace(".json", "") + .toLowerCase() + .indexOf(answerToAction.actionAnswer) >= 0 + ); + if (pluginsSchemaPath) { + const constructorPrefix = + pluginsSchemaPath.indexOf("optimize") >= 0 + ? "webpack.optimize" + : "webpack"; + const resolvePluginsPath = path.resolve(pluginsSchemaPath); + const pluginSchema = resolvePluginsPath + ? require(resolvePluginsPath) + : null; + let pluginsSchemaProps = ["other"]; + if (pluginSchema) { + Object.keys(pluginSchema) + .filter(p => Array.isArray(pluginSchema[p])) + .forEach(p => { + Object.keys(pluginSchema[p]).forEach(n => { + if (pluginSchema[p][n].properties) { + pluginsSchemaProps = Object.keys( + pluginSchema[p][n].properties + ); + } + }); + }); + } + + return this.prompt([ + List( + "pluginsPropType", + `What property do you want to add ${pluginExist}?`, + pluginsSchemaProps + ) + ]).then(pluginsPropAnswer => { + return this.prompt([ + Input( + "pluginsPropTypeVal", + `What value should ${pluginExist}.${ + pluginsPropAnswer.pluginsPropType + } have?` + ) + ]).then(valForProp => { + this.configuration.config.webpackOptions[action] = { + [`${constructorPrefix}.${pluginExist}`]: { + [pluginsPropAnswer.pluginsPropType]: + valForProp.pluginsPropTypeVal + } + }; + done(); + }); + }); + } else { + this.configuration.config.webpackOptions[ + action + ] = `new webpack.${pluginExist}`; + done(); + } + } else { + // If its not in webpack, check npm + npmExists(answerToAction.actionAnswer).then(p => { + if (p) { + this.dependencies.push(answerToAction.actionAnswer); + const normalizePluginName = answerToAction.actionAnswer.replace( + "-webpack-plugin", + "Plugin" + ); + const pluginName = replaceAt( + normalizePluginName, + 0, + normalizePluginName.charAt(0).toUpperCase() + ); + this.configuration.config.topScope.push( + `const ${pluginName} = require("${ + answerToAction.actionAnswer + }")` + ); + this.configuration.config.webpackOptions[ + action + ] = `new ${pluginName}`; + this.configuration.config.item = answerToAction.actionAnswer; + done(); + this.runInstall(getPackageManager(), this.dependencies, { + "save-dev": true + }); + } else { + console.error( + answerToAction.actionAnswer, + "doesn't exist on NPM or is built in webpack, please check for any misspellings." + ); + process.exit(0); + } + }); + } + } else { + // If we're in the scenario with a deep-property + if (isDeepProp[0]) { + isDeepProp[1] = answerToAction.actionAnswer; + if ( + isDeepProp[1] !== "other" && + (action === "devtool" || action === "watch" || action === "mode") + ) { + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = + answerToAction.actionAnswer; + done(); + return; + } + // Either we are adding directly at the property, else we're in a prop.theOne scenario + const actionMessage = + isDeepProp[1] === "other" + ? `what do you want the key on ${action} to be? (press enter if you want it directly as a value on the property)` + : `what do you want the value of ${isDeepProp[1]} to be?`; + + this.prompt([Input("deepProp", actionMessage)]).then( + deepPropAns => { + // The other option needs to be validated of either being empty or not + if (isDeepProp[1] === "other") { + let othersDeepPropKey = deepPropAns.deepProp + ? `what do you want the value of ${ + deepPropAns.deepProp + } to be?` + : `what do you want to be the value of ${action} to be?`; + // Push the answer to the array we have created, so we can use it later + isDeepProp.push(deepPropAns.deepProp); + this.prompt([Input("deepProp", othersDeepPropKey)]).then( + deepPropAns => { + // Check length, if it has none, add the prop directly on the given action + if (isDeepProp[2].length === 0) { + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = + deepPropAns.deepProp; + } else { + // If not, we're adding to something like devServer.myProp + this.configuration.config.item = + action + "." + isDeepProp[2]; + this.configuration.config.webpackOptions[action] = { + [isDeepProp[2]]: deepPropAns.deepProp + }; + } + done(); + } + ); + } else { + // We got the schema prop, we've correctly prompted it, and can add it directly + this.configuration.config.item = action + "." + isDeepProp[1]; + this.configuration.config.webpackOptions[action] = { + [isDeepProp[1]]: deepPropAns.deepProp + }; + done(); + } + } + ); + } else { + // We're asking for input-only + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = + answerToAction.actionAnswer; + done(); + } + } + }); + } +}; diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js new file mode 100644 index 00000000000..5375ee13a59 --- /dev/null +++ b/lib/generators/init-generator.js @@ -0,0 +1,413 @@ +"use strict"; + +const Generator = require("yeoman-generator"); +const chalk = require("chalk"); +const logSymbols = require("log-symbols"); + +const createCommonsChunkPlugin = require("webpack-addons") + .createCommonsChunkPlugin; + +const Input = require("webpack-addons").Input; +const Confirm = require("webpack-addons").Confirm; +const List = require("webpack-addons").List; + +const getPackageManager = require("../utils/package-manager").getPackageManager; + +const entryQuestions = require("./utils/entry"); +const getBabelPlugin = require("./utils/module"); +const getDefaultPlugins = require("./utils/plugins"); +const tooltip = require("./utils/tooltip"); + +/** + * + * Generator for initializing a webpack config + * + * @class InitGenerator + * @extends Generator + * @returns {Void} After execution, transforms are triggered + * + */ +module.exports = class InitGenerator extends Generator { + constructor(args, opts) { + super(args, opts); + this.isProd = false; + this.dependencies = ["webpack", "uglifyjs-webpack-plugin"]; + this.configuration = { + config: { + webpackOptions: {}, + topScope: [] + } + }; + } + prompting() { + let done = this.async(); + let self = this; + let oneOrMoreEntries; + let regExpForStyles; + let ExtractUseProps; + let outputPath = "dist"; + process.stdout.write( + "\n" + + logSymbols.info + + chalk.blue(" INFO ") + + "For more information and a detailed description of each question, have a look at " + + chalk.bold.green( + "https://github.com/webpack/webpack-cli/blob/master/INIT.md" + ) + + "\n" + ); + process.stdout.write( + logSymbols.info + + chalk.blue(" INFO ") + + "Alternatively, run `webpack(-cli) --help` for usage info." + + "\n\n" + ); + this.configuration.config.webpackOptions.module = { + rules: [] + }; + this.configuration.config.webpackOptions.plugins = getDefaultPlugins(); + this.configuration.config.topScope.push( + "const webpack = require('webpack')", + "const path = require('path')", + tooltip.uglify(), + "const UglifyJSPlugin = require('uglifyjs-webpack-plugin');", + "\n" + ); + + this.prompt([ + Confirm("entryType", "Will your application have multiple bundles?") + ]) + .then(entryTypeAnswer => { + // Ask different questions for entry points + return entryQuestions(self, entryTypeAnswer); + }) + .then(entryOptions => { + this.configuration.config.webpackOptions.entry = entryOptions; + oneOrMoreEntries = Object.keys(entryOptions); + + return this.prompt([ + Input( + "outputType", + "Which folder will your generated bundles be in? [default: dist]:" + ) + ]); + }) + .then(outputTypeAnswer => { + if (!this.configuration.config.webpackOptions.entry.length) { + this.configuration.config.topScope.push(tooltip.commonsChunk()); + this.configuration.config.webpackOptions.output = { + filename: "'[name].[chunkhash].js'", + chunkFilename: "'[name].[chunkhash].js'" + }; + } else { + this.configuration.config.webpackOptions.output = { + filename: "'[name].bundle.js'" + }; + } + if (outputTypeAnswer["outputType"].length) { + outputPath = outputTypeAnswer["outputType"]; + } + this.configuration.config.webpackOptions.output.path = `path.resolve(__dirname, '${outputPath}')`; + }) + .then(() => { + return this.prompt([ + Confirm("prodConfirm", "Are you going to use this in production?") + ]); + }) + .then(prodAnswer => { + if (prodAnswer["prodConfirm"] === true) { + this.isProd = true; + } else { + this.isProd = false; + } + }) + .then(() => { + return this.prompt([ + Confirm("babelConfirm", "Will you be using ES2015?") + ]); + }) + .then(ans => { + if (ans["babelConfirm"] === true) { + this.configuration.config.webpackOptions.module.rules.push( + getBabelPlugin() + ); + this.dependencies.push( + "babel-loader", + "babel-core", + "babel-preset-env" + ); + } + }) + .then(() => { + return this.prompt([ + List("stylingType", "Will you use one of the below CSS solutions?", [ + "SASS", + "LESS", + "CSS", + "PostCSS", + "No" + ]) + ]); + }) + .then(stylingAnswer => { + if (!this.isProd) { + ExtractUseProps = []; + } + switch (stylingAnswer["stylingType"]) { + case "SASS": + this.dependencies.push( + "sass-loader", + "node-sass", + "style-loader", + "css-loader" + ); + regExpForStyles = new RegExp(/\.(scss|css)$/); + if (this.isProd) { + ExtractUseProps = ` + use: [{ + loader: "css-loader", + options: { + sourceMap: true + } + }, { + loader: "sass-loader", + options: { + sourceMap: true + } + }], + fallback: "style-loader" + `; + } else { + ExtractUseProps.push( + { + loader: "'style-loader'" + }, + { + loader: "'css-loader'" + }, + { + loader: "'sass-loader'" + } + ); + } + break; + case "LESS": + regExpForStyles = new RegExp(/\.(less|css)$/); + this.dependencies.push( + "less-loader", + "less", + "style-loader", + "css-loader" + ); + if (this.isProd) { + ExtractUseProps = ` + use: [{ + loader: "css-loader", + options: { + sourceMap: true + } + }, { + loader: "less-loader", + options: { + sourceMap: true + } + }], + fallback: "style-loader" + `; + } else { + ExtractUseProps.push( + { + loader: "'css-loader'", + options: { + sourceMap: true + } + }, + { + loader: "'less-loader'", + options: { + sourceMap: true + } + } + ); + } + break; + case "PostCSS": + this.configuration.config.topScope.push( + tooltip.postcss(), + "const autoprefixer = require('autoprefixer');", + "const precss = require('precss');", + "\n" + ); + this.dependencies.push( + "style-loader", + "css-loader", + "postcss-loader", + "precss", + "autoprefixer" + ); + regExpForStyles = new RegExp(/\.css$/); + if (this.isProd) { + ExtractUseProps = ` + use: [{ + loader: "style-loader" + },{ + loader: "css-loader", + options: { + sourceMap: true, + importLoaders: 1 + } + }, { + loader: "postcss-loader", + options: { + plugins: function () { + return [ + precss, + autoprefixer + ]; + } + } + }], + fallback: "style-loader" + `; + } else { + ExtractUseProps.push( + { + loader: "'style-loader'" + }, + { + loader: "'css-loader'", + options: { + sourceMap: true, + importLoaders: 1 + } + }, + { + loader: "'postcss-loader'", + options: { + plugins: `function () { + return [ + precss, + autoprefixer + ]; + }` + } + } + ); + } + break; + case "CSS": + this.dependencies.push("style-loader", "css-loader"); + regExpForStyles = new RegExp(/\.css$/); + if (this.isProd) { + ExtractUseProps = ` + use: [{ + loader: "css-loader", + options: { + sourceMap: true + } + }], + fallback: "style-loader" + `; + } else { + ExtractUseProps.push( + { + loader: "'style-loader'", + options: { + sourceMap: true + } + }, + { + loader: "'css-loader'" + } + ); + } + break; + default: + regExpForStyles = null; + } + }) + .then(() => { + // Ask if the user wants to use extractPlugin + return this.prompt([ + Input( + "extractPlugin", + "If you want to bundle your CSS files, what will you name the bundle? (press enter to skip)" + ) + ]); + }) + .then(extractAnswer => { + const cssBundleName = extractAnswer.extractPlugin; + if (regExpForStyles) { + if (this.isProd) { + this.configuration.config.topScope.push(tooltip.cssPlugin()); + this.dependencies.push("extract-text-webpack-plugin"); + + if (cssBundleName.length !== 0) { + this.configuration.config.webpackOptions.plugins.push( + `new ExtractTextPlugin('${cssBundleName}.[contentHash].css')` + ); + } else { + this.configuration.config.webpackOptions.plugins.push( + "new ExtractTextPlugin('style.css')" + ); + } + + const moduleRulesObj = { + test: regExpForStyles, + use: `ExtractTextPlugin.extract({ ${ExtractUseProps} })` + }; + + this.configuration.config.webpackOptions.module.rules.push( + moduleRulesObj + ); + this.configuration.config.topScope.push( + "const ExtractTextPlugin = require('extract-text-webpack-plugin');", + "\n" + ); + } else { + const moduleRulesObj = { + test: regExpForStyles, + use: ExtractUseProps + }; + + this.configuration.config.webpackOptions.module.rules.push( + moduleRulesObj + ); + } + } + }) + .then(() => { + if (this.configuration.config.webpackOptions.entry.length === 0) { + oneOrMoreEntries.forEach(prop => { + this.configuration.config.webpackOptions.plugins.push( + createCommonsChunkPlugin(prop) + ); + }); + } + done(); + }); + } + installPlugins() { + let asyncNamePrompt = this.async(); + let defaultName = this.isProd ? "prod" : "config"; + this.prompt([ + Input( + "nameType", + `Name your 'webpack.[name].js?' [default: '${defaultName}']:` + ) + ]) + .then(nameAnswer => { + if (nameAnswer["nameType"].length) { + this.configuration.config.configName = nameAnswer["nameType"]; + } else { + this.configuration.config.configName = defaultName; + } + }) + .then(() => { + asyncNamePrompt(); + this.runInstall(getPackageManager(), this.dependencies, { + "save-dev": true + }); + }); + } +}; diff --git a/lib/generate-loader/loader-generator.js b/lib/generators/loader-generator.js similarity index 95% rename from lib/generate-loader/loader-generator.js rename to lib/generators/loader-generator.js index 8d5720c69ab..f4bb7a45355 100644 --- a/lib/generate-loader/loader-generator.js +++ b/lib/generators/loader-generator.js @@ -1,6 +1,6 @@ var path = require("path"); var _ = require("lodash"); -var webpackGenerator = require("../utils/webpack-generator"); +var webpackGenerator = require("./webpack-generator"); /** * Formats a string into webpack loader format diff --git a/lib/generate-loader/loader-generator.test.js b/lib/generators/loader-generator.test.js similarity index 100% rename from lib/generate-loader/loader-generator.test.js rename to lib/generators/loader-generator.test.js diff --git a/lib/generate-plugin/plugin-generator.js b/lib/generators/plugin-generator.js similarity index 93% rename from lib/generate-plugin/plugin-generator.js rename to lib/generators/plugin-generator.js index ffc4022119a..1d8a09e1e45 100644 --- a/lib/generate-plugin/plugin-generator.js +++ b/lib/generators/plugin-generator.js @@ -1,6 +1,6 @@ var path = require("path"); var _ = require("lodash"); -var webpackGenerator = require("../utils/webpack-generator"); +var webpackGenerator = require("./webpack-generator"); /** * A yeoman generator class for creating a webpack diff --git a/lib/generators/remove-generator.js b/lib/generators/remove-generator.js new file mode 100644 index 00000000000..f249af53cfb --- /dev/null +++ b/lib/generators/remove-generator.js @@ -0,0 +1,3 @@ +const Generator = require("yeoman-generator"); + +module.exports = class RemoveGenerator extends Generator {}; diff --git a/lib/generators/update-generator.js b/lib/generators/update-generator.js new file mode 100644 index 00000000000..fc0515c3b8f --- /dev/null +++ b/lib/generators/update-generator.js @@ -0,0 +1,3 @@ +const Generator = require("yeoman-generator"); + +module.exports = class UpdateGenerator extends Generator {}; diff --git a/lib/creator/yeoman/utils/entry.js b/lib/generators/utils/entry.js similarity index 86% rename from lib/creator/yeoman/utils/entry.js rename to lib/generators/utils/entry.js index 027499c9610..f9756014bde 100644 --- a/lib/creator/yeoman/utils/entry.js +++ b/lib/generators/utils/entry.js @@ -3,6 +3,15 @@ const InputValidate = require("webpack-addons").InputValidate; const validate = require("./validate"); +/** + * + * Prompts for entry points, either if it has multiple or one entry + * + * @param {Object} self - A variable holding the instance of the prompting + * @param {Object} answer - Previous answer from asking if the user wants single or multiple entries + * @returns {Object} An Object that holds the answers given by the user, later used to scaffold + */ + module.exports = (self, answer) => { let entryIdentifiers; let result; diff --git a/lib/generators/utils/module.js b/lib/generators/utils/module.js new file mode 100644 index 00000000000..8c98246d42b --- /dev/null +++ b/lib/generators/utils/module.js @@ -0,0 +1,19 @@ +"use strict"; + +/** + * + * Returns an module.rule object that has the babel loader if invoked + * + * @param {Void} _ - void value + * @returns {Function} A callable function that adds the babel-loader with env preset + */ +module.exports = _ => { + return { + test: new RegExp(/\.js$/), + exclude: "/node_modules/", + loader: "'babel-loader'", + options: { + presets: ["'env'"] + } + }; +}; diff --git a/lib/generators/utils/plugins.js b/lib/generators/utils/plugins.js new file mode 100644 index 00000000000..64f0c32fa06 --- /dev/null +++ b/lib/generators/utils/plugins.js @@ -0,0 +1,14 @@ +"use strict"; + +/** + * + * Callable function with the initial plugins + * + * @param {Void} _ - void value + * @returns {Function} An function that returns an array + * that consists of the uglify plugin + */ + +module.exports = _ => { + return ["new UglifyJSPlugin()"]; +}; diff --git a/lib/creator/yeoman/utils/tooltip.js b/lib/generators/utils/tooltip.js similarity index 82% rename from lib/creator/yeoman/utils/tooltip.js rename to lib/generators/utils/tooltip.js index 97bf748a009..bb9cf982e39 100644 --- a/lib/creator/yeoman/utils/tooltip.js +++ b/lib/generators/utils/tooltip.js @@ -1,5 +1,14 @@ +"use strict"; +/** + * + * Tooltip object that consits of tooltips for various of + * features + * + * @returns {Object} An Object that consists of tooltip methods to be invoked + */ + module.exports = { - uglify: () => { + uglify: _ => { return `/* * We've enabled UglifyJSPlugin for you! This minifies your app * in order to load faster and run less javascript. @@ -8,7 +17,7 @@ module.exports = { * */`; }, - commonsChunk: () => { + commonsChunk: _ => { return `/* * We've enabled commonsChunkPlugin for you. This allows your app to * load faster and it splits the modules you provided as entries across @@ -18,7 +27,7 @@ module.exports = { * */`; }, - cssPlugin: () => { + cssPlugin: _ => { return `/* * We've enabled ExtractTextPlugin for you. This allows your app to * use css modules that will be moved into a separate CSS file instead of inside @@ -28,7 +37,7 @@ module.exports = { * */`; }, - postcss: () => { + postcss: _ => { return `/* * We've enabled Postcss, autoprefixer and precss for you. This allows your app * to lint CSS, support variables and mixins, transpile future CSS syntax, diff --git a/lib/generators/utils/validate.js b/lib/generators/utils/validate.js new file mode 100644 index 00000000000..e6d71a0cc6c --- /dev/null +++ b/lib/generators/utils/validate.js @@ -0,0 +1,17 @@ +"use strict"; + +/** + * + * Validates an input to check if an input is provided + * + * @param {String} value - The input string to validate + * @returns {String | Boolean } Returns truthy if its long enough + * Or a string if the user hasn't written anything + */ +module.exports = value => { + const pass = value.length; + if (pass) { + return true; + } + return "Please specify an answer!"; +}; diff --git a/lib/utils/webpack-generator.js b/lib/generators/webpack-generator.js similarity index 100% rename from lib/utils/webpack-generator.js rename to lib/generators/webpack-generator.js diff --git a/lib/index.js b/lib/index.js index 19fe632aaa8..51726c7079c 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,25 +2,24 @@ const path = require("path"); -/* -* @function initialize -* -* First function to be called after running a flag. This is a check, -* to match the flag with the respective require. -* -* @param { String } command - which feature to use -* @param { Object } args - arguments from the CLI -* @returns { Module } returns the module with the command -* -*/ +/** + * + * First function to be called after running a flag. This is a check, + * to match the flag with the respective require. + * + * @param {String} command - which feature to use + * @param {Object} args - arguments from the CLI + * @returns {Function} invokes the module with the supplied command + * + */ module.exports = function initialize(command, args) { - const popArgs = args.slice(2).pop(); + const popArgs = args ? args.slice(2).pop() : null; switch (command) { case "init": { const initPkgs = args.slice(2).length === 1 ? [] : [popArgs]; //eslint-disable-next-line - return require("./init.js")(initPkgs); + return require("./commands/init.js")(initPkgs); } case "migrate": { const filePaths = args.slice(2).length === 1 ? [] : [popArgs]; @@ -29,7 +28,24 @@ module.exports = function initialize(command, args) { } const inputConfigPath = path.resolve(process.cwd(), filePaths[0]); //eslint-disable-next-line - return require("./migrate.js")(inputConfigPath, inputConfigPath); + return require("./commands/migrate.js")(inputConfigPath, inputConfigPath); + } + case "add": { + //eslint-disable-next-line + return require("./commands/add")(); + } + case "remove": { + //eslint-disable-next-line + return require("./commands/remove")(); + } + case "update": { + return require("./commands/update")(); + } + case "serve": { + return require("./commands/serve").serve(); + } + case "make": { + return require("./commands/make")(); } case "generate-loader": { return require("./generate-loader/index.js")(); diff --git a/lib/init.js b/lib/init.js deleted file mode 100644 index 732d36ac525..00000000000 --- a/lib/init.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -const npmPackagesExists = require("./utils/npm-packages-exists"); -const creator = require("./creator/index").creator; - -/* -* @function initializeInquirer -* -* First function to be called after running the init flag. This is a check, -* if we are running the init command with no arguments or if we got dependencies -* -* @param { Object } pkg - packages included when running the init command -* @returns { } creator|npmPackagesExists - returns an installation of the package, -* followed up with a yeoman instance of that if there's packages. If not, it creates a defaultGenerator -*/ - -module.exports = function initializeInquirer(pkg) { - if (pkg.length === 0) { - return creator(); - } - return npmPackagesExists(pkg); -}; diff --git a/lib/creator/index.js b/lib/init/index.js similarity index 72% rename from lib/creator/index.js rename to lib/init/index.js index e68049c963a..8fb2b3f6140 100644 --- a/lib/creator/index.js +++ b/lib/init/index.js @@ -3,22 +3,21 @@ const yeoman = require("yeoman-environment"); const Generator = require("yeoman-generator"); const path = require("path"); -const defaultGenerator = require("./yeoman/webpack-generator"); -const WebpackAdapter = require("./yeoman/webpack-adapter"); +const defaultGenerator = require("../generators/init-generator"); const runTransform = require("./transformations/index"); -/* -* @function creator -* -* Runs yeoman and runs the transformations based on the object -* built up from an author/user -* -* @param { String } options - An path to the given generator -* @returns { Function } runTransform - Run transformations based on yeoman prompt -*/ +/** + * + * Runs yeoman and runs the transformations based on the object + * built up from an author/user + * + * @param {String} options - An path to the given generator + * @returns {Function} runTransform - Run transformations based on the finished + * yeoman instance + */ function creator(options) { - let env = yeoman.createEnv("webpack", null, new WebpackAdapter()); + let env = yeoman.createEnv("webpack", null); const generatorName = options ? replaceGeneratorName(path.basename(options[0])) : "webpack-default-generator"; @@ -35,7 +34,7 @@ function creator(options) { env.registerStub(defaultGenerator, "webpack-default-generator"); } - env.run(generatorName).on("end", () => { + env.run(generatorName).on("end", _ => { if (generatorName !== "webpack-default-generator") { //HACK / FIXME env = env.options.env; diff --git a/lib/creator/index.test.js b/lib/init/index.test.js similarity index 100% rename from lib/creator/index.test.js rename to lib/init/index.test.js diff --git a/lib/creator/transformations/context/__snapshots__/context.test.js.snap b/lib/init/transformations/context/__snapshots__/context.test.js.snap similarity index 68% rename from lib/creator/transformations/context/__snapshots__/context.test.js.snap rename to lib/init/transformations/context/__snapshots__/context.test.js.snap index a6f0276751a..83a8862858b 100644 --- a/lib/creator/transformations/context/__snapshots__/context.test.js.snap +++ b/lib/init/transformations/context/__snapshots__/context.test.js.snap @@ -38,3 +38,19 @@ exports[`context transforms correctly using "context-2" data 1`] = ` } " `; + +exports[`context transforms correctly using "context-3" data 1`] = ` +"module.exports = { + entry: 'index.js', + context: path.join('dist', mist) +} +" +`; + +exports[`context transforms correctly using "context-4" data 1`] = ` +"module.exports = { + entry: 'index.js', + context: 'just did' +} +" +`; diff --git a/lib/creator/transformations/context/__testfixtures__/context-0.input.js b/lib/init/transformations/context/__testfixtures__/context-0.input.js similarity index 100% rename from lib/creator/transformations/context/__testfixtures__/context-0.input.js rename to lib/init/transformations/context/__testfixtures__/context-0.input.js diff --git a/lib/creator/transformations/context/__testfixtures__/context-1.input.js b/lib/init/transformations/context/__testfixtures__/context-1.input.js similarity index 100% rename from lib/creator/transformations/context/__testfixtures__/context-1.input.js rename to lib/init/transformations/context/__testfixtures__/context-1.input.js diff --git a/lib/creator/transformations/context/__testfixtures__/context-2.input.js b/lib/init/transformations/context/__testfixtures__/context-2.input.js similarity index 100% rename from lib/creator/transformations/context/__testfixtures__/context-2.input.js rename to lib/init/transformations/context/__testfixtures__/context-2.input.js diff --git a/lib/init/transformations/context/__testfixtures__/context-3.input.js b/lib/init/transformations/context/__testfixtures__/context-3.input.js new file mode 100644 index 00000000000..b3f3946bbe1 --- /dev/null +++ b/lib/init/transformations/context/__testfixtures__/context-3.input.js @@ -0,0 +1,3 @@ +module.exports = { + entry: 'index.js', +} diff --git a/lib/init/transformations/context/__testfixtures__/context-4.input.js b/lib/init/transformations/context/__testfixtures__/context-4.input.js new file mode 100644 index 00000000000..c9a7cb7d37c --- /dev/null +++ b/lib/init/transformations/context/__testfixtures__/context-4.input.js @@ -0,0 +1,4 @@ +module.exports = { + entry: 'index.js', + context: 'reassign me like one of your french girls' +} diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js new file mode 100644 index 00000000000..5b4128f9bc8 --- /dev/null +++ b/lib/init/transformations/context/context.js @@ -0,0 +1,55 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for context. Finds the context property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function contextTransform(j, ast, webpackProperties, action) { + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "context", + webpackProperties + ) + ); + } else if (action === "add") { + const contextNode = utils.findRootNodesByName(j, ast, "context"); + if (contextNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "context", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return contextTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js new file mode 100644 index 00000000000..7dcf6b0474d --- /dev/null +++ b/lib/init/transformations/context/context.test.js @@ -0,0 +1,16 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "context", + "context-0", + "path.resolve(__dirname, 'app')", + "init" +); +defineTest(__dirname, "context", "context-1", "'./some/fake/path'", "init"); +defineTest(__dirname, "context", "context-2", "contextVariable", "init"); + +defineTest(__dirname, "context", "context-3", "path.join('dist', mist)", "add"); +defineTest(__dirname, "context", "context-4", "'just did'", "add"); diff --git a/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap b/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap new file mode 100644 index 00000000000..dfa4348efd4 --- /dev/null +++ b/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap @@ -0,0 +1,74 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`devServer transforms correctly using "devServer-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devServer: { + contentBase: path.join(__dirname, 'dist'), + compress: true, + port: 9000 + } +} +" +`; + +exports[`devServer transforms correctly using "devServer-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devServer: someVar +} +" +`; + +exports[`devServer transforms correctly using "devServer-2" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devServer: { + contentBase: path.join(__dirname, 'dist'), + compress: true, + port: 9000 + } +} +" +`; + +exports[`devServer transforms correctly using "devServer-3" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devServer: { + contentBase: path.join(__dirname, 'dist'), + compress: true, + port: 420 +} +} +" +`; + +exports[`devServer transforms correctly using "devServer-4" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devServer: someVar +} +" +`; diff --git a/lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-0.input.js similarity index 100% rename from lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js rename to lib/init/transformations/devServer/__testfixtures__/devServer-0.input.js diff --git a/lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-1.input.js similarity index 100% rename from lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js rename to lib/init/transformations/devServer/__testfixtures__/devServer-1.input.js diff --git a/lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js similarity index 100% rename from lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js rename to lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js diff --git a/lib/init/transformations/devServer/__testfixtures__/devServer-3.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-3.input.js new file mode 100644 index 00000000000..cff14a3c463 --- /dev/null +++ b/lib/init/transformations/devServer/__testfixtures__/devServer-3.input.js @@ -0,0 +1,11 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devServer: { + contentBase: "edSheeran", + compress: true, + port: 9000 +} +} diff --git a/lib/init/transformations/devServer/__testfixtures__/devServer-4.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-4.input.js new file mode 100644 index 00000000000..747b85cabd8 --- /dev/null +++ b/lib/init/transformations/devServer/__testfixtures__/devServer-4.input.js @@ -0,0 +1,9 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devServer: { + empti: "ness" + } +} diff --git a/lib/init/transformations/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js new file mode 100644 index 00000000000..2ebfdcee408 --- /dev/null +++ b/lib/init/transformations/devServer/devServer.js @@ -0,0 +1,89 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for devServer. Finds the devServer property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function devServerTransform( + j, + ast, + webpackProperties, + action +) { + function createDevServerProperty(p) { + utils.pushCreateProperty(j, p, "devServer", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "devServer"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createDevServerProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "devServer", + webpackProperties + ) + ); + } else if (action === "add") { + const devServerNode = utils.findRootNodesByName(j, ast, "devServer"); + if (devServerNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "devServer" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (devServerNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "devServer" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return devServerTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/devServer/devServer.test.js b/lib/init/transformations/devServer/devServer.test.js new file mode 100644 index 00000000000..d1832185f7f --- /dev/null +++ b/lib/init/transformations/devServer/devServer.test.js @@ -0,0 +1,41 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "devServer", + "devServer-0", + { + contentBase: "path.join(__dirname, 'dist')", + compress: true, + port: 9000 + }, + "init" +); +defineTest(__dirname, "devServer", "devServer-1", "someVar", "init"); + +defineTest( + __dirname, + "devServer", + "devServer-2", + { + contentBase: "path.join(__dirname, 'dist')", + compress: true, + port: 9000 + }, + "add" +); + +defineTest( + __dirname, + "devServer", + "devServer-3", + { + contentBase: "path.join(__dirname, 'dist')", + port: 420 + }, + "add" +); + +defineTest(__dirname, "devServer", "devServer-4", "someVar", "add"); diff --git a/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap b/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap new file mode 100644 index 00000000000..d82d810dd5a --- /dev/null +++ b/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap @@ -0,0 +1,114 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`devtool transforms correctly using "devtool-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: 'source-map' +} +" +`; + +exports[`devtool transforms correctly using "devtool-0" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: myVariable +} +" +`; + +exports[`devtool transforms correctly using "devtool-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: 'cheap-module-source-map' +} +" +`; + +exports[`devtool transforms correctly using "devtool-1" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: false +} +" +`; + +exports[`devtool transforms correctly using "devtool-2" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: 'source-map' +} +" +`; + +exports[`devtool transforms correctly using "devtool-3" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: myVariable +} +" +`; + +exports[`devtool transforms correctly using "devtool-3" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + devtool: 'cheap-module-source-map' +} +" +`; + +exports[`devtool transforms correctly using "devtool-4" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devtool: false +} +" +`; + +exports[`devtool transforms correctly using "devtool-4" data 2`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devtool: false +} +" +`; diff --git a/lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-0.input.js similarity index 100% rename from lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-0.input.js diff --git a/lib/creator/transformations/externals/__testfixtures__/externals-0.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-1.input.js similarity index 100% rename from lib/creator/transformations/externals/__testfixtures__/externals-0.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-1.input.js diff --git a/lib/creator/transformations/externals/__testfixtures__/externals-1.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-2.input.js similarity index 100% rename from lib/creator/transformations/externals/__testfixtures__/externals-1.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-2.input.js diff --git a/lib/creator/transformations/module/__testfixtures__/module-0.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js similarity index 100% rename from lib/creator/transformations/module/__testfixtures__/module-0.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js diff --git a/lib/init/transformations/devtool/__testfixtures__/devtool-4.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-4.input.js new file mode 100644 index 00000000000..d7fc037f215 --- /dev/null +++ b/lib/init/transformations/devtool/__testfixtures__/devtool-4.input.js @@ -0,0 +1,7 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + devtool: 'eval' +} diff --git a/lib/init/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js new file mode 100644 index 00000000000..05bea8ae4c5 --- /dev/null +++ b/lib/init/transformations/devtool/devtool.js @@ -0,0 +1,54 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for devtool. Finds the devtool property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function devToolTransform(j, ast, webpackProperties, action) { + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "devtool", + webpackProperties + ) + ); + } else if (action === "add") { + const devToolNode = utils.findRootNodesByName(j, ast, "devtool"); + if (devToolNode.size() !== 0) { + return devToolNode.forEach(p => { + j(p).replaceWith( + j.property( + "init", + j.identifier("devtool"), + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + }); + } else { + return devToolTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/devtool/devtool.test.js b/lib/init/transformations/devtool/devtool.test.js new file mode 100644 index 00000000000..02464db79a5 --- /dev/null +++ b/lib/init/transformations/devtool/devtool.test.js @@ -0,0 +1,26 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "devtool", "devtool-0", "'source-map'", "init"); +defineTest(__dirname, "devtool", "devtool-0", "myVariable", "init"); +defineTest( + __dirname, + "devtool", + "devtool-1", + "'cheap-module-source-map'", + "init" +); +defineTest(__dirname, "devtool", "devtool-1", "false", "init"); + +defineTest(__dirname, "devtool", "devtool-2", "'source-map'", "add"); +defineTest(__dirname, "devtool", "devtool-3", "myVariable", "add"); +defineTest( + __dirname, + "devtool", + "devtool-3", + "'cheap-module-source-map'", + "add" +); +defineTest(__dirname, "devtool", "devtool-4", false, "add"); +defineTest(__dirname, "devtool", "devtool-4", "false", "add"); diff --git a/lib/creator/transformations/entry/__snapshots__/entry.test.js.snap b/lib/init/transformations/entry/__snapshots__/entry.test.js.snap similarity index 50% rename from lib/creator/transformations/entry/__snapshots__/entry.test.js.snap rename to lib/init/transformations/entry/__snapshots__/entry.test.js.snap index 1fb3d3acd85..8d92d0c9f61 100644 --- a/lib/creator/transformations/entry/__snapshots__/entry.test.js.snap +++ b/lib/init/transformations/entry/__snapshots__/entry.test.js.snap @@ -55,3 +55,60 @@ exports[`entry transforms correctly using "entry-0" data 7`] = ` } " `; + +exports[`entry transforms correctly using "entry-0" data 8`] = ` +"module.exports = { + entry: 'index.js' +} +" +`; + +exports[`entry transforms correctly using "entry-0" data 9`] = ` +"module.exports = { + entry: ['index.js', 'app.js'] +} +" +`; + +exports[`entry transforms correctly using "entry-0" data 10`] = ` +"module.exports = { + entry: { + something, + ed: 'eddy.js', + else + } +} +" +`; + +exports[`entry transforms correctly using "entry-0" data 11`] = ` +"module.exports = { + entry: () => new Promise((resolve) => resolve(['./app', './router'])) +} +" +`; + +exports[`entry transforms correctly using "entry-0" data 12`] = ` +"module.exports = { + entry: entryStringVariable +} +" +`; + +exports[`entry transforms correctly using "entry-1" data 1`] = ` +"module.exports = { + entry: { + index: 'outdex.js', + ed: 'sheeran', + app: 'nap.js' + } +} +" +`; + +exports[`entry transforms correctly using "entry-1" data 2`] = ` +"module.exports = { + entry: () => 'index.js' +} +" +`; diff --git a/lib/creator/transformations/entry/__testfixtures__/entry-0.input.js b/lib/init/transformations/entry/__testfixtures__/entry-0.input.js similarity index 100% rename from lib/creator/transformations/entry/__testfixtures__/entry-0.input.js rename to lib/init/transformations/entry/__testfixtures__/entry-0.input.js diff --git a/lib/init/transformations/entry/__testfixtures__/entry-1.input.js b/lib/init/transformations/entry/__testfixtures__/entry-1.input.js new file mode 100644 index 00000000000..03616f38a8f --- /dev/null +++ b/lib/init/transformations/entry/__testfixtures__/entry-1.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: { + index: 'index.js', + ed: 'sheeran' + } +} diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js new file mode 100644 index 00000000000..184229179e9 --- /dev/null +++ b/lib/init/transformations/entry/entry.js @@ -0,0 +1,85 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for entry. Finds the entry property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function entryTransform(j, ast, webpackProperties, action) { + function createEntryProperty(p) { + if (typeof webpackProperties === "string") { + return utils.pushCreateProperty(j, p, "entry", webpackProperties); + } + if (Array.isArray(webpackProperties)) { + const externalArray = utils.createArrayWithChildren( + j, + "entry", + webpackProperties, + true + ); + return p.value.properties.push(externalArray); + } else { + utils.pushCreateProperty(j, p, "entry", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "entry"); + } + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createEntryProperty)); + } else if (action === "add") { + const entryNode = utils.findRootNodesByName(j, ast, "entry"); + if (entryNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "entry" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (entryNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "entry" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return entryTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/entry/entry.test.js b/lib/init/transformations/entry/entry.test.js new file mode 100644 index 00000000000..406c8830ea3 --- /dev/null +++ b/lib/init/transformations/entry/entry.test.js @@ -0,0 +1,71 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "entry", "entry-0", "'index.js'", "init"); +defineTest(__dirname, "entry", "entry-0", ["'index.js'", "'app.js'"], "init"); +defineTest( + __dirname, + "entry", + "entry-0", + { + index: "'index.js'", + app: "'app.js'" + }, + "init" +); + +defineTest( + __dirname, + "entry", + "entry-0", + { + inject: "something", + app: "'app.js'", + inject_1: "else" + }, + "init" +); +defineTest(__dirname, "entry", "entry-0", "() => 'index.js'", "init"); +defineTest( + __dirname, + "entry", + "entry-0", + "() => new Promise((resolve) => resolve(['./app', './router']))", + "init" +); +defineTest(__dirname, "entry", "entry-0", "entryStringVariable", "init"); + +defineTest(__dirname, "entry", "entry-0", "'index.js'", "add"); +defineTest(__dirname, "entry", "entry-0", ["'index.js'", "'app.js'"], "add"); +defineTest( + __dirname, + "entry", + "entry-1", + { + index: "'outdex.js'", + app: "'nap.js'" + }, + "add" +); + +defineTest( + __dirname, + "entry", + "entry-0", + { + inject: "something", + ed: "'eddy.js'", + inject_1: "else" + }, + "add" +); +defineTest(__dirname, "entry", "entry-1", "() => 'index.js'", "add"); +defineTest( + __dirname, + "entry", + "entry-0", + "() => new Promise((resolve) => resolve(['./app', './router']))", + "add" +); +defineTest(__dirname, "entry", "entry-0", "entryStringVariable", "add"); diff --git a/lib/creator/transformations/externals/__snapshots__/externals.test.js.snap b/lib/init/transformations/externals/__snapshots__/externals.test.js.snap similarity index 100% rename from lib/creator/transformations/externals/__snapshots__/externals.test.js.snap rename to lib/init/transformations/externals/__snapshots__/externals.test.js.snap diff --git a/lib/creator/transformations/module/__testfixtures__/module-1.input.js b/lib/init/transformations/externals/__testfixtures__/externals-0.input.js similarity index 100% rename from lib/creator/transformations/module/__testfixtures__/module-1.input.js rename to lib/init/transformations/externals/__testfixtures__/externals-0.input.js diff --git a/lib/creator/transformations/node/__testfixtures__/node-0.input.js b/lib/init/transformations/externals/__testfixtures__/externals-1.input.js similarity index 100% rename from lib/creator/transformations/node/__testfixtures__/node-0.input.js rename to lib/init/transformations/externals/__testfixtures__/externals-1.input.js diff --git a/lib/init/transformations/externals/__testfixtures__/externals-2.input.js b/lib/init/transformations/externals/__testfixtures__/externals-2.input.js new file mode 100644 index 00000000000..1111c6e4831 --- /dev/null +++ b/lib/init/transformations/externals/__testfixtures__/externals-2.input.js @@ -0,0 +1,12 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + externals: { + highdash: { + commonjs: 'lodash', + amd: 'lodash' + } + } +} diff --git a/lib/init/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js new file mode 100644 index 00000000000..ebc903bc272 --- /dev/null +++ b/lib/init/transformations/externals/externals.js @@ -0,0 +1,109 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for externals. Finds the externals property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function externalsTransform( + j, + ast, + webpackProperties, + action +) { + function createExternalProperty(p) { + if ( + webpackProperties instanceof RegExp || + typeof webpackProperties === "string" + ) { + return utils.pushCreateProperty(j, p, "externals", webpackProperties); + } + if (Array.isArray(webpackProperties)) { + const externalArray = utils.createArrayWithChildren( + j, + "externals", + webpackProperties, + true + ); + return p.value.properties.push(externalArray); + } else { + utils.pushCreateProperty(j, p, "externals", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "externals"); + } + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, [ + "parent", + "value", + "left", + "property", + "name" + ]) === "exports" + ) + .forEach(createExternalProperty); + } else if (action === "add") { + const externalNode = utils.findRootNodesByName(j, ast, "externals"); + if (externalNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "externals" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + // need to check for every prop beneath, use the recursion util + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + externalNode.size() !== 0 && + Array.isArray(webpackProperties) + ) { + // Todo + } else if (externalNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "externals" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return externalsTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/externals/externals.test.js b/lib/init/transformations/externals/externals.test.js new file mode 100644 index 00000000000..342d30f7a70 --- /dev/null +++ b/lib/init/transformations/externals/externals.test.js @@ -0,0 +1,204 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "externals", "externals-0", /react/, "init"); +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'jQuery'", + react: "'react'" + }, + "init" +); + +defineTest(__dirname, "externals", "externals-1", "myObj", "init"); + +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'jQuery'", + react: "reactObj" + }, + "init" +); + +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'jQuery'", + react: ["reactObj", "path.join(__dirname, 'app')", "'jquery'"] + }, + "init" +); + +defineTest( + __dirname, + "externals", + "externals-1", + { + lodash: { + commonjs: "'lodash'", + amd: "'lodash'", + root: "'_'" + } + }, + "init" +); + +defineTest( + __dirname, + "externals", + "externals-1", + { + lodash: { + commonjs: "lodash", + amd: "hidash", + root: "_" + } + }, + "init" +); + +defineTest( + __dirname, + "externals", + "externals-1", + [ + { + a: "false", + b: "true", + "'./ext'": "./hey" + }, + "function(context, request, callback) {" + + "if (/^yourregex$/.test(request)){" + + "return callback(null, 'commonjs ' + request);" + + "}" + + "callback();" + + "}" + ], + "init" +); + +defineTest( + __dirname, + "externals", + "externals-1", + [ + "myObj", + "function(context, request, callback) {" + + "if (/^yourregex$/.test(request)){" + + "return callback(null, 'commonjs ' + request);" + + "}" + + "callback();" + + "}" + ], + "init" +); +/* +defineTest(__dirname, "externals", "externals-0", /react/, "add"); +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'qQuery'", + react: "'isNowPreact'" + }, + "add" +); + +defineTest(__dirname, "externals", "externals-1", "myObj", "add"); + +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'jQuery'", + react: "reactObj" + }, + "add" +); + +defineTest( + __dirname, + "externals", + "externals-1", + { + jquery: "'jQuery'", + react: ["reactObj", "path.join(__dirname, 'app')", "'jquery'"] + }, + "add" +); + +defineTest( + __dirname, + "externals", + "externals-2", + { + highdash: { + commonjs: "'highdash'", + amd: "'lodash'", + root: "'_'" + } + }, + "add" +); + +defineTest( + __dirname, + "externals", + "externals-1", + { + lodash: { + commonjs: "lodash", + amd: "hidash", + root: "_" + } + }, + "add" +); + +defineTest( + __dirname, + "externals", + "externals-1", + [ + { + a: "false", + b: "true", + "'./ext'": "./hey" + }, + "function(context, request, callback) {" + + "if (/^yourregex$/.test(request)){" + + "return callback(null, 'commonjs ' + request);" + + "}" + + "callback();" + + "}" + ], + "add" +); + +defineTest( + __dirname, + "externals", + "externals-1", + [ + "myObj", + "function(context, request, callback) {" + + "if (/^yourregex$/.test(request)){" + + "return callback(null, 'commonjs ' + request);" + + "}" + + "callback();" + + "}" + ], + "add" +); +*/ diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js new file mode 100644 index 00000000000..dc44c0ed42f --- /dev/null +++ b/lib/init/transformations/index.js @@ -0,0 +1,150 @@ +"use strict"; + +const path = require("path"); +const j = require("jscodeshift"); +const chalk = require("chalk"); +const pEachSeries = require("p-each-series"); + +const runPrettier = require("../../utils/run-prettier"); + +const entryTransform = require("./entry/entry"); +const outputTransform = require("./output/output"); +const contextTransform = require("./context/context"); +const resolveTransform = require("./resolve/resolve"); +const devtoolTransform = require("./devtool/devtool"); +const targetTransform = require("./target/target"); +const watchTransform = require("./watch/watch"); +const watchOptionsTransform = require("./watch/watchOptions"); +const externalsTransform = require("./externals/externals"); +const nodeTransform = require("./node/node"); +const performanceTransform = require("./performance/performance"); +const statsTransform = require("./stats/stats"); +const amdTransform = require("./other/amd"); +const bailTransform = require("./other/bail"); +const cacheTransform = require("./other/cache"); +const profileTransform = require("./other/profile"); +const mergeTransform = require("./other/merge"); +const parallelismTransform = require("./other/parallelism"); +const recordsInputPathTransform = require("./other/recordsInputPath"); +const recordsOutputPathTransform = require("./other/recordsOutputPath"); +const recordsPathTransform = require("./other/recordsPath"); +const moduleTransform = require("./module/module"); +const pluginsTransform = require("./plugins/plugins"); +const topScopeTransform = require("./top-scope/top-scope"); +const devServerTransform = require("./devServer/devServer"); +const modeTransform = require("./mode/mode"); +const resolveLoaderTransform = require("./resolveLoader/resolveLoader"); + +/** + * + * Runs the transformations from an object we get from yeoman + * + * @param {Object} webpackProperties - Configuration to transform + * @param {String} action - Action to be done on the given ast + * @returns {Promise} - A promise that writes each transform, runs prettier + * and writes the file + */ + +const transformsObject = { + entryTransform, + outputTransform, + contextTransform, + resolveTransform, + devtoolTransform, + targetTransform, + watchTransform, + watchOptionsTransform, + externalsTransform, + nodeTransform, + performanceTransform, + statsTransform, + amdTransform, + bailTransform, + cacheTransform, + profileTransform, + moduleTransform, + pluginsTransform, + topScopeTransform, + mergeTransform, + devServerTransform, + modeTransform, + parallelismTransform, + recordsInputPathTransform, + recordsOutputPathTransform, + recordsPathTransform, + resolveLoaderTransform +}; + +module.exports = function runTransform(webpackProperties, action) { + // webpackOptions.name sent to nameTransform if match + const webpackConfig = action + ? { config: webpackProperties.config } + : webpackProperties; + Object.keys(webpackConfig).forEach(scaffoldPiece => { + const config = webpackConfig[scaffoldPiece]; + const transformations = Object.keys(transformsObject) + .map(k => { + const stringVal = k.substr(0, k.indexOf("Transform")); + if (config.webpackOptions) { + if (config.webpackOptions[stringVal]) { + return [transformsObject[k], config.webpackOptions[stringVal]]; + } else { + return [transformsObject[k], config[stringVal]]; + } + } else { + return [transformsObject[k]]; + } + }) + .filter(e => e[1]); + + const ast = j( + action ? webpackProperties.configFile : "module.exports = {}" + ); + const transformAction = action || null; + + return pEachSeries(transformations, f => { + if (!f[1]) { + return f[0](j, ast, transformAction); + } else { + return f[0](j, ast, f[1], transformAction); + } + }) + .then(_ => { + let configurationName; + if (!config.configName) { + configurationName = "webpack.config.js"; + } else { + configurationName = "webpack." + config.configName + ".js"; + } + + const outputPath = action + ? webpackProperties.configPath + : path.join(process.cwd(), configurationName); + const source = ast.toSource({ + quote: "single" + }); + + runPrettier(outputPath, source); + }) + .catch(err => { + console.error(err.message ? err.message : err); + }); + }); + if (action) { + process.stdout.write( + "\n" + + chalk.green( + `Congratulations! ${ + webpackProperties.config.item + } has been ${action}ed!\n` + ) + ); + } else { + process.stdout.write( + "\n" + + chalk.green( + "Congratulations! Your new webpack configuration file has been created!\n" + ) + ); + } +}; diff --git a/lib/init/transformations/mode/__snapshots__/mode.test.js.snap b/lib/init/transformations/mode/__snapshots__/mode.test.js.snap new file mode 100644 index 00000000000..ddb18a7f1cf --- /dev/null +++ b/lib/init/transformations/mode/__snapshots__/mode.test.js.snap @@ -0,0 +1,29 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`mode transforms correctly using "mode-1" data 1`] = ` +"module.exports = { + mode: 'production' +}; +" +`; + +exports[`mode transforms correctly using "mode-1" data 2`] = ` +"module.exports = { + mode: modeVariable +}; +" +`; + +exports[`mode transforms correctly using "mode-2" data 1`] = ` +"module.exports = { + mode: none +} +" +`; + +exports[`mode transforms correctly using "mode-2" data 2`] = ` +"module.exports = { + mode: 'production' +} +" +`; diff --git a/lib/init/transformations/mode/__testfixtures__/mode-1.input.js b/lib/init/transformations/mode/__testfixtures__/mode-1.input.js new file mode 100644 index 00000000000..f053ebf7976 --- /dev/null +++ b/lib/init/transformations/mode/__testfixtures__/mode-1.input.js @@ -0,0 +1 @@ +module.exports = {}; diff --git a/lib/init/transformations/mode/__testfixtures__/mode-2.input.js b/lib/init/transformations/mode/__testfixtures__/mode-2.input.js new file mode 100644 index 00000000000..d4922f86068 --- /dev/null +++ b/lib/init/transformations/mode/__testfixtures__/mode-2.input.js @@ -0,0 +1,3 @@ +module.exports = { + mode: 'development' +} diff --git a/lib/init/transformations/mode/mode.js b/lib/init/transformations/mode/mode.js new file mode 100644 index 00000000000..3c92d2880f6 --- /dev/null +++ b/lib/init/transformations/mode/mode.js @@ -0,0 +1,55 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for mode. Finds the mode property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function modeTransform(j, ast, webpackProperties, action) { + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "mode", + webpackProperties + ) + ); + } else if (action === "add") { + const modeNode = utils.findRootNodesByName(j, ast, "mode"); + if (modeNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "mode", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return modeTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/mode/mode.test.js b/lib/init/transformations/mode/mode.test.js new file mode 100644 index 00000000000..b5bc662fb73 --- /dev/null +++ b/lib/init/transformations/mode/mode.test.js @@ -0,0 +1,9 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "mode", "mode-1", "'production'", "init"); +defineTest(__dirname, "mode", "mode-1", "modeVariable", "init"); + +defineTest(__dirname, "mode", "mode-2", "none", "add"); +defineTest(__dirname, "mode", "mode-2", "'production'", "add"); diff --git a/lib/creator/transformations/module/__snapshots__/module.test.js.snap b/lib/init/transformations/module/__snapshots__/module.test.js.snap similarity index 53% rename from lib/creator/transformations/module/__snapshots__/module.test.js.snap rename to lib/init/transformations/module/__snapshots__/module.test.js.snap index 537735ba1a7..9a7c0dcce10 100644 --- a/lib/creator/transformations/module/__snapshots__/module.test.js.snap +++ b/lib/init/transformations/module/__snapshots__/module.test.js.snap @@ -99,6 +99,55 @@ exports[`module transforms correctly using "module-0" data 2`] = ` " `; +exports[`module transforms correctly using "module-0" data 3`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + module: { + rules: [{ + test: /\\\\.(js|vue)$/, + loader: 'eslint-loader', + enforce: 'pre', + include: [customObj, 'Stringy'], + + options: { + formatter: 'someOption' + } + }, { + test: /\\\\.vue$/, + loader: 'vue-loader', + options: vueObject + }, { + test: /\\\\.js$/, + loader: 'babel-loader', + include: [resolve('src'), resolve('test')] + }, { + test: /\\\\.(png|jpe?g|gif|svg)(\\\\?.*)?$/, + loader: 'url-loader', + + options: { + limit: 10000, + name: utils.assetsPath('img/[name].[hash:7].[ext]') + } + }, { + test: /\\\\.(woff2?|eot|ttf|otf)(\\\\?.*)?$/, + loader: 'url-loader', + + options: { + limit: 10000, + name: utils.assetsPath('fonts/[name].[hash:7].[ext]'), + someArr: [Hey] + } + }] + } +} +" +`; + exports[`module transforms correctly using "module-1" data 1`] = ` "module.exports = { entry: 'index.js', @@ -129,3 +178,80 @@ exports[`module transforms correctly using "module-1" data 1`] = ` } " `; + +exports[`module transforms correctly using "module-1" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + module: { + noParse: /jquery|lodash/, + + rules: [{ + test: /\\\\.js$/, + + parser: { + amd: false + }, + + use: ['htmllint-loader', { + loader: 'html-loader', + + options: { + hello: 'world' + } + }] + }] + } +} +" +`; + +exports[`module transforms correctly using "module-2" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + module: { + rules: [ + { + loader: \\"'eslint-loader'\\", + enforce: \\"'pre'\\", + include: [\\"hey\\", \\"'Stringy'\\"], + options: { + formatter: \\"'someOption'\\" + } + }, + { + loader: \\"'vue-loader'\\", + options: \\"vueObject\\" + }, + { + loader: \\"'babel-loader'\\", + include: [\\"resolve('src')\\", \\"resolve('test')\\"] + }, + { + loader: \\"'url-loader'\\", + options: { + limit: 10000, + name: \\"utils.assetsPath('img/[name].[hash:7].[ext]')\\", + inject: \\"{{#if_eq build 'standalone'}}\\" + } + }, + { + loader: \\"'url-loader'\\", + inject: \\"{{#if_eq build 'standalone'}}\\", + options: { + limit: \\"10000\\", + name: \\"utils.assetsPath('fonts/[name].[hash:7].[ext]')\\" + } + } + ] + }, +} +" +`; diff --git a/lib/creator/transformations/other/__testfixtures__/other-0.input.js b/lib/init/transformations/module/__testfixtures__/module-0.input.js similarity index 100% rename from lib/creator/transformations/other/__testfixtures__/other-0.input.js rename to lib/init/transformations/module/__testfixtures__/module-0.input.js diff --git a/lib/creator/transformations/performance/__testfixtures__/performance-0.input.js b/lib/init/transformations/module/__testfixtures__/module-1.input.js similarity index 100% rename from lib/creator/transformations/performance/__testfixtures__/performance-0.input.js rename to lib/init/transformations/module/__testfixtures__/module-1.input.js diff --git a/lib/init/transformations/module/__testfixtures__/module-2.input.js b/lib/init/transformations/module/__testfixtures__/module-2.input.js new file mode 100644 index 00000000000..c8bebc01efd --- /dev/null +++ b/lib/init/transformations/module/__testfixtures__/module-2.input.js @@ -0,0 +1,42 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + module: { + rules: [ + { + loader: "'eslint-loader'", + enforce: "'pre'", + include: ["hey", "'Stringy'"], + options: { + formatter: "'someOption'" + } + }, + { + loader: "'vue-loader'", + options: "vueObject" + }, + { + loader: "'babel-loader'", + include: ["resolve('src')", "resolve('test')"] + }, + { + loader: "'url-loader'", + options: { + limit: 10000, + name: "utils.assetsPath('img/[name].[hash:7].[ext]')", + inject: "{{#if_eq build 'standalone'}}" + } + }, + { + loader: "'url-loader'", + inject: "{{#if_eq build 'standalone'}}", + options: { + limit: "10000", + name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')" + } + } + ] + }, +} diff --git a/lib/init/transformations/module/module.js b/lib/init/transformations/module/module.js new file mode 100644 index 00000000000..0b838e119fb --- /dev/null +++ b/lib/init/transformations/module/module.js @@ -0,0 +1,73 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for module. Finds the module property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function moduleTransform(j, ast, webpackProperties, action) { + function createModuleProperty(p) { + if (typeof webpackProperties === "string") { + return utils.pushCreateProperty(j, p, "module", webpackProperties); + } + if (Array.isArray(webpackProperties)) { + const externalArray = utils.createArrayWithChildren( + j, + "module", + webpackProperties, + true + ); + return p.value.properties.push(externalArray); + } else { + utils.pushCreateProperty(j, p, "module", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "module"); + } + } + function editModuleProperty(p) { + return utils.pushObjectKeys(j, p, webpackProperties, "module", true); + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createModuleProperty)); + } else if (action === "add") { + const moduleNode = utils.findRootNodesByName(j, ast, "module"); + if (moduleNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, editModuleProperty)); + } else if (moduleNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "module" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return moduleTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/module/module.test.js b/lib/init/transformations/module/module.test.js new file mode 100644 index 00000000000..ed6356b3bd0 --- /dev/null +++ b/lib/init/transformations/module/module.test.js @@ -0,0 +1,248 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "module", + "module-0", + { + rules: [ + { + test: new RegExp(/\.(js|vue)$/), + loader: "'eslint-loader'", + enforce: "'pre'", + include: ["customObj", "'Stringy'"], + options: { + formatter: "'someOption'" + } + }, + { + test: new RegExp(/\.vue$/), + loader: "'vue-loader'", + options: "vueObject" + }, + { + test: new RegExp(/\.js$/), + loader: "'babel-loader'", + include: ["resolve('src')", "resolve('test')"] + }, + { + test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: 10000, + name: "utils.assetsPath('img/[name].[hash:7].[ext]')" + } + }, + { + test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: "10000", + name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')", + someArr: ["Hey"] + } + } + ] + }, + "init" +); + +defineTest( + __dirname, + "module", + "module-1", + { + noParse: /jquery|lodash/, + rules: [ + { + test: new RegExp(/\.js$/), + parser: { + amd: false + }, + use: [ + "'htmllint-loader'", + { + loader: "'html-loader'", + options: { + hello: "'world'" + } + } + ] + } + ] + }, + "init" +); + +defineTest( + __dirname, + "module", + "module-0", + { + rules: [ + "{{#if_eq build 'standalone'}}", + { + test: new RegExp(/\.(js|vue)$/), + loader: "'eslint-loader'", + enforce: "'pre'", + include: ["customObj", "'Stringy'"], + options: { + formatter: "'someOption'" + } + }, + { + test: new RegExp(/\.vue$/), + loader: "'vue-loader'", + options: "vueObject" + }, + { + test: new RegExp(/\.js$/), + loader: "'babel-loader'", + include: ["resolve('src')", "resolve('test')"] + }, + { + test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: 10000, + name: "utils.assetsPath('img/[name].[hash:7].[ext]')", + inject: "{{#if_eq build 'standalone'}}" + } + }, + { + test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), + loader: "'url-loader'", + inject: "{{#if_eq build 'standalone'}}", + options: { + limit: "10000", + name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')" + } + } + ] + }, + "init" +); + +defineTest( + __dirname, + "module", + "module-0", + { + rules: [ + { + test: new RegExp(/\.(js|vue)$/), + loader: "'eslint-loader'", + enforce: "'pre'", + include: ["customObj", "'Stringy'"], + options: { + formatter: "'someOption'" + } + }, + { + test: new RegExp(/\.vue$/), + loader: "'vue-loader'", + options: "vueObject" + }, + { + test: new RegExp(/\.js$/), + loader: "'babel-loader'", + include: ["resolve('src')", "resolve('test')"] + }, + { + test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: 10000, + name: "utils.assetsPath('img/[name].[hash:7].[ext]')" + } + }, + { + test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: "10000", + name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')", + someArr: ["Hey"] + } + } + ] + }, + "init" +); + +defineTest( + __dirname, + "module", + "module-1", + { + noParse: /jquery|lodash/, + rules: [ + { + test: new RegExp(/\.js$/), + parser: { + amd: false + }, + use: [ + "'htmllint-loader'", + { + loader: "'html-loader'", + options: { + hello: "'world'" + } + } + ] + } + ] + }, + "add" +); + +defineTest( + __dirname, + "module", + "module-2", + { + rules: [ + { + test: new RegExp(/\.(js|vue)$/), + loader: "'eslint-loader'", + enforce: "'pre'", + include: ["customObj", "'Stringy'"], + options: { + formatter: "'someOption'" + } + }, + { + test: new RegExp(/\.vue$/), + loader: "'vue-loader'", + options: "vueObject" + }, + { + test: new RegExp(/\.js$/), + loader: "'babel-loader'", + include: ["resolve('src')", "resolve('test')"] + }, + { + test: new RegExp(/\.(png|jpe?g|gif|svg)(\?.*)?$/), + loader: "'url-loader'", + options: { + limit: 10000, + name: "utils.assetsPath('img/[name].[hash:7].[ext]')", + inject: "{{#if_eq build 'standalone'}}" + } + }, + { + test: new RegExp(/\.(woff2?|eot|ttf|otf)(\?.*)?$/), + loader: "'url-loader'", + inject: "{{#if_eq build 'standalone'}}", + options: { + limit: "10000", + name: "utils.assetsPath('fonts/[name].[hash:7].[ext]')" + } + } + ] + }, + "add" +); diff --git a/lib/creator/transformations/node/__snapshots__/node.test.js.snap b/lib/init/transformations/node/__snapshots__/node.test.js.snap similarity index 100% rename from lib/creator/transformations/node/__snapshots__/node.test.js.snap rename to lib/init/transformations/node/__snapshots__/node.test.js.snap diff --git a/lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js b/lib/init/transformations/node/__testfixtures__/node-0.input.js similarity index 100% rename from lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js rename to lib/init/transformations/node/__testfixtures__/node-0.input.js diff --git a/lib/init/transformations/node/node.js b/lib/init/transformations/node/node.js new file mode 100644 index 00000000000..e78961d6e34 --- /dev/null +++ b/lib/init/transformations/node/node.js @@ -0,0 +1,44 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for node. Finds the node property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function nodeTransform(j, ast, webpackProperties, action) { + function createNodeProperty(p) { + utils.pushCreateProperty(j, p, "node", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "node"); + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createNodeProperty)); + } else if (action === "add") { + const nodeNode = utils.findRootNodesByName(j, ast, "node"); + if (nodeNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "node")); + } else { + return nodeTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/node/node.test.js b/lib/init/transformations/node/node.test.js new file mode 100644 index 00000000000..e33fa36a1f9 --- /dev/null +++ b/lib/init/transformations/node/node.test.js @@ -0,0 +1,19 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "node", + "node-0", + { + console: false, + global: true, + process: true, + Buffer: true, + __filename: "mock", + __dirname: "mock", + setImmediate: true + }, + "init" +); diff --git a/lib/init/transformations/other/__snapshots__/other.test.js.snap b/lib/init/transformations/other/__snapshots__/other.test.js.snap new file mode 100644 index 00000000000..bc95b877294 --- /dev/null +++ b/lib/init/transformations/other/__snapshots__/other.test.js.snap @@ -0,0 +1,316 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`amd transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + amd: { + jQuery: true, + kQuery: false + } +} +" +`; + +exports[`amd transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: false, + kQuery: true + } +}; +" +`; + +exports[`bail transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + bail: true +} +" +`; + +exports[`bail transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: false, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false, + bail: false + } +}; +" +`; + +exports[`cache transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + cache: true +} +" +`; + +exports[`cache transforms correctly using "other-0" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + cache: cacheVal +} +" +`; + +exports[`cache transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: false, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false, + cache: false + } +}; +" +`; + +exports[`cache transforms correctly using "other-1" data 2`] = ` +"module.exports = { + bail: true, + cache: cacheKey, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false, + cache: cacheKey + } +}; +" +`; + +exports[`merge transforms correctly using "other-0" data 1`] = ` +"module.exports = merge(myConfig, { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +}); +" +`; + +exports[`merge transforms correctly using "other-1" data 1`] = ` +"module.exports = merge(TheirConfig, { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false + } +}); +" +`; + +exports[`parallelism transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + parallelism: 10 +} +" +`; + +exports[`parallelism transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 20, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false, + parallelism: 20 + } +}; +" +`; + +exports[`profile transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + profile: true +} +" +`; + +exports[`profile transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: false, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false, + profile: false + } +}; +" +`; + +exports[`recordsInputPath transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + recordsInputPath: path.join('dist', mine) +} +" +`; + +exports[`recordsInputPath transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: path.join('dist', ours), + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false + } +}; +" +`; + +exports[`recordsOutputPath transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + recordsOutputPath: path.join('src', yours) +} +" +`; + +exports[`recordsOutputPath transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: path.join('src', theirs), + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false + } +}; +" +`; + +exports[`recordsPath transforms correctly using "other-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + recordsPath: path.join(__dirname, 'records.json') +} +" +`; + +exports[`recordsPath transforms correctly using "other-1" data 1`] = ` +"module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: path.resolve(__dirname, 'gradle.json'), + amd: { + jQuery: true, + kQuery: false + } +}; +" +`; diff --git a/lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js b/lib/init/transformations/other/__testfixtures__/other-0.input.js similarity index 100% rename from lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js rename to lib/init/transformations/other/__testfixtures__/other-0.input.js diff --git a/lib/init/transformations/other/__testfixtures__/other-1.input.js b/lib/init/transformations/other/__testfixtures__/other-1.input.js new file mode 100644 index 00000000000..8a7d76b779f --- /dev/null +++ b/lib/init/transformations/other/__testfixtures__/other-1.input.js @@ -0,0 +1,14 @@ +module.exports = { + bail: true, + cache: true, + profile: true, + merge: 'NotMuch', + parallelism: 69, + recordsInputPath: 'somethign', + recordsOutputPath: 'else', + recordsPath: 'Brooklyn', + amd: { + jQuery: true, + kQuery: false + } +}; diff --git a/lib/init/transformations/other/amd.js b/lib/init/transformations/other/amd.js new file mode 100644 index 00000000000..d606eba7eb3 --- /dev/null +++ b/lib/init/transformations/other/amd.js @@ -0,0 +1,84 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for amd. Finds the amd property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function amdTransform(j, ast, webpackProperties, action) { + function createAmdProperty(p) { + utils.pushCreateProperty(j, p, "amd", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "amd"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createAmdProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "amd", + webpackProperties + ) + ); + } else if (action === "add") { + const amdNode = utils.findRootNodesByName(j, ast, "amd"); + if (amdNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "amd" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (amdNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "amd" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return amdTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/bail.js b/lib/init/transformations/other/bail.js new file mode 100644 index 00000000000..474300f057e --- /dev/null +++ b/lib/init/transformations/other/bail.js @@ -0,0 +1,55 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for bail. Finds the bail property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function bailTransform(j, ast, webpackProperties, action) { + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "bail", + webpackProperties + ) + ); + } else if (action === "add") { + const bailNode = utils.findRootNodesByName(j, ast, "bail"); + if (bailNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "bail", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return bailTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/cache.js b/lib/init/transformations/other/cache.js new file mode 100644 index 00000000000..7c808ee88ff --- /dev/null +++ b/lib/init/transformations/other/cache.js @@ -0,0 +1,88 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for cache. Finds the cache property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function cacheTransform(j, ast, webpackProperties, action) { + function createCacheProperty(p) { + utils.pushCreateProperty(j, p, "cache", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "cache"); + } + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createCacheProperty)); + } else if ( + action === "init" && + (webpackProperties.length || typeof webpackProperties === "boolean") + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "cache", + webpackProperties + ) + ); + } else if (action === "add") { + const cacheNode = utils.findRootNodesByName(j, ast, "cache"); + if (cacheNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "cache" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + cacheNode.size() !== 0 && + (typeof webpackProperties === "boolean" || webpackProperties.length > 0) + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "cache", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return cacheTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/creator/transformations/other/merge.js b/lib/init/transformations/other/merge.js similarity index 63% rename from lib/creator/transformations/other/merge.js rename to lib/init/transformations/other/merge.js index 5a80331de5d..f77c77882a8 100644 --- a/lib/creator/transformations/other/merge.js +++ b/lib/init/transformations/other/merge.js @@ -1,17 +1,18 @@ "use strict"; -/* -* -* Transform for merge. Finds the merge property from yeoman and creates a way -* for users to allow webpack-merge in their scaffold -* -* @param j — jscodeshift API -* @param ast - jscodeshift API -* @param { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * Transform for merge. Finds the merge property from yeoman and creates a way + * for users to allow webpack-merge in their scaffold + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createMergeProperty(p) { // FIXME Use j.callExp() let exportsDecl = p.value.body.map(n => { diff --git a/lib/init/transformations/other/other.test.js b/lib/init/transformations/other/other.test.js new file mode 100644 index 00000000000..7ef7ed04e7d --- /dev/null +++ b/lib/init/transformations/other/other.test.js @@ -0,0 +1,81 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "amd", + "other-0", + { + jQuery: true, + kQuery: false + }, + "init" +); +defineTest(__dirname, "bail", "other-0", true, "init"); +defineTest(__dirname, "cache", "other-0", true, "init"); +defineTest(__dirname, "cache", "other-0", "cacheVal", "init"); +defineTest(__dirname, "profile", "other-0", true, "init"); +defineTest(__dirname, "merge", "other-0", "myConfig", "init"); + +defineTest(__dirname, "parallelism", "other-0", 10, "init"); +defineTest( + __dirname, + "recordsInputPath", + "other-0", + "path.join('dist', mine)", + "init" +); +defineTest( + __dirname, + "recordsOutputPath", + "other-0", + "path.join('src', yours)", + "init" +); +defineTest( + __dirname, + "recordsPath", + "other-0", + "path.join(__dirname, 'records.json')", + "init" +); + +defineTest( + __dirname, + "amd", + "other-1", + { + jQuery: false, + kQuery: true + }, + "add" +); +defineTest(__dirname, "bail", "other-1", false, "add"); +defineTest(__dirname, "cache", "other-1", false, "add"); +defineTest(__dirname, "cache", "other-1", "cacheKey", "add"); +defineTest(__dirname, "profile", "other-1", false, "add"); +defineTest(__dirname, "merge", "other-1", "TheirConfig", "add"); + +defineTest(__dirname, "parallelism", "other-1", 20, "add"); +defineTest( + __dirname, + "recordsInputPath", + "other-1", + "path.join('dist', ours)", + "add" +); +defineTest( + __dirname, + "recordsOutputPath", + "other-1", + "path.join('src', theirs)", + "add" +); +defineTest( + __dirname, + "recordsPath", + "other-1", + "path.resolve(__dirname, 'gradle.json')", + "add" +); diff --git a/lib/init/transformations/other/parallelism.js b/lib/init/transformations/other/parallelism.js new file mode 100644 index 00000000000..6cbe456f11d --- /dev/null +++ b/lib/init/transformations/other/parallelism.js @@ -0,0 +1,60 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for parallelism. Finds the parallelism property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function parallelismTransform( + j, + ast, + webpackProperties, + action +) { + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "parallelism", + webpackProperties + ) + ); + } else if (action === "add") { + const parallelismNode = utils.findRootNodesByName(j, ast, "parallelism"); + if (parallelismNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "parallelism", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return parallelismTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/profile.js b/lib/init/transformations/other/profile.js new file mode 100644 index 00000000000..a1454ff015b --- /dev/null +++ b/lib/init/transformations/other/profile.js @@ -0,0 +1,88 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for profile. Finds the profile property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function profileTransform(j, ast, webpackProperties, action) { + function createProfileProperty(p) { + utils.pushCreateProperty(j, p, "profile", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "profile"); + } + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createProfileProperty)); + } else if ( + action === "init" && + (webpackProperties.length || typeof webpackProperties === "boolean") + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "profile", + webpackProperties + ) + ); + } else if (action === "add") { + const profileNode = utils.findRootNodesByName(j, ast, "profile"); + if (profileNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "profile" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + profileNode.size() !== 0 && + (typeof webpackProperties === "boolean" || webpackProperties.length > 0) + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "profile", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return profileTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/recordsInputPath.js b/lib/init/transformations/other/recordsInputPath.js new file mode 100644 index 00000000000..757d46bdb27 --- /dev/null +++ b/lib/init/transformations/other/recordsInputPath.js @@ -0,0 +1,100 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for recordsInputPath. Finds the recordsInputPath property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function recordsInputPathTransform( + j, + ast, + webpackProperties, + action +) { + function createRecordsInputPathProperty(p) { + utils.pushCreateProperty(j, p, "recordsInputPath", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "recordsInputPath"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment(null, p, createRecordsInputPathProperty) + ); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "recordsInputPath", + webpackProperties + ) + ); + } else if (action === "add") { + const recordsInputPathNode = utils.findRootNodesByName( + j, + ast, + "recordsInputPath" + ); + if ( + recordsInputPathNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "recordsInputPath" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + recordsInputPathNode.size() !== 0 && + webpackProperties.length > 0 + ) { + return utils + .findRootNodesByName(j, ast, "recordsInputPath") + .forEach(p => { + j(p).replaceWith( + j.property( + "init", + utils.createIdentifierOrLiteral(j, "recordsInputPath"), + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + }); + } else { + return recordsInputPathTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/recordsOutputPath.js b/lib/init/transformations/other/recordsOutputPath.js new file mode 100644 index 00000000000..565c9021907 --- /dev/null +++ b/lib/init/transformations/other/recordsOutputPath.js @@ -0,0 +1,100 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for recordsOutputPath. Finds the recordsOutputPath property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function recordsOutputPathTransform( + j, + ast, + webpackProperties, + action +) { + function createRecordsOutputPathProperty(p) { + utils.pushCreateProperty(j, p, "recordsOutputPath", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "recordsOutputPath"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment(null, p, createRecordsOutputPathProperty) + ); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "recordsOutputPath", + webpackProperties + ) + ); + } else if (action === "add") { + const recordsOutputPathNode = utils.findRootNodesByName( + j, + ast, + "recordsOutputPath" + ); + if ( + recordsOutputPathNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "recordsOutputPath" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + recordsOutputPathNode.size() !== 0 && + webpackProperties.length > 0 + ) { + return utils + .findRootNodesByName(j, ast, "recordsOutputPath") + .forEach(p => { + j(p).replaceWith( + j.property( + "init", + utils.createIdentifierOrLiteral(j, "recordsOutputPath"), + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + }); + } else { + return recordsOutputPathTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/other/recordsPath.js b/lib/init/transformations/other/recordsPath.js new file mode 100644 index 00000000000..d9d3720a7b9 --- /dev/null +++ b/lib/init/transformations/other/recordsPath.js @@ -0,0 +1,89 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for recordsPath. Finds the recordsPath property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function recordsPathTransform( + j, + ast, + webpackProperties, + action +) { + function createRecordsPathProperty(p) { + utils.pushCreateProperty(j, p, "recordsPath", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "recordsPath"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createRecordsPathProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "recordsPath", + webpackProperties + ) + ); + } else if (action === "add") { + const recordsPathNode = utils.findRootNodesByName(j, ast, "recordsPath"); + if ( + recordsPathNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "recordsPath" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (recordsPathNode.size() !== 0 && webpackProperties.length > 0) { + return recordsPathNode.forEach(p => { + j(p).replaceWith( + j.property( + "init", + utils.createIdentifierOrLiteral(j, "recordsPath"), + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + }); + } else { + return recordsPathTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/creator/transformations/output/__snapshots__/output.test.js.snap b/lib/init/transformations/output/__snapshots__/output.test.js.snap similarity index 56% rename from lib/creator/transformations/output/__snapshots__/output.test.js.snap rename to lib/init/transformations/output/__snapshots__/output.test.js.snap index f1a0081eb2b..1a2703b6c7b 100644 --- a/lib/creator/transformations/output/__snapshots__/output.test.js.snap +++ b/lib/init/transformations/output/__snapshots__/output.test.js.snap @@ -17,3 +17,20 @@ exports[`output transforms correctly using "output-0" data 1`] = ` } " `; + +exports[`output transforms correctly using "output-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'app', + path: 'distro/src', + pathinfo: false, + publicPath: 'https://google.com', + sourceMapFilename: \\"'[name].map'\\", + sourcePrefix: '\\\\t', + umdNamedDefine: true, + strictModuleExceptionHandling: true + }, +} +" +`; diff --git a/lib/creator/transformations/output/__testfixtures__/output-0.input.js b/lib/init/transformations/output/__testfixtures__/output-0.input.js similarity index 100% rename from lib/creator/transformations/output/__testfixtures__/output-0.input.js rename to lib/init/transformations/output/__testfixtures__/output-0.input.js diff --git a/lib/init/transformations/output/__testfixtures__/output-1.input.js b/lib/init/transformations/output/__testfixtures__/output-1.input.js new file mode 100644 index 00000000000..c6a9e1b2d38 --- /dev/null +++ b/lib/init/transformations/output/__testfixtures__/output-1.input.js @@ -0,0 +1,13 @@ +module.exports = { + entry: 'index.js', + output: { + filename: "'bundle'", + path: "'dist/assets'", + pathinfo: true, + publicPath: "'https://google.com'", + sourceMapFilename: "'[name].map'", + sourcePrefix: jscodeshift("'\t'"), + umdNamedDefine: true, + strictModuleExceptionHandling: true + }, +} diff --git a/lib/init/transformations/output/output.js b/lib/init/transformations/output/output.js new file mode 100644 index 00000000000..f8d0e18795c --- /dev/null +++ b/lib/init/transformations/output/output.js @@ -0,0 +1,84 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for output. Finds the output property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function outputTransform(j, ast, webpackProperties, action) { + function createOutputProperty(p) { + utils.pushCreateProperty(j, p, "output", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "output"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createOutputProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "output", + webpackProperties + ) + ); + } else if (action === "add") { + const outputNode = utils.findRootNodesByName(j, ast, "output"); + if (outputNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "output" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (outputNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "output" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return outputTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/output/output.test.js b/lib/init/transformations/output/output.test.js new file mode 100644 index 00000000000..0be5c563a2f --- /dev/null +++ b/lib/init/transformations/output/output.test.js @@ -0,0 +1,35 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); +const jscodeshift = require("jscodeshift"); + +defineTest( + __dirname, + "output", + "output-0", + { + filename: "'bundle'", + path: "'dist/assets'", + pathinfo: true, + publicPath: "'https://google.com'", + sourceMapFilename: "'[name].map'", + sourcePrefix: jscodeshift("'\t'"), + umdNamedDefine: true, + strictModuleExceptionHandling: true + }, + "init" +); + +defineTest( + __dirname, + "output", + "output-1", + { + filename: "'app'", + path: "'distro/src'", + pathinfo: false, + publicPath: "'https://google.com'", + sourcePrefix: jscodeshift("'\t'") + }, + "add" +); diff --git a/lib/creator/transformations/performance/__snapshots__/performance.test.js.snap b/lib/init/transformations/performance/__snapshots__/performance.test.js.snap similarity index 59% rename from lib/creator/transformations/performance/__snapshots__/performance.test.js.snap rename to lib/init/transformations/performance/__snapshots__/performance.test.js.snap index 384c1cb783b..5c09253561a 100644 --- a/lib/creator/transformations/performance/__snapshots__/performance.test.js.snap +++ b/lib/init/transformations/performance/__snapshots__/performance.test.js.snap @@ -17,3 +17,16 @@ exports[`performance transforms correctly using "performance-0" data 1`] = ` } " `; + +exports[`performance transforms correctly using "performance-1" data 1`] = ` +"module.exports = { + performance: { + hints: 'nuclear-warning', + maxEntrypointSize: 400000, + maxAssetSize: 6969, + assetFilter: + un(assetFilename) {return assetFilename.endsWith('.js');} + } +} +" +`; diff --git a/lib/creator/transformations/stats/__testfixtures__/stats-0.input.js b/lib/init/transformations/performance/__testfixtures__/performance-0.input.js similarity index 100% rename from lib/creator/transformations/stats/__testfixtures__/stats-0.input.js rename to lib/init/transformations/performance/__testfixtures__/performance-0.input.js diff --git a/lib/init/transformations/performance/__testfixtures__/performance-1.input.js b/lib/init/transformations/performance/__testfixtures__/performance-1.input.js new file mode 100644 index 00000000000..6071e30d46f --- /dev/null +++ b/lib/init/transformations/performance/__testfixtures__/performance-1.input.js @@ -0,0 +1,11 @@ +module.exports = { + performance: { + hints: "'warning'", + maxEntrypointSize: 400000, + maxAssetSize: 100000, + assetFilter: + "function(assetFilename) {" + + "return assetFilename.endsWith('.js');" + + "}" + } +} diff --git a/lib/init/transformations/performance/performance.js b/lib/init/transformations/performance/performance.js new file mode 100644 index 00000000000..f352d165e71 --- /dev/null +++ b/lib/init/transformations/performance/performance.js @@ -0,0 +1,92 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for performance. Finds the performance property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function performanceTransform( + j, + ast, + webpackProperties, + action +) { + function createPerformanceProperty(p) { + utils.pushCreateProperty(j, p, "performance", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "performance"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createPerformanceProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "performance", + webpackProperties + ) + ); + } else if (action === "add") { + const performanceNode = utils.findRootNodesByName(j, ast, "performance"); + if ( + performanceNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "performance" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (performanceNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "performance" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return performanceTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/performance/performance.test.js b/lib/init/transformations/performance/performance.test.js new file mode 100644 index 00000000000..4b610a98e65 --- /dev/null +++ b/lib/init/transformations/performance/performance.test.js @@ -0,0 +1,32 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "performance", + "performance-0", + { + hints: "'warning'", + maxEntrypointSize: 400000, + maxAssetSize: 100000, + assetFilter: + "function(assetFilename) {" + + "return assetFilename.endsWith('.js');" + + "}" + }, + "init" +); + +defineTest( + __dirname, + "performance", + "performance-1", + { + hints: "'nuclear-warning'", + maxAssetSize: 6969, + assetFilter: + "un(assetFilename) {" + "return assetFilename.endsWith('.js');" + "}" + }, + "add" +); diff --git a/lib/init/transformations/plugins/__snapshots__/plugins.test.js.snap b/lib/init/transformations/plugins/__snapshots__/plugins.test.js.snap new file mode 100644 index 00000000000..edcbbf62050 --- /dev/null +++ b/lib/init/transformations/plugins/__snapshots__/plugins.test.js.snap @@ -0,0 +1,43 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`plugins transforms correctly using "plugins-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + plugins: [ + new webpack.optimize.CommonsChunkPlugin({name:'vendor',filename:'vendor-[hash].min.js'}) + ] +} +" +`; + +exports[`plugins transforms correctly using "plugins-0" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + plugins: [new webpack.optimize.DefinePlugin()] +} +" +`; + +exports[`plugins transforms correctly using "plugins-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + plugins: [ + 'something', + new webpack.optimize.DefinePlugin()('/* Add your arguments here */') + ] +} +" +`; diff --git a/lib/creator/transformations/target/__testfixtures__/target-0.input.js b/lib/init/transformations/plugins/__testfixtures__/plugins-0.input.js similarity index 100% rename from lib/creator/transformations/target/__testfixtures__/target-0.input.js rename to lib/init/transformations/plugins/__testfixtures__/plugins-0.input.js diff --git a/lib/init/transformations/plugins/__testfixtures__/plugins-1.input.js b/lib/init/transformations/plugins/__testfixtures__/plugins-1.input.js new file mode 100644 index 00000000000..0c571f0d243 --- /dev/null +++ b/lib/init/transformations/plugins/__testfixtures__/plugins-1.input.js @@ -0,0 +1,7 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + plugins: ['something'] +} diff --git a/lib/init/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js new file mode 100644 index 00000000000..5119fbc2534 --- /dev/null +++ b/lib/init/transformations/plugins/plugins.js @@ -0,0 +1,56 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for plugins. Finds the plugins property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function pluginsTransform(j, ast, webpackProperties, action) { + function createPluginsProperty(p) { + const pluginArray = utils.createArrayWithChildren( + j, + "plugins", + webpackProperties, + true + ); + return p.value.properties.push(pluginArray); + } + if (webpackProperties) { + if (Array.isArray(webpackProperties) && action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createPluginsProperty)); + } else if (action === "add") { + const pluginsNode = utils.findRootNodesByName(j, ast, "plugins"); + if (pluginsNode.size() !== 0) { + return pluginsNode.filter(p => { + let node = utils.createFunctionWithArguments(j, p, webpackProperties); + if (node) { + p.value.value.elements.push(node); + } else { + return null; + } + }); + } else { + return pluginsTransform(j, ast, [webpackProperties], "init"); + } + } else if (action === "remove") { + return utils + .findRootNodesByName(j, ast, "plugins") + .filter(p => + p.value.value.elements.filter(name => name !== webpackProperties) + ); + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/plugins/plugins.test.js b/lib/init/transformations/plugins/plugins.test.js new file mode 100644 index 00000000000..448e0c72769 --- /dev/null +++ b/lib/init/transformations/plugins/plugins.test.js @@ -0,0 +1,36 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "plugins", + "plugins-0", + [ + "new webpack.optimize.CommonsChunkPlugin({name:" + + "'" + + "vendor" + + "'" + + ",filename:" + + "'" + + "vendor" + + "-[hash].min.js'})" + ], + "init" +); + +defineTest( + __dirname, + "plugins", + "plugins-1", + "new webpack.optimize.DefinePlugin()", + "add" +); + +defineTest( + __dirname, + "plugins", + "plugins-0", + "new webpack.optimize.DefinePlugin()", + "add" +); diff --git a/lib/init/transformations/resolve/__snapshots__/resolve.test.js.snap b/lib/init/transformations/resolve/__snapshots__/resolve.test.js.snap new file mode 100644 index 00000000000..a9efa8a6090 --- /dev/null +++ b/lib/init/transformations/resolve/__snapshots__/resolve.test.js.snap @@ -0,0 +1,68 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`resolve transforms correctly using "resolve-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + resolve: { + alias: { + {{#if_eq build 'standalone'}}, + hello: 'world', + {{/if_eq}}, + world: hello + }, + + aliasFields: ['browser', wars], + descriptionFiles: ['a', b], + enforceExtension: false, + enforceModuleExtension: false, + extensions: [hey, 'ho'], + mainFields: [main, 'story'], + mainFiles: ['noMainFileHere', iGuess], + modules: [one, 'two'], + unsafeCache: false, + plugins: [somePlugin, 'stringVal'], + symlinks: true + } +} +" +`; + +exports[`resolve transforms correctly using "resolve-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + resolve: { + alias: { + inject: {{#isdf_eq buildasda 'staasdndalone'}}, + hello: 'worlasdd', + inject_1: {{/asd}}, + world: asdc + }, + aliasFields: [\\"'browser'\\", \\"wars\\", 'as'], + descriptionFiles: [\\"'a'\\", \\"b\\", \\"'c'\\", 'd', e, f], + enforceExtension: true, + enforceModuleExtension: false, + extensions: [\\"hey\\", \\"ho\\", ok, 'ho'], + mainFields: [\\"main\\", \\"'story'\\", ok], + mainFiles: [\\"'noMainFileHere'\\", \\"iGuess\\", niGuess], + modules: [\\"one\\", \\"'two'\\"], + unsafeCache: false, + resolveLoader: { + modules: [\\"'node_modules'\\", \\"mode_nodules\\"], + extensions: [\\"jsVal\\", \\"'.json'\\", ok, 'ho'], + mainFields: [\\"loader\\", \\"'main'\\", ok, 'story'], + moduleExtensions: [\\"'-loader'\\", \\"value\\"] + }, + plugins: [\\"somePlugin\\", \\"'stringVal'\\"], + symlinks: false + } +} +" +`; diff --git a/lib/creator/transformations/target/__testfixtures__/target-1.input.js b/lib/init/transformations/resolve/__testfixtures__/resolve-0.input.js similarity index 100% rename from lib/creator/transformations/target/__testfixtures__/target-1.input.js rename to lib/init/transformations/resolve/__testfixtures__/resolve-0.input.js diff --git a/lib/init/transformations/resolve/__testfixtures__/resolve-1.input.js b/lib/init/transformations/resolve/__testfixtures__/resolve-1.input.js new file mode 100644 index 00000000000..932c3e5451e --- /dev/null +++ b/lib/init/transformations/resolve/__testfixtures__/resolve-1.input.js @@ -0,0 +1,31 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + resolve: { + alias: { + inject: "{{#if_eq build 'standalone'}}", + hello: "'world'", + inject_1: "{{/if_eq}}", + world: "hello" + }, + aliasFields: ["'browser'", "wars"], + descriptionFiles: ["'a'", "b", "'c'"], + enforceExtension: false, + enforceModuleExtension: false, + extensions: ["hey", "ho"], + mainFields: ["main", "'story'"], + mainFiles: ["'noMainFileHere'", "iGuess"], + modules: ["one", "'two'"], + unsafeCache: false, + resolveLoader: { + modules: ["'node_modules'", "mode_nodules"], + extensions: ["jsVal", "'.json'"], + mainFields: ["loader", "'main'"], + moduleExtensions: ["'-loader'", "value"] + }, + plugins: ["somePlugin", "'stringVal'"], + symlinks: true + } +} diff --git a/lib/init/transformations/resolve/resolve.js b/lib/init/transformations/resolve/resolve.js new file mode 100644 index 00000000000..d62b55693f4 --- /dev/null +++ b/lib/init/transformations/resolve/resolve.js @@ -0,0 +1,73 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for resolve. Finds the resolve property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function resolveTransform(j, ast, webpackProperties, action) { + function createResolveProperty(p) { + if (typeof webpackProperties === "string") { + return utils.pushCreateProperty(j, p, "resolve", webpackProperties); + } + if (Array.isArray(webpackProperties)) { + const externalArray = utils.createArrayWithChildren( + j, + "resolve", + webpackProperties, + true + ); + return p.value.properties.push(externalArray); + } else { + utils.pushCreateProperty(j, p, "resolve", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "resolve"); + } + } + function editResolveProperty(p) { + return utils.pushObjectKeys(j, p, webpackProperties, "resolve", true); + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createResolveProperty)); + } else if (action === "add") { + const resolveNode = utils.findRootNodesByName(j, ast, "resolve"); + if (resolveNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, editResolveProperty)); + } else if (resolveNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "resolve" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return resolveTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/resolve/resolve.test.js b/lib/init/transformations/resolve/resolve.test.js new file mode 100644 index 00000000000..40cc3ac37e5 --- /dev/null +++ b/lib/init/transformations/resolve/resolve.test.js @@ -0,0 +1,52 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "resolve", + "resolve-0", + { + alias: { + inject: "{{#if_eq build 'standalone'}}", + hello: "'world'", + inject_1: "{{/if_eq}}", + world: "hello" + }, + aliasFields: ["'browser'", "wars"], + descriptionFiles: ["'a'", "b"], + enforceExtension: false, + enforceModuleExtension: false, + extensions: ["hey", "'ho'"], + mainFields: ["main", "'story'"], + mainFiles: ["'noMainFileHere'", "iGuess"], + modules: ["one", "'two'"], + unsafeCache: false, + plugins: ["somePlugin", "'stringVal'"], + symlinks: true + }, + "init" +); + +defineTest( + __dirname, + "resolve", + "resolve-1", + { + alias: { + inject: "{{#isdf_eq buildasda 'staasdndalone'}}", + hello: "'worlasdd'", + inject_1: "{{/asd}}", + world: "asdc" + }, + aliasFields: ["'as'"], + descriptionFiles: ["'d'", "e", "f"], + enforceExtension: true, + extensions: ["ok", "'ho'"], + mainFields: ["ok", "'story'"], + mainFiles: ["'noMainFileHere'", "niGuess"], + plugins: ["somePlugin", "'stringVal'"], + symlinks: false + }, + "add" +); diff --git a/lib/init/transformations/resolveLoader/__snapshots__/resolveLoader.test.js.snap b/lib/init/transformations/resolveLoader/__snapshots__/resolveLoader.test.js.snap new file mode 100644 index 00000000000..f78b86c4da5 --- /dev/null +++ b/lib/init/transformations/resolveLoader/__snapshots__/resolveLoader.test.js.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`resolveLoader transforms correctly using "resolveLoader-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + resolveLoader: { + modules: ['ok', mode_nodules], + mainFields: [no, 'main'], + moduleExtensions: ['-kn', ok] + } +} +" +`; + +exports[`resolveLoader transforms correctly using "resolveLoader-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + resolveLoader: { + moduleExtensions: ['-loader', '-kn', ok] + } +} +" +`; diff --git a/lib/creator/transformations/watch/__testfixtures__/watch-0.input.js b/lib/init/transformations/resolveLoader/__testfixtures__/resolveLoader-0.input.js similarity index 100% rename from lib/creator/transformations/watch/__testfixtures__/watch-0.input.js rename to lib/init/transformations/resolveLoader/__testfixtures__/resolveLoader-0.input.js diff --git a/lib/init/transformations/resolveLoader/__testfixtures__/resolveLoader-1.input.js b/lib/init/transformations/resolveLoader/__testfixtures__/resolveLoader-1.input.js new file mode 100644 index 00000000000..78c751511b3 --- /dev/null +++ b/lib/init/transformations/resolveLoader/__testfixtures__/resolveLoader-1.input.js @@ -0,0 +1,9 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + resolveLoader: { + moduleExtensions: [ '-loader' ] + } +} diff --git a/lib/init/transformations/resolveLoader/resolveLoader.js b/lib/init/transformations/resolveLoader/resolveLoader.js new file mode 100644 index 00000000000..5871672c837 --- /dev/null +++ b/lib/init/transformations/resolveLoader/resolveLoader.js @@ -0,0 +1,85 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for resolveLoader. Finds the resolveLoader property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function resolveLoaderTransform( + j, + ast, + webpackProperties, + action +) { + function createResolveLoaderProperty(p) { + if (typeof webpackProperties === "string") { + return utils.pushCreateProperty(j, p, "resolveLoader", webpackProperties); + } + if (Array.isArray(webpackProperties)) { + const externalArray = utils.createArrayWithChildren( + j, + "resolveLoader", + webpackProperties, + true + ); + return p.value.properties.push(externalArray); + } else { + utils.pushCreateProperty(j, p, "resolveLoader", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader"); + } + } + function editResolveLoaderProperty(p) { + return utils.pushObjectKeys(j, p, webpackProperties, "resolveLoader", true); + } + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createResolveLoaderProperty)); + } else if (action === "add") { + const resolveLoaderNode = utils.findRootNodesByName( + j, + ast, + "resolveLoader" + ); + if ( + resolveLoaderNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, editResolveLoaderProperty)); + } else if (resolveLoaderNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "resolveLoader" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return resolveLoaderTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/resolveLoader/resolveLoader.test.js b/lib/init/transformations/resolveLoader/resolveLoader.test.js new file mode 100644 index 00000000000..fc0192425eb --- /dev/null +++ b/lib/init/transformations/resolveLoader/resolveLoader.test.js @@ -0,0 +1,27 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "resolveLoader", + "resolveLoader-0", + { + modules: ["'ok'", "mode_nodules"], + mainFields: ["no", "'main'"], + moduleExtensions: ["'-kn'", "ok"] + }, + "init" +); + +defineTest( + __dirname, + "resolveLoader", + "resolveLoader-1", + { + modules: ["'ok'", "mode_nodules"], + mainFields: ["no", "'main'"], + moduleExtensions: ["'-kn'", "ok"] + }, + "add" +); diff --git a/lib/creator/transformations/stats/__snapshots__/stats.test.js.snap b/lib/init/transformations/stats/__snapshots__/stats.test.js.snap similarity index 55% rename from lib/creator/transformations/stats/__snapshots__/stats.test.js.snap rename to lib/init/transformations/stats/__snapshots__/stats.test.js.snap index 7a927eaf5e9..e78fb4ecf5b 100644 --- a/lib/creator/transformations/stats/__snapshots__/stats.test.js.snap +++ b/lib/init/transformations/stats/__snapshots__/stats.test.js.snap @@ -55,3 +55,56 @@ exports[`stats transforms correctly using "stats-0" data 2`] = ` } " `; + +exports[`stats transforms correctly using "stats-0" data 3`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + stats: { + assets: true, + assetsSort: 'naw', + cached: true, + cachedAssets: true, + children: true, + chunks: true, + version: true, + warnings: false + } +} +" +`; + +exports[`stats transforms correctly using "stats-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + stats: { + assets: true, + assetsSort: 'naw', + cached: true, + cachedAssets: true, + children: true, + chunks: true, + version: true, + warnings: false + } +} +" +`; + +exports[`stats transforms correctly using "stats-1" data 2`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + stats: 'errors-only' +} +" +`; diff --git a/lib/creator/transformations/watch/__testfixtures__/watch-1.input.js b/lib/init/transformations/stats/__testfixtures__/stats-0.input.js similarity index 100% rename from lib/creator/transformations/watch/__testfixtures__/watch-1.input.js rename to lib/init/transformations/stats/__testfixtures__/stats-0.input.js diff --git a/lib/init/transformations/stats/__testfixtures__/stats-1.input.js b/lib/init/transformations/stats/__testfixtures__/stats-1.input.js new file mode 100644 index 00000000000..c79e007fb4d --- /dev/null +++ b/lib/init/transformations/stats/__testfixtures__/stats-1.input.js @@ -0,0 +1,14 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + stats: { + assets: false, + assetsSort: "'goald'", + cached: true, + cachedAssets: true, + children: false, + chunks: true, + } +} diff --git a/lib/init/transformations/stats/stats.js b/lib/init/transformations/stats/stats.js new file mode 100644 index 00000000000..a3acbde940b --- /dev/null +++ b/lib/init/transformations/stats/stats.js @@ -0,0 +1,84 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for stats. Finds the stats property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function statsTransform(j, ast, webpackProperties, action) { + function createStatsProperty(p) { + utils.pushCreateProperty(j, p, "stats", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "stats"); + } + if (webpackProperties) { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createStatsProperty)); + } else if (action === "init" && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "stats", + webpackProperties + ) + ); + } else if (action === "add") { + const statsNode = utils.findRootNodesByName(j, ast, "stats"); + if (statsNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "stats" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if (statsNode.size() !== 0 && webpackProperties.length) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "stats" + ) + .forEach(p => { + j(p).replaceWith( + utils.createIdentifierOrLiteral(j, webpackProperties) + ); + }); + } else { + return statsTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/stats/stats.test.js b/lib/init/transformations/stats/stats.test.js new file mode 100644 index 00000000000..7969230b58e --- /dev/null +++ b/lib/init/transformations/stats/stats.test.js @@ -0,0 +1,76 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "stats", + "stats-0", + { + assets: true, + assetsSort: "'field'", + cached: true, + cachedAssets: true, + children: true, + chunks: true, + chunkModules: true, + chunkOrigins: true, + chunksSort: "'field'", + context: "'../src/'", + colors: true, + depth: false, + entrypoints: "customVal", + errors: true, + errorDetails: true, + exclude: [], + hash: true, + maxModules: 15, + modules: true, + modulesSort: "'field'", + performance: true, + providedExports: false, + publicPath: true, + reasons: true, + source: true, + timings: true, + usedExports: false, + version: true, + warnings: true + }, + "init" +); +defineTest(__dirname, "stats", "stats-0", "'errors-only'", "init"); + +defineTest( + __dirname, + "stats", + "stats-0", + { + assets: true, + assetsSort: "'naw'", + cached: true, + cachedAssets: true, + children: true, + chunks: true, + version: true, + warnings: false + }, + "add" +); +defineTest( + __dirname, + "stats", + "stats-1", + { + assets: true, + assetsSort: "'naw'", + cached: true, + cachedAssets: true, + children: true, + chunks: true, + version: true, + warnings: false + }, + "add" +); +defineTest(__dirname, "stats", "stats-1", "'errors-only'", "add"); diff --git a/lib/init/transformations/target/__snapshots__/target.test.js.snap b/lib/init/transformations/target/__snapshots__/target.test.js.snap new file mode 100644 index 00000000000..baf9b79f9da --- /dev/null +++ b/lib/init/transformations/target/__snapshots__/target.test.js.snap @@ -0,0 +1,65 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`target transforms correctly using "target-0" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + target: 'async-node' +} +" +`; + +exports[`target transforms correctly using "target-0" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + target: 'async-node' +} +" +`; + +exports[`target transforms correctly using "target-1" data 1`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + target: node +} +" +`; + +exports[`target transforms correctly using "target-1" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + target: 'node' +} +" +`; + +exports[`target transforms correctly using "target-2" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js', + target: 'node' + }, + target: 'node' +} +" +`; diff --git a/lib/creator/transformations/watch/__testfixtures__/watch-2.input.js b/lib/init/transformations/target/__testfixtures__/target-0.input.js similarity index 100% rename from lib/creator/transformations/watch/__testfixtures__/watch-2.input.js rename to lib/init/transformations/target/__testfixtures__/target-0.input.js diff --git a/lib/init/transformations/target/__testfixtures__/target-1.input.js b/lib/init/transformations/target/__testfixtures__/target-1.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/target/__testfixtures__/target-1.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +} diff --git a/lib/init/transformations/target/__testfixtures__/target-2.input.js b/lib/init/transformations/target/__testfixtures__/target-2.input.js new file mode 100644 index 00000000000..7660765ded4 --- /dev/null +++ b/lib/init/transformations/target/__testfixtures__/target-2.input.js @@ -0,0 +1,7 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + target: 'somethign' +} diff --git a/lib/init/transformations/target/target.js b/lib/init/transformations/target/target.js new file mode 100644 index 00000000000..c9c9887d28f --- /dev/null +++ b/lib/init/transformations/target/target.js @@ -0,0 +1,55 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for target. Finds the target property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function targetTransform(j, ast, webpackProperties, action) { + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "target", + webpackProperties + ) + ); + } else if (action === "add") { + const targetNode = utils.findRootNodesByName(j, ast, "target"); + if (targetNode.size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "target", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return targetTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/target/target.test.js b/lib/init/transformations/target/target.test.js new file mode 100644 index 00000000000..684811faa53 --- /dev/null +++ b/lib/init/transformations/target/target.test.js @@ -0,0 +1,10 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "target", "target-0", "'async-node'", "init"); +defineTest(__dirname, "target", "target-1", "node", "init"); + +defineTest(__dirname, "target", "target-0", "'async-node'", "add"); +defineTest(__dirname, "target", "target-1", "'node'", "add"); +defineTest(__dirname, "target", "target-2", "'node'", "add"); diff --git a/lib/creator/transformations/top-scope/__snapshots__/top-scope.test.js.snap b/lib/init/transformations/top-scope/__snapshots__/top-scope.test.js.snap similarity index 53% rename from lib/creator/transformations/top-scope/__snapshots__/top-scope.test.js.snap rename to lib/init/transformations/top-scope/__snapshots__/top-scope.test.js.snap index c4b175ca0f0..aa91f1f0aac 100644 --- a/lib/creator/transformations/top-scope/__snapshots__/top-scope.test.js.snap +++ b/lib/init/transformations/top-scope/__snapshots__/top-scope.test.js.snap @@ -4,3 +4,10 @@ exports[`top-scope transforms correctly using "top-scope-0" data 1`] = ` "var test = 'me'; module.exports = {}" `; + +exports[`top-scope transforms correctly using "top-scope-1" data 1`] = ` +"const webpack = require(\\"webpack\\"); + +module.exports = {} +" +`; diff --git a/lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js b/lib/init/transformations/top-scope/__testfixtures__/top-scope-0.input.js similarity index 100% rename from lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js rename to lib/init/transformations/top-scope/__testfixtures__/top-scope-0.input.js diff --git a/lib/init/transformations/top-scope/__testfixtures__/top-scope-1.input.js b/lib/init/transformations/top-scope/__testfixtures__/top-scope-1.input.js new file mode 100644 index 00000000000..66b65233d07 --- /dev/null +++ b/lib/init/transformations/top-scope/__testfixtures__/top-scope-1.input.js @@ -0,0 +1,3 @@ +const webpack = require("webpack"); + +module.exports = {} diff --git a/lib/init/transformations/top-scope/top-scope.js b/lib/init/transformations/top-scope/top-scope.js new file mode 100644 index 00000000000..b897484157f --- /dev/null +++ b/lib/init/transformations/top-scope/top-scope.js @@ -0,0 +1,29 @@ +/** + * + * Get an property named topScope from yeoman and inject it to the top scope of + * the config, outside module.exports + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function(j, ast, webpackProperties, action) { + function createTopScopeProperty(p) { + webpackProperties.forEach(n => { + if ( + !p.value.body[0].declarations || + n.indexOf(p.value.body[0].declarations[0].id.name) <= 0 + ) { + p.value.body.splice(-1, 0, n); + } + }); + } + if (webpackProperties) { + return ast.find(j.Program).filter(p => createTopScopeProperty(p)); + } else { + return ast; + } +}; diff --git a/lib/init/transformations/top-scope/top-scope.test.js b/lib/init/transformations/top-scope/top-scope.test.js new file mode 100644 index 00000000000..6522ee5e4c3 --- /dev/null +++ b/lib/init/transformations/top-scope/top-scope.test.js @@ -0,0 +1,12 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "top-scope", "top-scope-0", ["var test = 'me';"], "init"); +defineTest( + __dirname, + "top-scope", + "top-scope-1", + ["const webpack = require('webpack');"], + "add" +); diff --git a/lib/creator/transformations/watch/__snapshots__/watch.test.js.snap b/lib/init/transformations/watch/__snapshots__/watch.test.js.snap similarity index 56% rename from lib/creator/transformations/watch/__snapshots__/watch.test.js.snap rename to lib/init/transformations/watch/__snapshots__/watch.test.js.snap index 44809c8b93a..e52cdb787d3 100644 --- a/lib/creator/transformations/watch/__snapshots__/watch.test.js.snap +++ b/lib/init/transformations/watch/__snapshots__/watch.test.js.snap @@ -26,6 +26,32 @@ exports[`watch transforms correctly using "watch-0" data 2`] = ` " `; +exports[`watch transforms correctly using "watch-0" data 3`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + watch: true +} +" +`; + +exports[`watch transforms correctly using "watch-0" data 4`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + watch: false +} +" +`; + exports[`watch transforms correctly using "watch-1" data 1`] = ` "module.exports = { entry: 'index.js', @@ -51,3 +77,17 @@ exports[`watch transforms correctly using "watch-1" data 2`] = ` } " `; + +exports[`watch transforms correctly using "watch-4" data 1`] = ` +"module.exports = { + watch: false +} +" +`; + +exports[`watch transforms correctly using "watch-4" data 2`] = ` +"module.exports = { + watch: somehin +} +" +`; diff --git a/lib/creator/transformations/watch/__snapshots__/watchOptions.test.js.snap b/lib/init/transformations/watch/__snapshots__/watchOptions.test.js.snap similarity index 52% rename from lib/creator/transformations/watch/__snapshots__/watchOptions.test.js.snap rename to lib/init/transformations/watch/__snapshots__/watchOptions.test.js.snap index 1fb3d694169..0c6485ada36 100644 --- a/lib/creator/transformations/watch/__snapshots__/watchOptions.test.js.snap +++ b/lib/init/transformations/watch/__snapshots__/watchOptions.test.js.snap @@ -17,6 +17,23 @@ exports[`watchOptions transforms correctly using "watch-0" data 1`] = ` " `; +exports[`watchOptions transforms correctly using "watch-0" data 2`] = ` +"module.exports = { + entry: 'index.js', + + output: { + filename: 'bundle.js' + }, + + watchOptions: { + aggregateTimeout: 300, + poll: 1000, + ignored: /node_modules/ + } +} +" +`; + exports[`watchOptions transforms correctly using "watch-1" data 1`] = ` "module.exports = { entry: 'index.js', @@ -50,3 +67,35 @@ exports[`watchOptions transforms correctly using "watch-2" data 1`] = ` } " `; + +exports[`watchOptions transforms correctly using "watch-3" data 1`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + watchOptions: { + aggregateTimeout: 100, + poll: 69, + ignored: /node_modules/ + }, + watch: 'me' +} +" +`; + +exports[`watchOptions transforms correctly using "watch-3" data 2`] = ` +"module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + watchOptions: { + aggregateTimeout: 100, + poll: 90, + ignored: abc + }, + watch: 'me' +} +" +`; diff --git a/lib/init/transformations/watch/__testfixtures__/watch-0.input.js b/lib/init/transformations/watch/__testfixtures__/watch-0.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/watch/__testfixtures__/watch-0.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +} diff --git a/lib/init/transformations/watch/__testfixtures__/watch-1.input.js b/lib/init/transformations/watch/__testfixtures__/watch-1.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/watch/__testfixtures__/watch-1.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +} diff --git a/lib/init/transformations/watch/__testfixtures__/watch-2.input.js b/lib/init/transformations/watch/__testfixtures__/watch-2.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/watch/__testfixtures__/watch-2.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +} diff --git a/lib/init/transformations/watch/__testfixtures__/watch-3.input.js b/lib/init/transformations/watch/__testfixtures__/watch-3.input.js new file mode 100644 index 00000000000..25500c14aac --- /dev/null +++ b/lib/init/transformations/watch/__testfixtures__/watch-3.input.js @@ -0,0 +1,12 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + }, + watchOptions: { + aggregateTimeout: 100, + poll: 90, + ignored: "/ok/" + }, + watch: 'me' +} diff --git a/lib/init/transformations/watch/__testfixtures__/watch-4.input.js b/lib/init/transformations/watch/__testfixtures__/watch-4.input.js new file mode 100644 index 00000000000..67ef2d9266b --- /dev/null +++ b/lib/init/transformations/watch/__testfixtures__/watch-4.input.js @@ -0,0 +1,3 @@ +module.exports = { + watch: 'someone' +} diff --git a/lib/init/transformations/watch/watch.js b/lib/init/transformations/watch/watch.js new file mode 100644 index 00000000000..57c0c1450e4 --- /dev/null +++ b/lib/init/transformations/watch/watch.js @@ -0,0 +1,85 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for watch. Finds the watch property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function watchTransform(j, ast, webpackProperties, action) { + function createWatchProperty(p) { + utils.pushCreateProperty(j, p, "watch", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "watch"); + } + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createWatchProperty)); + } else if (action === "init" && typeof webpackProperties === "boolean") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "watch", + webpackProperties + ) + ); + } else if (action === "add") { + const watchNode = utils.findRootNodesByName(j, ast, "watch"); + if (watchNode.size() !== 0 && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "watch" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + watchNode.size() !== 0 && + (webpackProperties.length || typeof webpackProperties === "boolean") + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "watch", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return watchTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/watch/watch.test.js b/lib/init/transformations/watch/watch.test.js new file mode 100644 index 00000000000..de31910e8bc --- /dev/null +++ b/lib/init/transformations/watch/watch.test.js @@ -0,0 +1,13 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest(__dirname, "watch", "watch-0", true, "init"); +defineTest(__dirname, "watch", "watch-0", false, "init"); +defineTest(__dirname, "watch", "watch-1", true, "init"); +defineTest(__dirname, "watch", "watch-1", false, "init"); + +defineTest(__dirname, "watch", "watch-0", true, "add"); +defineTest(__dirname, "watch", "watch-0", false, "add"); +defineTest(__dirname, "watch", "watch-4", false, "add"); +defineTest(__dirname, "watch", "watch-4", "somehin", "add"); diff --git a/lib/init/transformations/watch/watchOptions.js b/lib/init/transformations/watch/watchOptions.js new file mode 100644 index 00000000000..ef8d807e3e6 --- /dev/null +++ b/lib/init/transformations/watch/watchOptions.js @@ -0,0 +1,100 @@ +"use strict"; + +const utils = require("../../../utils/ast-utils"); + +/** + * + * Transform for watchOptions. Finds the watchOptions property from yeoman and creates a + * property based on what the user has given us. + * + * @param j — jscodeshift API + * @param ast - jscodeshift API + * @param {any} webpackProperties - transformation object to scaffold + * @param {String} action - action that indicates what to be done to the AST + * @returns ast - jscodeshift API + */ + +module.exports = function watchOptionsTransform( + j, + ast, + webpackProperties, + action +) { + function createWatchOptionsProperty(p) { + utils.pushCreateProperty(j, p, "watchOptions", j.objectExpression([])); + return utils.pushObjectKeys(j, p, webpackProperties, "watchOptions"); + } + if (webpackProperties || typeof webpackProperties === "boolean") { + if (action === "init" && typeof webpackProperties === "object") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createWatchOptionsProperty)); + } else if ( + action === "init" && + (webpackProperties.length || typeof webpackProperties === "boolean") + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "watchOptions", + webpackProperties + ) + ); + } else if (action === "add") { + const watchOptionsNode = utils.findRootNodesByName( + j, + ast, + "watchOptions" + ); + if ( + watchOptionsNode.size() !== 0 && + typeof webpackProperties === "object" + ) { + return ast + .find(j.ObjectExpression) + .filter( + p => + utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === + "watchOptions" + ) + .filter(p => { + Object.keys(webpackProperties).forEach(prop => { + utils.checkIfExistsAndAddValue( + j, + p, + prop, + utils.createIdentifierOrLiteral(j, webpackProperties[prop]) + ); + }); + return ast; + }); + } else if ( + watchOptionsNode.size() !== 0 && + (typeof webpackProperties === "boolean" || webpackProperties.length > 0) + ) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.checkIfExistsAndAddValue( + j, + p, + "watchOptions", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) + ); + } else { + return watchOptionsTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } + } else { + return ast; + } +}; diff --git a/lib/init/transformations/watch/watchOptions.test.js b/lib/init/transformations/watch/watchOptions.test.js new file mode 100644 index 00000000000..d55cb68928f --- /dev/null +++ b/lib/init/transformations/watch/watchOptions.test.js @@ -0,0 +1,71 @@ +"use strict"; + +const defineTest = require("../../../utils/defineTest"); + +defineTest( + __dirname, + "watchOptions", + "watch-0", + { + aggregateTimeout: 300, + poll: 1000, + ignored: "/node_modules/" + }, + "init" +); + +defineTest( + __dirname, + "watchOptions", + "watch-1", + { + aggregateTimeout: 300, + poll: 1000, + ignored: "/node_modules/" + }, + "init" +); + +defineTest( + __dirname, + "watchOptions", + "watch-2", + { + aggregateTimeout: 300, + poll: 1000, + ignored: "/node_modules/" + }, + "init" +); + +defineTest( + __dirname, + "watchOptions", + "watch-0", + { + aggregateTimeout: 300, + poll: 1000, + ignored: "/node_modules/" + }, + "add" +); +defineTest( + __dirname, + "watchOptions", + "watch-3", + { + poll: 69, + ignored: "/node_modules/" + }, + "add" +); + +defineTest( + __dirname, + "watchOptions", + "watch-3", + { + ignored: "abc" + }, + "add" +); diff --git a/lib/migrate.js b/lib/migrate.js deleted file mode 100644 index eda61c3ab62..00000000000 --- a/lib/migrate.js +++ /dev/null @@ -1,114 +0,0 @@ -"use strict"; - -const fs = require("fs"); -const chalk = require("chalk"); -const diff = require("diff"); -const inquirer = require("inquirer"); -const PLazy = require("p-lazy"); -const Listr = require("listr"); -const validateSchema = require("./utils/validateSchema.js"); -const webpackOptionsSchema = require("./utils/webpackOptionsSchema"); -const WebpackOptionsValidationError = require("./utils/WebpackOptionsValidationError"); - -module.exports = function transformFile( - currentConfigPath, - outputConfigPath, - options -) { - const recastOptions = Object.assign( - { - quote: "single" - }, - options - ); - const tasks = new Listr([ - { - title: "Reading webpack config", - task: ctx => - new PLazy((resolve, reject) => { - fs.readFile(currentConfigPath, "utf8", (err, content) => { - if (err) { - reject(err); - } - try { - const jscodeshift = require("jscodeshift"); - ctx.source = content; - ctx.ast = jscodeshift(content); - resolve(); - } catch (err) { - reject("Error generating AST", err); - } - }); - }) - }, - { - title: "Migrating config from v1 to v2", - task: ctx => { - const transformations = require("./transformations").transformations; - return new Listr( - Object.keys(transformations).map(key => { - const transform = transformations[key]; - return { - title: key, - task: () => transform(ctx.ast, ctx.source) - }; - }) - ); - } - } - ]); - - tasks - .run() - .then(ctx => { - const result = ctx.ast.toSource(recastOptions); - const diffOutput = diff.diffLines(ctx.source, result); - diffOutput.forEach(diffLine => { - if (diffLine.added) { - process.stdout.write(chalk.green(`+ ${diffLine.value}`)); - } else if (diffLine.removed) { - process.stdout.write(chalk.red(`- ${diffLine.value}`)); - } - }); - inquirer - .prompt([ - { - type: "confirm", - name: "confirmMigration", - message: "Are you sure these changes are fine?", - default: "Y" - } - ]) - .then(answers => { - if (answers["confirmMigration"]) { - fs.writeFile(outputConfigPath, result, "utf8", err => { - const webpackOptionsValidationErrors = validateSchema( - webpackOptionsSchema, - require(outputConfigPath) - ); - if (err) { - throw err; - } else if (webpackOptionsValidationErrors.length) { - const validationMsg = new WebpackOptionsValidationError( - webpackOptionsValidationErrors - ); - throw validationMsg.message; - } else { - console.log( - chalk.green( - `\n ✔︎ New webpack v2 config file is at ${outputConfigPath}` - ) - ); - } - }); - } else { - console.log(chalk.red("✖ Migration aborted")); - } - }); - }) - .catch(err => { - console.log(chalk.red("✖ ︎Migration aborted due to some errors")); - console.error(err); - process.exitCode = 1; - }); -}; diff --git a/lib/transformations/__snapshots__/index.test.js.snap b/lib/migrate/__snapshots__/index.test.js.snap similarity index 67% rename from lib/transformations/__snapshots__/index.test.js.snap rename to lib/migrate/__snapshots__/index.test.js.snap index fdf9d438c7b..f8ee85b75a0 100644 --- a/lib/transformations/__snapshots__/index.test.js.snap +++ b/lib/migrate/__snapshots__/index.test.js.snap @@ -1,5 +1,63 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[` +module.exports = { + devtool: 'eval', + entry: [ + './src/index' + ], + output: { + path: path.join(__dirname, 'dist'), + filename: 'index.js' + }, + module: { + loaders: [{ + test: /.js$/, + loaders: ['babel'], + include: path.join(__dirname, 'src') + }] + }, + resolve: { + root: path.resolve('/src'), + modules: ['node_modules'] + }, + plugins: [ + new webpack.optimize.UglifyJsPlugin(), + new webpack.optimize.OccurrenceOrderPlugin() + ], + debug: true +}; + 1`] = ` +" +module.exports = { + devtool: 'eval', + entry: [ + './src/index' + ], + output: { + path: path.join(__dirname, 'dist'), + filename: 'index.js' + }, + module: { + loaders: [{ + test: /.js$/, + loaders: ['babel'], + include: path.join(__dirname, 'src') + }] + }, + resolve: { + root: path.resolve('/src'), + modules: ['node_modules'] + }, + plugins: [ + new webpack.optimize.UglifyJsPlugin(), + new webpack.optimize.OccurrenceOrderPlugin() + ], + debug: true +}; +" +`; + exports[`transform should respect recast options 1`] = ` " module.exports = { diff --git a/lib/transformations/__testfixtures__/failing.js b/lib/migrate/__testfixtures__/failing.js similarity index 100% rename from lib/transformations/__testfixtures__/failing.js rename to lib/migrate/__testfixtures__/failing.js diff --git a/lib/transformations/bannerPlugin/__snapshots__/bannerPlugin.test.js.snap b/lib/migrate/bannerPlugin/__snapshots__/bannerPlugin.test.js.snap similarity index 100% rename from lib/transformations/bannerPlugin/__snapshots__/bannerPlugin.test.js.snap rename to lib/migrate/bannerPlugin/__snapshots__/bannerPlugin.test.js.snap diff --git a/lib/transformations/bannerPlugin/__testfixtures__/.editorconfig b/lib/migrate/bannerPlugin/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/bannerPlugin/__testfixtures__/.editorconfig rename to lib/migrate/bannerPlugin/__testfixtures__/.editorconfig diff --git a/lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js b/lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js similarity index 100% rename from lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js rename to lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js diff --git a/lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js b/lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js similarity index 100% rename from lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js rename to lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js diff --git a/lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js b/lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js similarity index 100% rename from lib/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js rename to lib/migrate/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js diff --git a/lib/transformations/bannerPlugin/bannerPlugin.js b/lib/migrate/bannerPlugin/bannerPlugin.js similarity index 94% rename from lib/transformations/bannerPlugin/bannerPlugin.js rename to lib/migrate/bannerPlugin/bannerPlugin.js index 0a13a818ac1..7614703a514 100644 --- a/lib/transformations/bannerPlugin/bannerPlugin.js +++ b/lib/migrate/bannerPlugin/bannerPlugin.js @@ -2,7 +2,7 @@ // eslint-disable-next-line node/no-unsupported-features import type { Ijscodeshit, INewExpression, IPath } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); module.exports = function(j: Ijscodeshit, ast: IPath<*>) { return utils diff --git a/lib/transformations/bannerPlugin/bannerPlugin.test.js b/lib/migrate/bannerPlugin/bannerPlugin.test.js similarity index 77% rename from lib/transformations/bannerPlugin/bannerPlugin.test.js rename to lib/migrate/bannerPlugin/bannerPlugin.test.js index 004d08b6635..0a94c84fbf7 100644 --- a/lib/transformations/bannerPlugin/bannerPlugin.test.js +++ b/lib/migrate/bannerPlugin/bannerPlugin.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "bannerPlugin", "bannerPlugin-0"); defineTest(__dirname, "bannerPlugin", "bannerPlugin-1"); diff --git a/lib/transformations/extractTextPlugin/__snapshots__/extractTextPlugin.test.js.snap b/lib/migrate/extractTextPlugin/__snapshots__/extractTextPlugin.test.js.snap similarity index 100% rename from lib/transformations/extractTextPlugin/__snapshots__/extractTextPlugin.test.js.snap rename to lib/migrate/extractTextPlugin/__snapshots__/extractTextPlugin.test.js.snap diff --git a/lib/transformations/extractTextPlugin/__testfixtures__/.editorconfig b/lib/migrate/extractTextPlugin/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/extractTextPlugin/__testfixtures__/.editorconfig rename to lib/migrate/extractTextPlugin/__testfixtures__/.editorconfig diff --git a/lib/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js b/lib/migrate/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js similarity index 100% rename from lib/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js rename to lib/migrate/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js diff --git a/lib/transformations/extractTextPlugin/extractTextPlugin.js b/lib/migrate/extractTextPlugin/extractTextPlugin.js similarity index 96% rename from lib/transformations/extractTextPlugin/extractTextPlugin.js rename to lib/migrate/extractTextPlugin/extractTextPlugin.js index 622d02e4d25..db6e073f064 100644 --- a/lib/transformations/extractTextPlugin/extractTextPlugin.js +++ b/lib/migrate/extractTextPlugin/extractTextPlugin.js @@ -9,7 +9,7 @@ import type { ILiteral } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); function findInvocation( j: Ijscodeshit, diff --git a/lib/transformations/extractTextPlugin/extractTextPlugin.test.js b/lib/migrate/extractTextPlugin/extractTextPlugin.test.js similarity index 52% rename from lib/transformations/extractTextPlugin/extractTextPlugin.test.js rename to lib/migrate/extractTextPlugin/extractTextPlugin.test.js index 199067becf3..f5a141d5562 100644 --- a/lib/transformations/extractTextPlugin/extractTextPlugin.test.js +++ b/lib/migrate/extractTextPlugin/extractTextPlugin.test.js @@ -1,5 +1,5 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "extractTextPlugin"); diff --git a/lib/transformations/index.js b/lib/migrate/index.js similarity index 98% rename from lib/transformations/index.js rename to lib/migrate/index.js index dd202a62f92..e3ae0e5da97 100644 --- a/lib/transformations/index.js +++ b/lib/migrate/index.js @@ -38,7 +38,7 @@ function transformSingleAST( transformFunction: Function ): IPath<*> { return new PLazy((resolve, reject) => { - setTimeout(() => { + setTimeout(_ => { try { resolve(transformFunction(jscodeshift, ast, source)); } catch (err) { @@ -74,7 +74,7 @@ function transform( transforms = transforms || Object.keys(transformations).map(k => transformations[k]); return pEachSeries(transforms, f => f(ast, source)) - .then(() => { + .then(_ => { return ast.toSource(recastOptions); }) .catch(err => { diff --git a/lib/transformations/index.test.js b/lib/migrate/index.test.js similarity index 96% rename from lib/transformations/index.test.js rename to lib/migrate/index.test.js index d1a47393a81..0c2237460d6 100644 --- a/lib/transformations/index.test.js +++ b/lib/migrate/index.test.js @@ -35,7 +35,7 @@ module.exports = { describe("transform", () => { it("should not transform if no transformations defined", done => { transform(input, []).then(output => { - expect(output).toEqual(input); + expect(output).toMatchSnapshot(input); done(); }); }); diff --git a/lib/transformations/loaderOptionsPlugin/__snapshots__/loaderOptionsPlugin.test.js.snap b/lib/migrate/loaderOptionsPlugin/__snapshots__/loaderOptionsPlugin.test.js.snap similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__snapshots__/loaderOptionsPlugin.test.js.snap rename to lib/migrate/loaderOptionsPlugin/__snapshots__/loaderOptionsPlugin.test.js.snap diff --git a/lib/transformations/loaderOptionsPlugin/__testfixtures__/.editorconfig b/lib/migrate/loaderOptionsPlugin/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__testfixtures__/.editorconfig rename to lib/migrate/loaderOptionsPlugin/__testfixtures__/.editorconfig diff --git a/lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js b/lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js rename to lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js diff --git a/lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js b/lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js rename to lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js diff --git a/lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js b/lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js rename to lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js diff --git a/lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js b/lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js similarity index 100% rename from lib/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js rename to lib/migrate/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js diff --git a/lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js b/lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.js similarity index 83% rename from lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js rename to lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.js index f661c352bb3..196ed6e549a 100644 --- a/lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js +++ b/lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.js @@ -3,10 +3,10 @@ import type { Ijscodeshit, IPath, IArrayExpression } from "../../types"; const isEmpty = require("lodash/isEmpty"); -const findPluginsByName = require("../utils").findPluginsByName; -const createOrUpdatePluginByName = require("../utils") +const findPluginsByName = require("../../utils/ast-utils").findPluginsByName; +const createOrUpdatePluginByName = require("../../utils/ast-utils") .createOrUpdatePluginByName; -const safeTraverse = require("../utils").safeTraverse; +const safeTraverse = require("../../utils/ast-utils").safeTraverse; module.exports = function(j: Ijscodeshit, ast: IPath<*>) { const loaderOptions: Object = {}; diff --git a/lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js b/lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.test.js similarity index 84% rename from lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js rename to lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.test.js index bb3c78de07c..13279802d02 100644 --- a/lib/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js +++ b/lib/migrate/loaderOptionsPlugin/loaderOptionsPlugin.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-0"); defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-1"); diff --git a/lib/transformations/loaders/__snapshots__/loaders.test.js.snap b/lib/migrate/loaders/__snapshots__/loaders.test.js.snap similarity index 100% rename from lib/transformations/loaders/__snapshots__/loaders.test.js.snap rename to lib/migrate/loaders/__snapshots__/loaders.test.js.snap diff --git a/lib/transformations/loaders/__testfixtures__/.editorconfig b/lib/migrate/loaders/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/loaders/__testfixtures__/.editorconfig rename to lib/migrate/loaders/__testfixtures__/.editorconfig diff --git a/lib/transformations/loaders/__testfixtures__/loaders-0.input.js b/lib/migrate/loaders/__testfixtures__/loaders-0.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-0.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-0.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-1.input.js b/lib/migrate/loaders/__testfixtures__/loaders-1.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-1.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-1.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-2.input.js b/lib/migrate/loaders/__testfixtures__/loaders-2.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-2.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-2.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-3.input.js b/lib/migrate/loaders/__testfixtures__/loaders-3.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-3.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-3.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-4.input.js b/lib/migrate/loaders/__testfixtures__/loaders-4.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-4.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-4.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-5.input.js b/lib/migrate/loaders/__testfixtures__/loaders-5.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-5.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-5.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-6.input.js b/lib/migrate/loaders/__testfixtures__/loaders-6.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-6.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-6.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-7.input.js b/lib/migrate/loaders/__testfixtures__/loaders-7.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-7.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-7.input.js diff --git a/lib/transformations/loaders/__testfixtures__/loaders-8.input.js b/lib/migrate/loaders/__testfixtures__/loaders-8.input.js similarity index 100% rename from lib/transformations/loaders/__testfixtures__/loaders-8.input.js rename to lib/migrate/loaders/__testfixtures__/loaders-8.input.js diff --git a/lib/transformations/loaders/loaders.js b/lib/migrate/loaders/loaders.js similarity index 94% rename from lib/transformations/loaders/loaders.js rename to lib/migrate/loaders/loaders.js index 48509dcc653..0134fc985fc 100644 --- a/lib/transformations/loaders/loaders.js +++ b/lib/migrate/loaders/loaders.js @@ -10,47 +10,48 @@ import type { IIdentifier } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { /** * Creates an Array expression out of loaders string - * - * - * For syntaxes like - * - * { - * loader: 'style!css` - * } - * - * or - * - * { - * loaders: ['style', 'css'] - * } - * - * or - * - * loaders: [{ - * loader: 'style' - * }, - * { - * loader: 'css', - * }] - * - * it should generate - * - * { - * use: [{ - * loader: 'style' - * }, - * { - * loader: 'css' - * }] - * } + * + * + * For syntaxes like + * + * { + * loader: 'style!css` + * } + * + * or + * + * { + * loaders: ['style', 'css'] + * } + * + * or + * + * loaders: [{ + * loader: 'style' + * }, + * { + * loader: 'css', + * }] + * + * it should generate + * + * { + * use: [{ + * loader: 'style' + * }, + * { + * loader: 'css' + * }] + * } * @param {Node} path Must be an ObjectExpression * @return {Node} [] */ + const createArrayExpressionFromArray = function( path: IPath ): IPath<*> { @@ -193,6 +194,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * @param {[type]} IPath [description] * @return {[type]} [description] */ + const prepostLoaders = (): IPath => ast .find(j.ObjectExpression) @@ -205,6 +207,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * @param {[type]} IPath [description] * @return {[type]} [description] */ + const loadersToRules = (): IPath => ast .find(j.Identifier) @@ -216,6 +219,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * * @returns {Node} [] */ + const loadersToArrayExpression = (): IPath => ast .find(j.ObjectExpression) @@ -254,6 +258,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * @type {[type]} * @returns {Node} [] */ + const loaderWithQueryParam = (): IPath => ast .find(j.ObjectExpression) @@ -276,6 +281,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * } * @returns {Node} [] */ + const loaderWithQueryProp = (): IPath => ast .find(j.Identifier) @@ -287,6 +293,7 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { * i.e. for `babel` it should generate `babel-loader` * @returns {Node} [] */ + const addLoaderSuffix = (): IPath => ast.find(j.ObjectExpression).forEach(path => { path.value.properties.forEach(prop => { diff --git a/lib/transformations/loaders/loaders.test.js b/lib/migrate/loaders/loaders.test.js similarity index 88% rename from lib/transformations/loaders/loaders.test.js rename to lib/migrate/loaders/loaders.test.js index 90d36acda2a..62512c594e6 100644 --- a/lib/transformations/loaders/loaders.test.js +++ b/lib/migrate/loaders/loaders.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "loaders", "loaders-0"); defineTest(__dirname, "loaders", "loaders-1"); diff --git a/lib/transformations/outputPath/__snapshots__/outputPath.test.js.snap b/lib/migrate/outputPath/__snapshots__/outputPath.test.js.snap similarity index 100% rename from lib/transformations/outputPath/__snapshots__/outputPath.test.js.snap rename to lib/migrate/outputPath/__snapshots__/outputPath.test.js.snap diff --git a/lib/transformations/outputPath/__testfixtures__/outputPath-0.input.js b/lib/migrate/outputPath/__testfixtures__/outputPath-0.input.js similarity index 100% rename from lib/transformations/outputPath/__testfixtures__/outputPath-0.input.js rename to lib/migrate/outputPath/__testfixtures__/outputPath-0.input.js diff --git a/lib/transformations/outputPath/__testfixtures__/outputPath-1.input.js b/lib/migrate/outputPath/__testfixtures__/outputPath-1.input.js similarity index 100% rename from lib/transformations/outputPath/__testfixtures__/outputPath-1.input.js rename to lib/migrate/outputPath/__testfixtures__/outputPath-1.input.js diff --git a/lib/transformations/outputPath/__testfixtures__/outputPath-2.input.js b/lib/migrate/outputPath/__testfixtures__/outputPath-2.input.js similarity index 100% rename from lib/transformations/outputPath/__testfixtures__/outputPath-2.input.js rename to lib/migrate/outputPath/__testfixtures__/outputPath-2.input.js diff --git a/lib/transformations/outputPath/outputPath.js b/lib/migrate/outputPath/outputPath.js similarity index 97% rename from lib/transformations/outputPath/outputPath.js rename to lib/migrate/outputPath/outputPath.js index 3cd5b1a928a..b5029fac3c9 100644 --- a/lib/transformations/outputPath/outputPath.js +++ b/lib/migrate/outputPath/outputPath.js @@ -2,7 +2,7 @@ // eslint-disable-next-line node/no-unsupported-features import type { Ijscodeshit, ICallExpression, IPath } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { const literalOutputPath = ast diff --git a/lib/transformations/outputPath/outputPath.test.js b/lib/migrate/outputPath/outputPath.test.js similarity index 76% rename from lib/transformations/outputPath/outputPath.test.js rename to lib/migrate/outputPath/outputPath.test.js index 1312905c074..0de06caf32d 100644 --- a/lib/transformations/outputPath/outputPath.test.js +++ b/lib/migrate/outputPath/outputPath.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "outputPath", "outputPath-0"); defineTest(__dirname, "outputPath", "outputPath-1"); diff --git a/lib/transformations/removeDeprecatedPlugins/__snapshots__/removeDeprecatedPlugins.test.js.snap b/lib/migrate/removeDeprecatedPlugins/__snapshots__/removeDeprecatedPlugins.test.js.snap similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__snapshots__/removeDeprecatedPlugins.test.js.snap rename to lib/migrate/removeDeprecatedPlugins/__snapshots__/removeDeprecatedPlugins.test.js.snap diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/.editorconfig b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/.editorconfig rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/.editorconfig diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js diff --git a/lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js b/lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js similarity index 100% rename from lib/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js rename to lib/migrate/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js diff --git a/lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js b/lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.js similarity index 97% rename from lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js rename to lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.js index 24b43447a12..a2375dd5934 100644 --- a/lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js +++ b/lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.js @@ -4,7 +4,7 @@ import type { Ijscodeshit, IPath } from "../../types"; const codeFrame = require("babel-code-frame"); const chalk = require("chalk"); -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); const example: string = `plugins: [ new webpack.optimize.OccurrenceOrderPlugin(), diff --git a/lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js b/lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js similarity index 88% rename from lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js rename to lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js index e029dff487d..c99f1f7acb0 100644 --- a/lib/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js +++ b/lib/migrate/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-0"); defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-1"); diff --git a/lib/transformations/removeJsonLoader/__snapshots__/removeJsonLoader.test.js.snap b/lib/migrate/removeJsonLoader/__snapshots__/removeJsonLoader.test.js.snap similarity index 100% rename from lib/transformations/removeJsonLoader/__snapshots__/removeJsonLoader.test.js.snap rename to lib/migrate/removeJsonLoader/__snapshots__/removeJsonLoader.test.js.snap diff --git a/lib/transformations/removeJsonLoader/__testfixtures__/.editorconfig b/lib/migrate/removeJsonLoader/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/removeJsonLoader/__testfixtures__/.editorconfig rename to lib/migrate/removeJsonLoader/__testfixtures__/.editorconfig diff --git a/lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js b/lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js similarity index 100% rename from lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js rename to lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js diff --git a/lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js b/lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js similarity index 100% rename from lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js rename to lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js diff --git a/lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js b/lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js similarity index 100% rename from lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js rename to lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js diff --git a/lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js b/lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js similarity index 100% rename from lib/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js rename to lib/migrate/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js diff --git a/lib/transformations/removeJsonLoader/removeJsonLoader.js b/lib/migrate/removeJsonLoader/removeJsonLoader.js similarity index 97% rename from lib/transformations/removeJsonLoader/removeJsonLoader.js rename to lib/migrate/removeJsonLoader/removeJsonLoader.js index 79914586ca7..c37f4adb4d6 100644 --- a/lib/transformations/removeJsonLoader/removeJsonLoader.js +++ b/lib/migrate/removeJsonLoader/removeJsonLoader.js @@ -7,7 +7,7 @@ import type { IArrayExpression } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); module.exports = function(j: Ijscodeshit, ast: IPath<*>) { function removeLoaderByName(path: IPath<*>, name: string) { diff --git a/lib/transformations/removeJsonLoader/removeJsonLoader.test.js b/lib/migrate/removeJsonLoader/removeJsonLoader.test.js similarity index 83% rename from lib/transformations/removeJsonLoader/removeJsonLoader.test.js rename to lib/migrate/removeJsonLoader/removeJsonLoader.test.js index a448e68bf02..b728ebae22c 100644 --- a/lib/transformations/removeJsonLoader/removeJsonLoader.test.js +++ b/lib/migrate/removeJsonLoader/removeJsonLoader.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-0"); defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-1"); diff --git a/lib/transformations/resolve/__snapshots__/resolve.test.js.snap b/lib/migrate/resolve/__snapshots__/resolve.test.js.snap similarity index 100% rename from lib/transformations/resolve/__snapshots__/resolve.test.js.snap rename to lib/migrate/resolve/__snapshots__/resolve.test.js.snap diff --git a/lib/transformations/resolve/__testfixtures__/.editorconfig b/lib/migrate/resolve/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/resolve/__testfixtures__/.editorconfig rename to lib/migrate/resolve/__testfixtures__/.editorconfig diff --git a/lib/transformations/resolve/__testfixtures__/resolve.input.js b/lib/migrate/resolve/__testfixtures__/resolve.input.js similarity index 100% rename from lib/transformations/resolve/__testfixtures__/resolve.input.js rename to lib/migrate/resolve/__testfixtures__/resolve.input.js diff --git a/lib/transformations/resolve/resolve.js b/lib/migrate/resolve/resolve.js similarity index 100% rename from lib/transformations/resolve/resolve.js rename to lib/migrate/resolve/resolve.js diff --git a/lib/migrate/resolve/resolve.test.js b/lib/migrate/resolve/resolve.test.js new file mode 100644 index 00000000000..75a14d9938c --- /dev/null +++ b/lib/migrate/resolve/resolve.test.js @@ -0,0 +1,5 @@ +"use strict"; + +const defineTest = require("../../utils//defineTest"); + +defineTest(__dirname, "resolve"); diff --git a/lib/transformations/uglifyJsPlugin/__snapshots__/uglifyJsPlugin.test.js.snap b/lib/migrate/uglifyJsPlugin/__snapshots__/uglifyJsPlugin.test.js.snap similarity index 100% rename from lib/transformations/uglifyJsPlugin/__snapshots__/uglifyJsPlugin.test.js.snap rename to lib/migrate/uglifyJsPlugin/__snapshots__/uglifyJsPlugin.test.js.snap diff --git a/lib/transformations/uglifyJsPlugin/__testfixtures__/.editorconfig b/lib/migrate/uglifyJsPlugin/__testfixtures__/.editorconfig similarity index 100% rename from lib/transformations/uglifyJsPlugin/__testfixtures__/.editorconfig rename to lib/migrate/uglifyJsPlugin/__testfixtures__/.editorconfig diff --git a/lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js b/lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js similarity index 100% rename from lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js rename to lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js diff --git a/lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js b/lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js similarity index 100% rename from lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js rename to lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js diff --git a/lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js b/lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js similarity index 100% rename from lib/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js rename to lib/migrate/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js diff --git a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js new file mode 100644 index 00000000000..f0c8e0d46f9 --- /dev/null +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js @@ -0,0 +1,28 @@ +// @flow +// eslint-disable-next-line node/no-unsupported-features +import type { Ijscodeshit, IPath } from "../../types"; + +const findPluginsByName = require("../../utils/ast-utils").findPluginsByName; + +module.exports = function(j: Ijscodeshit, ast: IPath<*>) { + function createSourceMapsProperty() { + return j.property("init", j.identifier("sourceMap"), j.identifier("true")); + } + + return findPluginsByName(j, ast, ["webpack.optimize.UglifyJsPlugin"]).forEach( + path => { + const args = path.value.arguments; + + if (args.length) { + // Plugin is called with object as arguments + j(path) + .find(j.ObjectExpression) + .get("properties") + .value.push(createSourceMapsProperty()); + } else { + // Plugin is called without arguments + args.push(j.objectExpression([createSourceMapsProperty()])); + } + } + ); +}; diff --git a/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.test.js similarity index 78% rename from lib/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js rename to lib/migrate/uglifyJsPlugin/uglifyJsPlugin.test.js index 4b43262cbdc..f40d97f5792 100644 --- a/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../defineTest"); +const defineTest = require("../../utils//defineTest"); defineTest(__dirname, "uglifyJsPlugin", "uglifyJsPlugin-0"); defineTest(__dirname, "uglifyJsPlugin", "uglifyJsPlugin-1"); diff --git a/lib/transformations/resolve/resolve.test.js b/lib/transformations/resolve/resolve.test.js deleted file mode 100644 index 9cbd9d22957..00000000000 --- a/lib/transformations/resolve/resolve.test.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "resolve"); diff --git a/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.js b/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.js deleted file mode 100644 index cf0acdd6b1f..00000000000 --- a/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.js +++ /dev/null @@ -1,28 +0,0 @@ -// @flow -// eslint-disable-next-line node/no-unsupported-features -import type { Ijscodeshit, IPath } from "../../types"; - -const findPluginsByName = require("../utils").findPluginsByName; - -module.exports = function(j: Ijscodeshit, ast: IPath<*>) { - function createSourceMapsProperty() { - return j.property("init", j.identifier("sourceMap"), j.identifier("true")); - } - - return findPluginsByName(j, ast, [ - "webpack.optimize.UglifyJsPlugin" - ]).forEach(path => { - const args = path.value.arguments; - - if (args.length) { - // Plugin is called with object as arguments - j(path) - .find(j.ObjectExpression) - .get("properties") - .value.push(createSourceMapsProperty()); - } else { - // Plugin is called without arguments - args.push(j.objectExpression([createSourceMapsProperty()])); - } - }); -}; diff --git a/lib/utils/WebpackOptionsValidationError.js b/lib/utils/WebpackOptionsValidationError.js deleted file mode 100644 index 0b9f1da2e61..00000000000 --- a/lib/utils/WebpackOptionsValidationError.js +++ /dev/null @@ -1,249 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Gajus Kuizinas @gajus -*/ -"use strict"; - -const webpackOptionsSchema = require("./webpackOptionsSchema"); - -const getSchemaPart = (path, parents, additionalPath) => { - parents = parents || 0; - path = path.split("/"); - path = path.slice(0, path.length - parents); - if (additionalPath) { - additionalPath = additionalPath.split("/"); - path = path.concat(additionalPath); - } - let schemaPart = webpackOptionsSchema; - for (let i = 1; i < path.length; i++) { - const inner = schemaPart[path[i]]; - if (inner) schemaPart = inner; - } - return schemaPart; -}; - -const getSchemaPartText = (schemaPart, additionalPath) => { - if (additionalPath) { - for (let i = 0; i < additionalPath.length; i++) { - const inner = schemaPart[additionalPath[i]]; - if (inner) schemaPart = inner; - } - } - while (schemaPart.$ref) schemaPart = getSchemaPart(schemaPart.$ref); - let schemaText = WebpackOptionsValidationError.formatSchema(schemaPart); - if (schemaPart.description) schemaText += `\n${schemaPart.description}`; - return schemaText; -}; - -const indent = (str, prefix, firstLine) => { - if (firstLine) { - return prefix + str.replace(/\n(?!$)/g, "\n" + prefix); - } else { - return str.replace(/\n(?!$)/g, `\n${prefix}`); - } -}; - -class WebpackOptionsValidationError extends Error { - constructor(validationErrors) { - super(); - if (Error.hasOwnProperty("captureStackTrace")) { - Error.captureStackTrace(this, this.constructor); - } - this.name = "WebpackOptionsValidationError"; - - this.message = - "Invalid configuration object. " + - "Webpack has been initialised using a configuration object that does not match the API schema.\n" + - validationErrors - .map( - err => - " - " + - indent( - WebpackOptionsValidationError.formatValidationError(err), - " ", - false - ) - ) - .join("\n"); - this.validationErrors = validationErrors; - } - - static formatSchema(schema, prevSchemas) { - prevSchemas = prevSchemas || []; - - const formatInnerSchema = (innerSchema, addSelf) => { - if (!addSelf) - return WebpackOptionsValidationError.formatSchema( - innerSchema, - prevSchemas - ); - if (prevSchemas.indexOf(innerSchema) >= 0) return "(recursive)"; - return WebpackOptionsValidationError.formatSchema( - innerSchema, - prevSchemas.concat(schema) - ); - }; - - if (schema.type === "string") { - if (schema.minLength === 1) return "non-empty string"; - else if (schema.minLength > 1) - return `string (min length ${schema.minLength})`; - return "string"; - } else if (schema.type === "boolean") { - return "boolean"; - } else if (schema.type === "number") { - return "number"; - } else if (schema.type === "object") { - if (schema.properties) { - const required = schema.required || []; - return `object { ${Object.keys(schema.properties) - .map(property => { - if (required.indexOf(property) < 0) return property + "?"; - return property; - }) - .concat(schema.additionalProperties ? ["..."] : []) - .join(", ")} }`; - } - if (schema.additionalProperties) { - return `object { : ${formatInnerSchema( - schema.additionalProperties - )} }`; - } - return "object"; - } else if (schema.type === "array") { - return `[${formatInnerSchema(schema.items)}]`; - } - - switch (schema.instanceof) { - case "Function": - return "function"; - case "RegExp": - return "RegExp"; - } - if (schema.$ref) return formatInnerSchema(getSchemaPart(schema.$ref), true); - if (schema.allOf) return schema.allOf.map(formatInnerSchema).join(" & "); - if (schema.oneOf) return schema.oneOf.map(formatInnerSchema).join(" | "); - if (schema.anyOf) return schema.anyOf.map(formatInnerSchema).join(" | "); - if (schema.enum) - return schema.enum.map(item => JSON.stringify(item)).join(" | "); - return JSON.stringify(schema, 0, 2); - } - - static formatValidationError(err) { - const dataPath = `configuration${err.dataPath}`; - if (err.keyword === "additionalProperties") { - const baseMessage = `${dataPath} has an unknown property '${err.params - .additionalProperty}'. These properties are valid:\n${getSchemaPartText( - err.parentSchema - )}`; - if (!err.dataPath) { - switch (err.params.additionalProperty) { - case "debug": - return ( - `${baseMessage}\n` + - "The 'debug' property was removed in webpack 2.\n" + - "Loaders should be updated to allow passing this option via loader options in module.rules.\n" + - "Until loaders are updated one can use the LoaderOptionsPlugin to switch loaders into debug mode:\n" + - "plugins: [\n" + - " new webpack.LoaderOptionsPlugin({\n" + - " debug: true\n" + - " })\n" + - "]" - ); - } - return ( - baseMessage + - "\n" + - "For typos: please correct them.\n" + - "For loader options: webpack 2 no longer allows custom properties in configuration.\n" + - " Loaders should be updated to allow passing options via loader options in module.rules.\n" + - " Until loaders are updated one can use the LoaderOptionsPlugin to pass these options to the loader:\n" + - " plugins: [\n" + - " new webpack.LoaderOptionsPlugin({\n" + - " // test: /\\.xxx$/, // may apply this only for some modules\n" + - " options: {\n" + - ` ${err.params.additionalProperty}: ...\n` + - " }\n" + - " })\n" + - " ]" - ); - } - return baseMessage; - } else if (err.keyword === "oneOf" || err.keyword === "anyOf") { - if (err.children && err.children.length > 0) { - return ( - `${dataPath} should be one of these:\n${getSchemaPartText( - err.parentSchema - )}\n` + - `Details:\n${err.children - .map( - err => - " * " + - indent( - WebpackOptionsValidationError.formatValidationError(err), - " ", - false - ) - ) - .join("\n")}` - ); - } - return `${dataPath} should be one of these:\n${getSchemaPartText( - err.parentSchema - )}`; - } else if (err.keyword === "enum") { - if ( - err.parentSchema && - err.parentSchema.enum && - err.parentSchema.enum.length === 1 - ) { - return `${dataPath} should be ${getSchemaPartText(err.parentSchema)}`; - } - return `${dataPath} should be one of these:\n${getSchemaPartText( - err.parentSchema - )}`; - } else if (err.keyword === "allOf") { - return `${dataPath} should be:\n${getSchemaPartText(err.parentSchema)}`; - } else if (err.keyword === "type") { - switch (err.params.type) { - case "object": - return `${dataPath} should be an object.`; - case "string": - return `${dataPath} should be a string.`; - case "boolean": - return `${dataPath} should be a boolean.`; - case "number": - return `${dataPath} should be a number.`; - case "array": - return `${dataPath} should be an array:\n${getSchemaPartText( - err.parentSchema - )}`; - } - return `${dataPath} should be ${err.params.type}:\n${getSchemaPartText( - err.parentSchema - )}`; - } else if (err.keyword === "instanceof") { - return `${dataPath} should be an instance of ${getSchemaPartText( - err.parentSchema - )}.`; - } else if (err.keyword === "required") { - const missingProperty = err.params.missingProperty.replace(/^\./, ""); - return `${dataPath} misses the property '${missingProperty}'.\n${getSchemaPartText( - err.parentSchema, - ["properties", missingProperty] - )}`; - } else if (err.keyword === "minLength" || err.keyword === "minItems") { - if (err.params.limit === 1) return `${dataPath} should not be empty.`; - else return `${dataPath} ${err.message}`; - } else { - // eslint-disable-line no-fallthrough - return `${dataPath} ${err.message} (${JSON.stringify( - err, - 0, - 2 - )}).\n${getSchemaPartText(err.parentSchema)}`; - } - } -} - -module.exports = WebpackOptionsValidationError; diff --git a/lib/transformations/__snapshots__/utils.test.js.snap b/lib/utils/__snapshots__/ast-utils.test.js.snap similarity index 92% rename from lib/transformations/__snapshots__/utils.test.js.snap rename to lib/utils/__snapshots__/ast-utils.test.js.snap index ca7a5492783..6065745e190 100644 --- a/lib/transformations/__snapshots__/utils.test.js.snap +++ b/lib/utils/__snapshots__/ast-utils.test.js.snap @@ -25,6 +25,8 @@ exports[`utils createEmptyArrayProperty should create an array with no propertie exports[`utils createExternalRegExp should create an regExp property that has been parsed by jscodeshift 1`] = `"\\"\\\\t\\""`; +exports[`utils createFunctionWithArguments Should create a empty function with a name 1`] = `"ringoStar(\\"/* Add your arguments here */\\")"`; + exports[`utils createIdentifierOrLiteral should create basic literal 1`] = `"'stringLiteral'"`; exports[`utils createIdentifierOrLiteral should create boolean 1`] = `"true"`; @@ -78,7 +80,7 @@ exports[`utils createProperty should create properties for String 1`] = ` exports[`utils createProperty should create properties for complex keys 1`] = ` "{ - \\"foo-bar\\": \\"bar\\" + foo-bar: \\"bar\\" }" `; @@ -102,7 +104,7 @@ exports[`utils isAssignment should invoke a callback if parent type is Assignmen }" `; -exports[`utils loopThroughObjects Use recursion and add elements to an node 1`] = ` +exports[`utils loopThroughObjects Should use recursion and add elements to a node 1`] = ` "module.exports = { hello: { webpack: cli diff --git a/lib/transformations/utils.js b/lib/utils/ast-utils.js similarity index 53% rename from lib/transformations/utils.js rename to lib/utils/ast-utils.js index d9d46240f50..2a4dbd67e28 100644 --- a/lib/transformations/utils.js +++ b/lib/utils/ast-utils.js @@ -11,6 +11,8 @@ import type { IArrayExpression } from "../types"; +const hashtable = require("./hashtable"); + function safeTraverse(obj: Object, paths: string[]): ?any { let val: Object = obj; let idx: number = 0; @@ -51,16 +53,17 @@ function pathsToMemberExpression(j: Ijscodeshit, paths: string[]) { } } -/* -* @function findPluginsByName -* -* Find paths that match `new name.space.PluginName()` for a given array of plugin names -* -* @param j — jscodeshift API -* @param { Node } node - Node to start search from -* @param { Array } pluginNamesArray - Array of plugin names like `webpack.LoaderOptionsPlugin` -* @returns Path - * */ +/** + * + * Find paths that match `new name.space.PluginName()` for a + * given array of plugin names + * + * @param {any} j — jscodeshift API + * @param {Node} node - Node to start search from + * @param {String[]} pluginNamesArray - Array of plugin names like `webpack.LoaderOptionsPlugin` + * @returns {Node} Node that has the pluginName + */ + function findPluginsByName( j: Ijscodeshit, node: IPath<*>, @@ -74,32 +77,34 @@ function findPluginsByName( }); } -/* - * @function findPluginsRootNodes +/** * - * Finds the path to the `plugins: []` node + * Finds the path to the `name: []` node * - * @param j — jscodeshift API - * @param { Node } node - Node to start search from - * @returns Path - * */ -function findPluginsRootNodes( + * @param {any} j — jscodeshift API + * @param {Node} node - Node to start search from + * @param {String} propName - property to search for + * @returns {Node} found node and + */ + +function findRootNodesByName( j: Ijscodeshit, - node: IPath<*> + node: IPath<*>, + propName: string ): IPath> { - return node.find(j.Property, { key: { name: "plugins" } }); + return node.find(j.Property, { key: { name: propName } }); } -/* - * @function createProperty +/** * * Creates an Object's property with a given key and value * - * @param j — jscodeshift API - * @param { string | number } key - Property key - * @param { string | number | boolean } value - Property value - * @returns Node - * */ + * @param {any} j — jscodeshift API + * @param {String | Number} key - Property key + * @param {String | Number | Boolean} value - Property value + * @returns {Node} + */ + function createProperty( j: Ijscodeshit, key: string | number, @@ -112,15 +117,14 @@ function createProperty( ); } -/* - * @function createLiteral +/** * * Creates an appropriate literal property * - * @param j — jscodeshift API - * @param { string | boolean | number } val - * @returns { Node } - * */ + * @param {any} j — jscodeshift API + * @param {String | Boolean | Number} val + * @returns {Node} + */ function createLiteral( j: Ijscodeshit, @@ -139,15 +143,14 @@ function createLiteral( return j.literal(literalVal); } -/* - * @function createIdentifierOrLiteral +/** * * Creates an appropriate identifier or literal property * - * @param j — jscodeshift API - * @param { string | boolean | number } val - * @returns { Node } - * */ + * @param {any} j — jscodeshift API + * @param {String | Boolean | Number} val + * @returns {Node} + */ function createIdentifierOrLiteral(j: Ijscodeshit, val: any): any { // IPath | IPath doesn't work, find another way @@ -180,18 +183,19 @@ function createIdentifierOrLiteral(j: Ijscodeshit, val: any): any { } return j.literal(literalVal); } -/* - * @function createOrUpdatePluginByName + +/** * * Findes or creates a node for a given plugin name string with options object * If plugin decalaration already exist, options are merged. * - * @param j — jscodeshift API - * @param { NodePath } rooNodePath - `plugins: []` NodePath where plugin should be added. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths - * @param { string } pluginName - ex. `webpack.LoaderOptionsPlugin` - * @param { Object } options - plugin options - * @returns void - * */ + * @param {any} j — jscodeshift API + * @param {Node} rootNodePath - `plugins: []` NodePath where plugin should be added. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths + * @param {String} pluginName - ex. `webpack.LoaderOptionsPlugin` + * @param {Object} options - plugin options + * @returns {Void} + */ + function createOrUpdatePluginByName( j: Ijscodeshit, rootNodePath: IPath<*>, @@ -256,16 +260,15 @@ function createOrUpdatePluginByName( } } -/* - * @function findVariableToPlugin +/** * * Finds the variable to which a third party plugin is assigned to * - * @param j — jscodeshift API - * @param { Node } rootNode - `plugins: []` Root Node. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths - * @param { string } pluginPackageName - ex. `extract-text-plugin` - * @returns { string } variable name - ex. 'var s = require(s) gives "s"` - * */ + * @param {any} j — jscodeshift API + * @param {Node} rootNode - `plugins: []` Root Node. See https://github.com/facebook/jscodeshift/wiki/jscodeshift-Documentation#nodepaths + * @param {String} pluginPackageName - ex. `extract-text-plugin` + * @returns {String} variable name - ex. 'var s = require(s) gives "s"` + */ function findVariableToPlugin( j: Ijscodeshit, @@ -280,14 +283,13 @@ function findVariableToPlugin( return moduleVarNames.pop().id.name; } -/* -* @function isType -* -* Returns true if type is given type -* @param { Node} path - pathNode -* @param { string } type - node type -* @returns {boolean} -*/ +/** + * + * Returns true if type is given type + * @param {Node} path - pathNode + * @param {String} type - node type + * @returns {Boolean} + */ function isType(path: IPath<*>, type: string): boolean { return path.type === type; @@ -300,15 +302,14 @@ function findObjWithOneOfKeys(p: IPath<*>, keyNames: string[]): boolean { }, false); } -/* -* @function getRequire -* -* Returns constructed require symbol -* @param j — jscodeshift API -* @param { string } constName - Name of require -* @param { string } packagePath - path of required package -* @returns {NodePath} - the created ast -*/ +/** + * + * Returns constructed require symbol + * @param {any} j — jscodeshift API + * @param {String} constName - Name of require + * @param {String} packagePath - path of required package + * @returns {Node} - the created ast + */ function getRequire( j: Ijscodeshit, @@ -323,16 +324,15 @@ function getRequire( ]); } -/* -* @function checkIfExistsAndAddValue -* -* If a prop exists, it overrides it, else it creates a new one -* @param j — jscodeshift API -* @param { Node } node - objectexpression to check -* @param { string } key - Key of the property -* @param { string } value - computed value of the property -* @returns - nothing -*/ +/** + * + * If a prop exists, it overrides it, else it creates a new one + * @param {any} j — jscodeshift API + * @param {Node} node - objectexpression to check + * @param {String} key - Key of the property + * @param {String} value - computed value of the property + * @returns {Void} + */ function checkIfExistsAndAddValue( j: Ijscodeshit, @@ -353,14 +353,13 @@ function checkIfExistsAndAddValue( } } -/* -* @function createEmptyArrayProperty -* -* Creates an empty array -* @param j — jscodeshift API -* @param { String } key - st name -* @returns - { Array } arr - An empty array -*/ +/** + * + * Creates an empty array + * @param {any} j — jscodeshift API + * @param {String} key - array name + * @returns {Array} arr - An empty array + */ function createEmptyArrayProperty( j: Ijscodeshit, key: string @@ -368,16 +367,16 @@ function createEmptyArrayProperty( return j.property("init", j.identifier(key), j.arrayExpression([])); } -/* -* @function createArrayWithChildren -* -* Creates an array and iterates on an object with properties -* @param j — jscodeshift API -* @param { String } key - object name -* @param { string } subProps - computed value of the property -* @param { Boolean } shouldDropKeys - -* @returns - { Array } arr - An array with the object properties -*/ +/** + * + * Creates an array and iterates on an object with properties + * + * @param {any} j — jscodeshift API + * @param {String} key - object name + * @param {String} subProps - computed value of the property + * @param {Boolean} shouldDropKeys - bool to ask to use obj.keys or not + * @returns {Array} arr - An array with the object properties + */ function createArrayWithChildren( j: Ijscodeshit, @@ -408,16 +407,15 @@ function createArrayWithChildren( return arr; } -/* -* @function loopThroughObjects -* -* Loops through an object and adds property to an object with no identifier -* @param j — jscodeshift API -* @param { Node } p - node to add value to -* @param { Object } obj - Object to loop through -* @returns - { Function|Node } - Either pushes the node, or reruns until -* nothing is left -*/ +/** + * + * Loops through an object and adds property to an object with no identifier + * @param {any} j — jscodeshift API + * @param {Node} p - node to add value to + * @param {Object} obj - Object to loop through + * @returns {Function | Node} - Either pushes the node, or reruns until + * nothing is left + */ function loopThroughObjects( j: Ijscodeshit, @@ -458,15 +456,15 @@ function loopThroughObjects( }); } -/* -* @function createObjectWithSuppliedProperty -* -* Creates an object with an supplied property as parameter -* @param j — jscodeshift API -* @param { String } key - object name -* @param { Node } prop - property to be added -* @returns - { Node } - An property with the supplied property -*/ +/** + * + * Creates an object with an supplied property as parameter + * + * @param {any} j — jscodeshift API + * @param {String} key - object name + * @param {Node} prop - property to be added + * @returns {Node} - An property with the supplied property + */ function createObjectWithSuppliedProperty( j: Ijscodeshit, @@ -476,30 +474,29 @@ function createObjectWithSuppliedProperty( return j.property("init", j.identifier(key), prop); } -/* -* @function createExternalRegExp -* -* Finds a regexp property with an already parsed AST from the user -* @param j — jscodeshift API -* @param { String } prop - property to find the value at -* @returns - { Node } - A literal node with the found regexp -*/ +/** + * + * Finds a regexp property with an already parsed AST from the user + * @param {any} j — jscodeshift API + * @param {String} prop - property to find the value at + * @returns {Node} - A literal node with the found regexp + */ function createExternalRegExp(j: Ijscodeshit, prop: any): IPath { let regExpProp = prop.__paths[0].value.program.body[0].expression; return j.literal(regExpProp.value); } -/* -* @function pushCreateProperty -* -* Creates a property and pushes the value to a node -* @param j — jscodeshift API -* @param { Node } p - Node to push against -* @param { String } key - key used as identifier -* @param { String } val - property value -* @returns - { Node } - Returns node the pushed property -*/ +/** + * + * Creates a property and pushes the value to a node + * + * @param {any} j — jscodeshift API + * @param {Node} p - Node to push against + * @param {String} key - key used as identifier + * @param {String} val - property value + * @returns {Node} - Returns node the pushed property + */ function pushCreateProperty( j: Ijscodeshit, @@ -508,49 +505,101 @@ function pushCreateProperty( val: any ): number { let property: string | IPath | IPath; - if (val.hasOwnProperty("type")) { - property = val; + const findProp = findRootNodesByName(j, j(p), key); + if (findProp.size()) { + findProp.filter(p => { + p.value.value = createIdentifierOrLiteral(j, val); + }); } else { - property = createIdentifierOrLiteral(j, val); + if (val.hasOwnProperty("type")) { + property = val; + } else { + property = createIdentifierOrLiteral(j, val); + } + return p.value.properties.push( + createObjectWithSuppliedProperty(j, key, property) + ); } - return p.value.properties.push( - createObjectWithSuppliedProperty(j, key, property) - ); } -/* -* @function pushObjectKeys -* -* @param j — jscodeshift API -* @param { Node } p - path to push -* @param { Object } webpackProperties - The object to loop over -* @param { String } name - Key that will be the identifier we find and add values to -* @returns - { Node/Function } Returns a function that will push a node if -*subProperty is an array, else it will invoke a function that will push a single node -*/ +/** + * + * @param {any} j — jscodeshift API + * @param {Node} p - path to push + * @param {Object} webpackProperties - The object to loop over + * @param {String} name - Key that will be the identifier we find and add values to + * @returns {Node | Function} Returns a function that will push a node if + * subProperty is an array, else it will invoke a function that will push a single node + */ function pushObjectKeys( j: Ijscodeshit, p: IPath<*>, webpackProperties: Object, - name: string + name: string, + reassign: any ): any { p.value.properties .filter(n => safeTraverse(n, ["key", "name"]) === name) .forEach(prop => { Object.keys(webpackProperties).forEach(webpackProp => { - if (webpackProp.indexOf("inject") >= 0) { - return prop.value.properties.push( - createIdentifierOrLiteral(j, webpackProperties[webpackProp]) + try { + webpackProperties[webpackProp] = JSON.parse( + webpackProperties[webpackProp] ); + } catch (err) {} + + if (webpackProp.indexOf("inject") >= 0) { + if (reassign) { + return checkIfExistsAndAddValue( + j, + prop, + webpackProp, + webpackProperties[webpackProp] + ); + } else { + return prop.value.properties.push( + createIdentifierOrLiteral(j, webpackProperties[webpackProp]) + ); + } } else if (Array.isArray(webpackProperties[webpackProp])) { - const propArray = createArrayWithChildren( - j, - webpackProp, - webpackProperties[webpackProp], - true - ); - return prop.value.properties.push(propArray); + if (reassign) { + return j(p) + .find(j.Property, { key: { name: webpackProp } }) + .filter(props => props.value.key.name === webpackProp) + .forEach(property => { + let markedProps = []; + let propsToMerge = []; + property.value.value.elements.forEach(elem => { + if (elem.value) { + markedProps.push(elem.value); + } + }); + webpackProperties[webpackProp].forEach(underlyingprop => { + if (typeof underlyingprop === "object") { + //TODO loaders + return; + } + if (!markedProps.includes(underlyingprop)) { + propsToMerge.push(underlyingprop); + } + }); + const hashtableForProps = hashtable(propsToMerge); + hashtableForProps.forEach(elem => { + property.value.value.elements.push( + createIdentifierOrLiteral(j, elem) + ); + }); + }); + } else { + const propArray = createArrayWithChildren( + j, + webpackProp, + webpackProperties[webpackProp], + true + ); + return prop.value.properties.push(propArray); + } } else if ( typeof webpackProperties[webpackProp] !== "object" || webpackProperties[webpackProp].__paths || @@ -563,32 +612,35 @@ function pushObjectKeys( webpackProperties[webpackProp] ); } else { - pushCreateProperty(j, prop, webpackProp, j.objectExpression([])); + if (!reassign) { + pushCreateProperty(j, prop, webpackProp, j.objectExpression([])); + } return pushObjectKeys( j, prop, webpackProperties[webpackProp], - webpackProp + webpackProp, + reassign ); } }); }); } -/* -* @function isAssignment -* -* Checks if we are at the correct node and later invokes a callback -* for the transforms to either use their own transform function or -* use pushCreateProperty if the transform doesn't expect any properties -* @param j — jscodeshift API -* @param { Node } p - Node to push against -* @param { Function } cb - callback to be invoked -* @param { String } identifier - key to use as property -* @param { Object } property - WebpackOptions that later will be converted via -* pushCreateProperty via WebpackOptions[identifier] -* @returns - { Function } cb - Returns the callback and pushes a new node -*/ +/** + * + * Checks if we are at the correct node and later invokes a callback + * for the transforms to either use their own transform function or + * use pushCreateProperty if the transform doesn't expect any properties + * + * @param {any} j — jscodeshift API + * @param {Node} p - Node to push against + * @param {Function} cb - callback to be invoked + * @param {String} identifier - key to use as property + * @param {Object} property - WebpackOptions that later will be converted via + * pushCreateProperty via WebpackOptions[identifier] + * @returns {Function} cb - Returns the callback and pushes a new node + */ function isAssignment( j: Ijscodeshit, @@ -606,11 +658,90 @@ function isAssignment( } } +/** + * + * Creates a function call with arguments + * @param {any} j — jscodeshift API + * @param {Node} p - Node to push against + * @param {String} name - Name for the given function + * @returns {Node} - Returns the node for the created + * function + */ + +function createFunctionWithArguments( + j: Ijscodeshit, + p: IPath<*>, + name: String +): any { + if (typeof name === "object") { + let node; + Object.keys(name).forEach(key => { + const pluginExist = findPluginsByName(j, j(p), [key]); + if (pluginExist.size() !== 0) { + let pluginName = + key.indexOf("webpack") >= 0 + ? key.indexOf("webpack.optimize") >= 0 + ? key.replace("webpack.optimize.", " ") + : key.replace("webpack.", " ") + : key; + pluginExist + .filter( + p => pluginName.trim(" ") === p.value.callee.property.name.trim(" ") + ) + .forEach(n => { + Object.keys(name[key]).forEach(subKey => { + const foundNode = findRootNodesByName(j, j(n), subKey); + if (foundNode.size() !== 0) { + foundNode.forEach(n => { + j(n).replaceWith( + createObjectWithSuppliedProperty( + j, + subKey, + createIdentifierOrLiteral(j, name[key][subKey]) + ) + ); + node = createObjectWithSuppliedProperty( + j, + subKey, + createIdentifierOrLiteral(j, name[key][subKey]) + ); + }); + } else { + const method = j.property( + "init", + createLiteral(j, subKey), + createIdentifierOrLiteral(j, name[key][subKey]) + ); + n.value.arguments[0].properties.push(method); + node = null; + //node.arguments.push(j.objectExpression([method])); + } + }); + }); + return node; + } + node = j.newExpression(j.identifier(key), []); + return Object.keys(name[key]).forEach(subKey => { + const method = createObjectWithSuppliedProperty( + j, + subKey, + createIdentifierOrLiteral(j, name[key][subKey]) + ); + node.arguments.push(j.objectExpression([method])); + }); + }); + return node; + } + return j.callExpression(j.identifier(name), [ + j.literal("/* Add your arguments here */") + ]); +} + module.exports = { safeTraverse, createProperty, findPluginsByName, - findPluginsRootNodes, + findRootNodesByName, createOrUpdatePluginByName, findVariableToPlugin, isType, @@ -623,6 +754,7 @@ module.exports = { createEmptyArrayProperty, createObjectWithSuppliedProperty, createExternalRegExp, + createFunctionWithArguments, pushCreateProperty, pushObjectKeys, isAssignment, diff --git a/lib/transformations/utils.test.js b/lib/utils/ast-utils.test.js similarity index 92% rename from lib/transformations/utils.test.js rename to lib/utils/ast-utils.test.js index a70091a40e2..99f907b7432 100644 --- a/lib/transformations/utils.test.js +++ b/lib/utils/ast-utils.test.js @@ -1,7 +1,7 @@ "use strict"; const j = require("jscodeshift/dist/core"); -const utils = require("./utils"); +const utils = require("./ast-utils"); describe("utils", () => { describe("createProperty", () => { @@ -20,7 +20,7 @@ describe("utils", () => { expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); }); - xit("should create properties for complex keys", () => { + it("should create properties for complex keys", () => { const res = utils.createProperty(j, "foo-bar", "bar"); expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); }); @@ -67,12 +67,12 @@ describe("utils", () => { }); }); - describe("findPluginsRootNodes", () => { + describe("findRootNodesByName", () => { it("should find plugins: [] nodes", () => { const ast = j(` var a = { plugins: [], foo: { plugins: [] } } `); - const res = utils.findPluginsRootNodes(j, ast); + const res = utils.findRootNodesByName(j, ast, "plugins"); expect(res.size()).toEqual(2); }); @@ -80,7 +80,7 @@ var a = { plugins: [], foo: { plugins: [] } } const ast = j(` var a = { plugs: [] } `); - const res = utils.findPluginsRootNodes(j, ast); + const res = utils.findRootNodesByName(j, ast, "plugins"); expect(res.size()).toEqual(0); }); }); @@ -309,7 +309,7 @@ var a = { plugs: [] } }); }); describe("loopThroughObjects", () => { - it("Use recursion and add elements to an node", () => { + it("Should use recursion and add elements to a node", () => { const ast = j("module.exports = {}"); const webpackProperties = { hello: { @@ -322,6 +322,20 @@ var a = { plugs: [] } expect(ast.toSource()).toMatchSnapshot(); }); }); + describe("createFunctionWithArguments", () => { + it("Should create a empty function with a name", () => { + const ast = j("module.exports = {plugins: []}"); + const pluginsNode = utils.findRootNodesByName(j, ast, "plugins"); + pluginsNode.forEach(node => { + let expectedPlugin = utils.createFunctionWithArguments( + j, + node, + "ringoStar" + ); + expect(j(expectedPlugin).toSource()).toMatchSnapshot(); + }); + }); + }); describe("isAssignment", () => { it("should invoke a callback if parent type is AssignmentExpression", () => { const ast = j("module.exports = {}"); diff --git a/lib/transformations/defineTest.js b/lib/utils/defineTest.js similarity index 85% rename from lib/transformations/defineTest.js rename to lib/utils/defineTest.js index b2417c2213e..7a35efcbb48 100644 --- a/lib/transformations/defineTest.js +++ b/lib/utils/defineTest.js @@ -24,13 +24,15 @@ const path = require("path"); * "foo.input.js" file, pass this to the transform, and expect its output to * be equal to the contents of "foo.output.js". * @param {Object|Boolean|String} initOptions TBD - * @return {TBD} TBD + * @param {String} action init, update or remove, decides how to format the AST + * @return {Function} Function that fires of the transforms */ function runSingleTansform( dirName, transformName, testFilePrefix, - initOptions + initOptions, + action ) { if (!testFilePrefix) { testFilePrefix = transformName; @@ -51,11 +53,11 @@ function runSingleTansform( } const ast = jscodeshift(source); if (initOptions || typeof initOptions === "boolean") { - return transform(jscodeshift, ast, initOptions).toSource({ + return transform(jscodeshift, ast, initOptions, action).toSource({ quote: "single" }); } - return transform(jscodeshift, ast, source).toSource({ + return transform(jscodeshift, ast, source, action).toSource({ quote: "single" }); } @@ -73,10 +75,17 @@ function runSingleTansform( * for the expected output. For example, if set to "foo", we will read the * "foo.input.js" file, pass this to the transform, and expect its output to * be equal to the contents of "foo.output.js". - * @param {TBD} type TBD - * @return {TBD} TBD + * @param {any} transformObject Object to be transformed with the transformations + * @param {String} action init, update or remove, decides how to format the AST + * @return {Void} Jest makes sure to execute the globally defined functions */ -function defineTest(dirName, transformName, testFilePrefix, type) { +function defineTest( + dirName, + transformName, + testFilePrefix, + transformObject, + action +) { const testName = testFilePrefix ? `transforms correctly using "${testFilePrefix}" data` : "transforms correctly"; @@ -86,7 +95,8 @@ function defineTest(dirName, transformName, testFilePrefix, type) { dirName, transformName, testFilePrefix, - type + transformObject, + action ); expect(output).toMatchSnapshot(); }); diff --git a/lib/utils/hashtable.js b/lib/utils/hashtable.js new file mode 100644 index 00000000000..6b159632cb7 --- /dev/null +++ b/lib/utils/hashtable.js @@ -0,0 +1,20 @@ +/** + * Combined hashtable that sorts duplicate elements + * https://stackoverflow.com/questions/9229645/remove-duplicate-values-from-js-array + * + * @param {Array} a Array to lookup + * @returns {Array} A sorted array with removed dupe elements + */ +module.exports = function hashtable(a) { + var prims = { boolean: {}, number: {}, string: {} }, + objs = []; + + return a.filter(function(item) { + var type = typeof item; + if (type in prims) + return prims[type].hasOwnProperty(item) + ? false + : (prims[type][item] = true); + else return objs.indexOf(item) >= 0 ? false : objs.push(item); + }); +}; diff --git a/lib/utils/modify-config-helper.js b/lib/utils/modify-config-helper.js new file mode 100644 index 00000000000..cf2f8b81dfa --- /dev/null +++ b/lib/utils/modify-config-helper.js @@ -0,0 +1,40 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const yeoman = require("yeoman-environment"); +const runTransform = require("../init/transformations/index"); + +/** + * + * Looks up the webpack.config in the user's path and runs a given + * generator scaffold followed up by a transform + * + * @param {String} action — action to be done (add, remove, update, init) + * @param {Class} name - Name for the given function + * @returns {Function} runTransform - Returns a transformation instance + */ + +module.exports = function modifyHelperUtil(action, generator) { + const configPath = path.resolve(process.cwd(), "webpack.config.js"); + const webpackConfigExists = fs.existsSync(configPath); + if (!webpackConfigExists) { + throw new Error( + "Couldn't find a webpack configuration in your project path" + ); + } + const env = yeoman.createEnv("webpack", null); + const generatorName = `webpack-${action}-generator`; + env.registerStub(generator, generatorName); + + env.run(generatorName).on("end", () => { + const config = Object.assign( + { + configFile: fs.readFileSync(configPath, "utf8"), + configPath: configPath + }, + env.getArgument("configuration") + ); + return runTransform(config, action); + }); +}; diff --git a/lib/utils/npm-exists.js b/lib/utils/npm-exists.js index f8a11b8d9d4..8283cce050a 100644 --- a/lib/utils/npm-exists.js +++ b/lib/utils/npm-exists.js @@ -1,29 +1,18 @@ "use strict"; const got = require("got"); -const chalk = require("chalk"); -const constant = value => () => value; +const constant = value => _ => value; -/* -* @function npmExists -* -* Checks if the given dependency/module is registered on npm -* -* @param { String } moduleName - The dependency to be checked -* @returns { } constant - Returns either true or false, -* based on if it exists or not -*/ +/** + * + * Checks if the given dependency/module is registered on npm + * + * @param {String} moduleName - The dependency to be checked + * @returns {Promise} constant - Returns either true or false, + * based on if it exists or not + */ module.exports = function npmExists(moduleName) { - //eslint-disable-next-line - if (moduleName.length <= 14 || moduleName.slice(0, 14) !== "webpack-addons") { - throw new TypeError( - chalk.bold(`${moduleName} isn't a valid name.\n`) + - chalk.red( - "\nIt should be prefixed with 'webpack-addons', but have different suffix.\n" - ) - ); - } const hostname = "https://www.npmjs.org"; const pkgUrl = `${hostname}/package/${moduleName}`; return got(pkgUrl, { diff --git a/lib/utils/npm-packages-exists.js b/lib/utils/npm-packages-exists.js index d8999771023..65c38e80eaa 100644 --- a/lib/utils/npm-packages-exists.js +++ b/lib/utils/npm-packages-exists.js @@ -1,21 +1,29 @@ "use strict"; - +const chalk = require("chalk"); const npmExists = require("./npm-exists"); -const resolvePackages = require("./resolve-packages"); +const resolvePackages = require("./resolve-packages").resolvePackages; -/* -* @function npmPackagesExists -* -* Loops through an array and checks if a package is registered -* on npm and throws an error if it is not. -* -* @param { Array } pkg - Array of packages to check existence of -* @returns { Array } resolvePackages - Returns an process to install the packages -*/ +/** + * + * Loops through an array and checks if a package is registered + * on npm and throws an error if it is not. + * + * @param {String[]} pkg - Array of packages to check existence of + * @returns {Array} resolvePackages - Returns an process to install the packages + */ module.exports = function npmPackagesExists(pkg) { let acceptedPackages = []; pkg.forEach(addon => { + //eslint-disable-next-line + if (addon.length <= 14 || addon.slice(0, 14) !== "webpack-addons") { + throw new TypeError( + chalk.bold(`${addon} isn't a valid name.\n`) + + chalk.red( + "\nIt should be prefixed with 'webpack-addons', but have different suffix.\n" + ) + ); + } npmExists(addon) .then(moduleExists => { if (!moduleExists) { @@ -30,7 +38,7 @@ module.exports = function npmPackagesExists(pkg) { console.error(err.stack || err); process.exit(0); }) - .then(() => { + .then(_ => { if (acceptedPackages.length === pkg.length) return resolvePackages(acceptedPackages); }); diff --git a/lib/utils/package-manager.js b/lib/utils/package-manager.js index 57e335dfb8b..4f2fead6d56 100644 --- a/lib/utils/package-manager.js +++ b/lib/utils/package-manager.js @@ -10,25 +10,42 @@ const SPAWN_FUNCTIONS = { yarn: spawnYarn }; +/** + * + * Spawns a new process using npm + * + * @param {String} pkg - The dependency to be installed + * @param {Boolean} isNew - indicates if it needs to be updated or installed + * @returns {Function} spawn - Installs the package + */ + function spawnNPM(pkg, isNew) { return spawn.sync("npm", [isNew ? "install" : "update", "-g", pkg], { stdio: "inherit" }); } +/** + * + * Spawns a new process using yarn + * + * @param {String} pkg - The dependency to be installed + * @param {Boolean} isNew - indicates if it needs to be updated or installed + * @returns {Function} spawn - Installs the package + */ + function spawnYarn(pkg, isNew) { return spawn.sync("yarn", ["global", isNew ? "add" : "upgrade", pkg], { stdio: "inherit" }); } -/* -* @function spawnChild -* -* Spawns a new process that installs the addon/dependency -* -* @param { String } pkg - The dependency to be installed -* @returns { } spawn - Installs the package -*/ +/** + * + * Spawns a new process that installs the addon/dependency + * + * @param {String} pkg - The dependency to be installed + * @returns {Function} spawn - Installs the package + */ function spawnChild(pkg) { const pkgPath = path.resolve(globalPath, pkg); @@ -38,14 +55,13 @@ function spawnChild(pkg) { return SPAWN_FUNCTIONS[packageManager](pkg, isNew); } -/* -* @function getPackageManager -* -* Returns the name of package manager to use, -* preferring yarn over npm if available -* -* @returns { String } - The package manager name -*/ +/** + * + * Returns the name of package manager to use, + * preferring yarn over npm if available + * + * @returns {String} - The package manager name + */ function getPackageManager() { if (spawn.sync("yarn", [" --version"], { stdio: "ignore" }).error) { diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js new file mode 100644 index 00000000000..7d3bff7c0a3 --- /dev/null +++ b/lib/utils/prop-types.js @@ -0,0 +1,35 @@ +/** + * + * A Set of all accepted properties + * + * @returns {Set} A new set with accepted webpack properties + */ + +module.exports = new Set([ + "context", + "devServer", + "devtool", + "entry", + "externals", + "module", + "node", + "output", + "performance", + "plugins", + "resolve", + "target", + "watch", + "watchOptions", + "stats", + "mode", + "amd", + "bail", + "cache", + "profile", + "merge", + "parallelism", + "recordsInputPath", + "recordsOutputPath", + "recordsPath", + "resolveLoader" +]); diff --git a/lib/utils/resolve-packages.js b/lib/utils/resolve-packages.js index 00f88bf35ed..5f4f2308706 100644 --- a/lib/utils/resolve-packages.js +++ b/lib/utils/resolve-packages.js @@ -4,18 +4,17 @@ const path = require("path"); const chalk = require("chalk"); const globalPath = require("global-modules"); -const creator = require("../creator/index").creator; +const creator = require("../init/index").creator; const spawnChild = require("./package-manager").spawnChild; -/* -* @function processPromise -* -* Attaches a promise to the installation of the package -* -* @param { Function } child - The function to attach a promise to -* @returns { } promise - Returns a promise to the installation -*/ +/** + * + * Attaches a promise to the installation of the package + * + * @param {Function} child - The function to attach a promise to + * @returns {Promise} promise - Returns a promise to the installation + */ function processPromise(child) { return new Promise(function(resolve, reject) { @@ -28,24 +27,23 @@ function processPromise(child) { }); } -/* -* @function resolvePackages -* -* Resolves and installs the packages, later sending them to @creator -* -* @param { Array } pkg - The dependencies to be installed -* @returns { } creator - Builds -* a webpack configuration through yeoman or throws an error -*/ +/** + * + * Resolves and installs the packages, later sending them to @creator + * + * @param {String[]} pkg - The dependencies to be installed + * @returns {Function|Error} creator - Builds + * a webpack configuration through yeoman or throws an error + */ -module.exports = function resolvePackages(pkg) { +function resolvePackages(pkg) { Error.stackTraceLimit = 30; let packageLocations = []; pkg.forEach(addon => { processPromise(spawnChild(addon)) - .then(() => { + .then(_ => { try { packageLocations.push(path.resolve(globalPath, addon)); } catch (err) { @@ -62,9 +60,14 @@ module.exports = function resolvePackages(pkg) { console.error(chalk.bold.red(err)); process.exitCode = 1; }) - .then(() => { + .then(_ => { if (packageLocations.length === pkg.length) return creator(packageLocations); }); }); +} + +module.exports = { + resolvePackages, + processPromise }; diff --git a/lib/utils/resolve-packages.spec.js b/lib/utils/resolve-packages.spec.js index 6b5b1392770..ec3e49e989e 100644 --- a/lib/utils/resolve-packages.spec.js +++ b/lib/utils/resolve-packages.spec.js @@ -1,6 +1,40 @@ "use strict"; -const getLoc = require("../../__mocks__/inquirer/resolve.mock"); +const path = require("path"); + +function mockPromise(value) { + const isValueAPromise = (value || {}).then; + const mockedPromise = { + then: function(callback) { + return mockPromise(callback(value)); + } + }; + + return isValueAPromise ? value : mockedPromise; +} +function spawnChild(pkg) { + return pkg; +} + +function getLoc(option) { + let packageModule = []; + option.filter(pkg => { + mockPromise(spawnChild(pkg)).then(_ => { + try { + let loc = path.join("..", "..", "node_modules", pkg); + packageModule.push(loc); + } catch (err) { + throw new Error( + "Package wasn't validated correctly.." + "Submit an issue for", + pkg, + "if this persists" + ); + } + }); + return packageModule; + }); + return packageModule; +} describe("resolve-packages", () => { let moduleLoc; @@ -11,13 +45,15 @@ describe("resolve-packages", () => { it("should resolve a location of a published module", () => { moduleLoc = getLoc(["webpack-addons-ylvis"]); - expect(moduleLoc).toEqual(["../../node_modules/webpack-addons-ylvis"]); + expect(moduleLoc).toEqual([ + path.normalize("../../node_modules/webpack-addons-ylvis") + ]); }); it("should be empty if argument is blank", () => { // normally caught before getting resolved moduleLoc = getLoc([" "]); - expect(moduleLoc).toEqual(["../../node_modules/ "]); + expect(moduleLoc).toEqual([path.normalize("../../node_modules/ ")]); }); it("should resolve multiple locations of published modules", () => { @@ -27,8 +63,8 @@ describe("resolve-packages", () => { */ moduleLoc = getLoc(["webpack-addons-ylvis", "webpack-addons-noop"]); expect(moduleLoc).toEqual([ - "../../node_modules/webpack-addons-ylvis", - "../../node_modules/webpack-addons-noop" + path.normalize("../../node_modules/webpack-addons-ylvis"), + path.normalize("../../node_modules/webpack-addons-noop") ]); }); }); diff --git a/lib/creator/utils/run-prettier.js b/lib/utils/run-prettier.js similarity index 57% rename from lib/creator/utils/run-prettier.js rename to lib/utils/run-prettier.js index 5d503eedde0..3b9600cb875 100644 --- a/lib/creator/utils/run-prettier.js +++ b/lib/utils/run-prettier.js @@ -4,18 +4,20 @@ const prettier = require("prettier"); const fs = require("fs"); const chalk = require("chalk"); -/* -* -* Runs prettier and later prints the output configuration -* -* @param { String } outputPath - Path to write the config to -* @param { Node } source - AST to write at the given path -* @returns fs - Writes a file at given location and prints messages accordingly -*/ +/** + * + * Runs prettier and later prints the output configuration + * + * @param {String} outputPath - Path to write the config to + * @param {Node} source - AST to write at the given path + * @param {Function} cb - exectues a callback after execution if supplied + * @returns {Function} Writes a file at given location and prints messages accordingly + */ -module.exports = function runPrettier(outputPath, source) { +module.exports = function runPrettier(outputPath, source, cb) { function validateConfig() { let prettySource; + let error; try { prettySource = prettier.format(source, { singleQuote: true, @@ -31,6 +33,10 @@ module.exports = function runPrettier(outputPath, source) { ) ); prettySource = source; + error = err; + } + if (cb) { + return cb(error); } return fs.writeFileSync(outputPath, prettySource, "utf8"); } diff --git a/lib/utils/validateSchema.js b/lib/utils/validateSchema.js deleted file mode 100644 index 3a20782e68f..00000000000 --- a/lib/utils/validateSchema.js +++ /dev/null @@ -1,67 +0,0 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Gajus Kuizinas @gajus -*/ -"use strict"; - -/* eslint-disable */ -const Ajv = require("ajv"); -const ajv = new Ajv({ - errorDataPath: "configuration", - allErrors: true, - verbose: true -}); -require("ajv-keywords")(ajv, ["instanceof"]); -/* eslint-enable */ - -function validateSchema(schema, options) { - if (Array.isArray(options)) { - const errors = options.map(options => validateObject(schema, options)); - errors.forEach((list, idx) => { - list.forEach(function applyPrefix(err) { - err.dataPath = `[${idx}]${err.dataPath}`; - if (err.children) { - err.children.forEach(applyPrefix); - } - }); - }); - return errors.reduce((arr, items) => { - return arr.concat(items); - }, []); - } else { - return validateObject(schema, options); - } -} - -function validateObject(schema, options) { - const validate = ajv.compile(schema); - const valid = validate(options); - return valid ? [] : filterErrors(validate.errors); -} - -function filterErrors(errors) { - let newErrors = []; - errors.forEach(err => { - const dataPath = err.dataPath; - let children = []; - newErrors = newErrors.filter(oldError => { - if (oldError.dataPath.includes(dataPath)) { - if (oldError.children) { - children = children.concat(oldError.children.slice(0)); - } - oldError.children = undefined; - children.push(oldError); - return false; - } - return true; - }); - if (children.length) { - err.children = children; - } - newErrors.push(err); - }); - - return newErrors; -} - -module.exports = validateSchema; diff --git a/lib/utils/webpackOptionsSchema.js b/lib/utils/webpackOptionsSchema.js deleted file mode 100644 index 7155d5049c8..00000000000 --- a/lib/utils/webpackOptionsSchema.js +++ /dev/null @@ -1,896 +0,0 @@ -module.exports = { - additionalProperties: false, - definitions: { - "common.arrayOfStringOrStringArrayValues": { - items: { - anyOf: [ - { - minLength: 1, - type: "string" - }, - { - items: { - minLength: 1, - type: "string" - }, - type: "array" - } - ] - }, - type: "array" - }, - "common.arrayOfStringValues": { - items: { - minLength: 1, - type: "string" - }, - type: "array" - }, - "common.nonEmptyArrayOfUniqueStringValues": { - items: { - minLength: 1, - type: "string" - }, - minItems: 1, - type: "array", - uniqueItems: true - }, - entry: { - description: "The entry point(s) of the compilation.", - oneOf: [ - { - minProperties: 1, - additionalProperties: { - oneOf: [ - { - description: - "The string is resolved to a module which is loaded upon startup.", - minLength: 1, - type: "string" - }, - { - description: - "All modules are loaded upon startup. The last one is exported.", - $ref: "#/definitions/common.nonEmptyArrayOfUniqueStringValues" - } - ] - }, - description: - "Multiple entry bundles are created. The key is the chunk name. The value can be a string or an array.", - type: "object" - }, - { - description: - "The string is resolved to a module which is loaded upon startup.", - minLength: 1, - type: "string" - }, - { - allOf: [ - { - $ref: "#/definitions/common.nonEmptyArrayOfUniqueStringValues" - } - ], - description: - "All modules are loaded upon startup. The last one is exported." - }, - { - description: "function returning an entry object or a promise.", - instanceof: "Function" - } - ] - }, - externals: { - anyOf: [ - { - description: - "An exact matched dependency becomes external. The same string is used as external dependency.", - type: "string" - }, - { - additionalProperties: { - anyOf: [ - { - type: "string" - }, - { - type: "object" - }, - { - type: "boolean" - } - ] - }, - description: - "If an dependency matches exactly a property of the object, the property value is used as dependency.", - type: "object" - }, - { - description: - "`function(context, request, callback(err, result))` The function is called on each dependency.", - instanceof: "Function" - }, - { - description: "Every matched dependency becomes external.", - instanceof: "RegExp" - }, - { - items: { - $ref: "#/definitions/externals" - }, - type: "array" - } - ], - description: - "Specify dependencies that shouldn't be resolved by webpack, but should become dependencies of the resulting bundle. The kind of the dependency depends on `output.libraryTarget`." - }, - module: { - additionalProperties: false, - description: - "Options affecting the normal modules (`NormalModuleFactory`).", - properties: { - exprContextCritical: { - type: "boolean" - }, - exprContextRecursive: { - type: "boolean" - }, - exprContextRegExp: { - anyOf: [ - { - type: "boolean" - }, - { - instanceof: "RegExp" - } - ] - }, - exprContextRequest: { - type: "string" - }, - loaders: { - allOf: [ - { - $ref: "#/definitions/ruleSet-rules" - } - ], - description: "An array of automatically applied loaders." - }, - noParse: { - description: - "Don't parse files matching. It's matched against the full resolved request.", - anyOf: [ - { - items: { - instanceof: "RegExp" - }, - minItems: 1, - type: "array" - }, - { - instanceof: "RegExp" - } - ] - }, - rules: { - allOf: [ - { - $ref: "#/definitions/ruleSet-rules" - } - ], - description: "An array of rules applied for modules." - }, - unknownContextCritical: { - type: "boolean" - }, - unknownContextRecursive: { - type: "boolean" - }, - unknownContextRegExp: { - anyOf: [ - { - type: "boolean" - }, - { - instanceof: "RegExp" - } - ] - }, - unknownContextRequest: { - type: "string" - }, - unsafeCache: { - anyOf: [ - { - type: "boolean" - }, - { - instanceof: "Function" - } - ] - }, - wrappedContextCritical: { - type: "boolean" - }, - wrappedContextRecursive: { - type: "boolean" - }, - wrappedContextRegExp: { - instanceof: "RegExp" - } - }, - type: "object" - }, - output: { - additionalProperties: false, - description: - "Options affecting the output of the compilation. `output` options tell webpack how to write the compiled files to disk.", - properties: { - auxiliaryComment: { - description: "Add a comment in the UMD wrapper.", - anyOf: [ - { - description: "Append the same comment above each import style.", - type: "string" - }, - { - additionalProperties: false, - description: - "Set explicit comments for `commonjs`, `commonjs2`, `amd`, and `root`.", - properties: { - amd: { - type: "string" - }, - commonjs: { - type: "string" - }, - commonjs2: { - type: "string" - }, - root: { - type: "string" - } - }, - type: "object" - } - ] - }, - chunkFilename: { - description: - "The filename of non-entry chunks as relative path inside the `output.path` directory.", - type: "string" - }, - crossOriginLoading: { - description: "This option enables cross-origin loading of chunks.", - enum: [false, "anonymous", "use-credentials"] - }, - devtoolFallbackModuleFilenameTemplate: { - description: - "Similar to `output.devtoolModuleFilenameTemplate`, but used in the case of duplicate module identifiers.", - anyOf: [ - { - type: "string" - }, - { - instanceof: "Function" - } - ] - }, - devtoolLineToLine: { - description: - "Enable line to line mapped mode for all/specified modules. Line to line mapped mode uses a simple SourceMap where each line of the generated source is mapped to the same line of the original source. It’s a performance optimization. Only use it if your performance need to be better and you are sure that input lines match which generated lines.", - anyOf: [ - { - description: - "`true` enables it for all modules (not recommended)", - type: "boolean" - }, - { - description: - "An object similar to `module.loaders` enables it for specific files.", - properties: { - exclude: { - type: "string" - }, - include: { - type: "string" - }, - test: { - type: "string" - } - }, - type: "object" - } - ] - }, - devtoolModuleFilenameTemplate: { - description: - "Filename template string of function for the sources array in a generated SourceMap.", - anyOf: [ - { - type: "string" - }, - { - instanceof: "Function" - } - ] - }, - filename: { - description: - "Specifies the name of each output file on disk. You must **not** specify an absolute path here! The `output.path` option determines the location on disk the files are written to, filename is used solely for naming the individual files.", - type: "string" - }, - hashDigest: { - minLength: 1, - type: "string" - }, - hashDigestLength: { - minimum: 1, - type: "number" - }, - hashFunction: { - minLength: 1, - type: "string" - }, - hotUpdateChunkFilename: { - description: - "The filename of the Hot Update Chunks. They are inside the output.path directory.", - type: "string" - }, - hotUpdateFunction: { - description: - "The JSONP function used by webpack for async loading of hot update chunks.", - type: "string" - }, - hotUpdateMainFilename: { - description: - "The filename of the Hot Update Main File. It is inside the `output.path` directory.", - type: "string" - }, - jsonpFunction: { - description: - "The JSONP function used by webpack for async loading of chunks.", - type: "string" - }, - library: { - anyOf: [ - { - type: "string" - }, - { - items: { - type: "string" - }, - type: "array" - } - ], - description: - "If set, export the bundle as library. `output.library` is the name." - }, - libraryTarget: { - enum: [ - "var", - "assign", - "this", - "window", - "global", - "commonjs", - "commonjs2", - "commonjs-module", - "amd", - "umd", - "umd2", - "jsonp" - ] - }, - path: { - description: "The output directory as **absolute path** (required).", - type: "string" - }, - pathinfo: { - description: "Include comments with information about the modules.", - type: "boolean" - }, - publicPath: { - description: - "The `publicPath` specifies the public URL address of the output files when referenced in a browser.", - type: "string" - }, - sourceMapFilename: { - description: - "The filename of the SourceMaps for the JavaScript files. They are inside the `output.path` directory.", - type: "string" - }, - sourcePrefix: { - description: - "Prefixes every line of the source in the bundle with this string.", - type: "string" - }, - strictModuleExceptionHandling: { - description: - "Handles exceptions in module loading correctly at a performance cost.", - type: "boolean" - }, - umdNamedDefine: { - description: - "If `output.libraryTarget` is set to umd and `output.library` is set, setting this to true will name the AMD module.", - type: "boolean" - } - }, - type: "object" - }, - resolve: { - additionalProperties: false, - properties: { - alias: { - anyOf: [ - { - additionalProperties: { - type: "string" - }, - type: "object" - }, - { - items: { - additionalProperties: false, - properties: { - alias: { - type: "string" - }, - name: { - type: "string" - }, - onlyModule: { - type: "boolean" - } - }, - type: "object" - }, - type: "array" - } - ] - }, - aliasFields: { - $ref: "#/definitions/common.arrayOfStringOrStringArrayValues" - }, - cachePredicate: { - instanceof: "Function" - }, - descriptionFiles: { - $ref: "#/definitions/common.arrayOfStringValues" - }, - enforceExtension: { - type: "boolean" - }, - enforceModuleExtension: { - type: "boolean" - }, - extensions: { - $ref: "#/definitions/common.arrayOfStringValues" - }, - fileSystem: {}, - mainFields: { - $ref: "#/definitions/common.arrayOfStringOrStringArrayValues" - }, - mainFiles: { - $ref: "#/definitions/common.arrayOfStringValues" - }, - moduleExtensions: { - $ref: "#/definitions/common.arrayOfStringValues" - }, - modules: { - $ref: "#/definitions/common.arrayOfStringValues" - }, - plugins: { - type: "array" - }, - resolver: {}, - symlinks: { - type: "boolean" - }, - unsafeCache: { - anyOf: [ - { - type: "boolean" - }, - { - additionalProperties: true, - type: "object" - } - ] - }, - useSyncFileSystemCalls: { - type: "boolean" - } - }, - type: "object" - }, - "ruleSet-condition": { - anyOf: [ - { - instanceof: "RegExp" - }, - { - minLength: 1, - type: "string" - }, - { - instanceof: "Function" - }, - { - $ref: "#/definitions/ruleSet-conditions" - }, - { - additionalProperties: false, - properties: { - and: { - $ref: "#/definitions/ruleSet-conditions" - }, - exclude: { - $ref: "#/definitions/ruleSet-condition" - }, - include: { - $ref: "#/definitions/ruleSet-condition" - }, - not: { - $ref: "#/definitions/ruleSet-conditions" - }, - or: { - $ref: "#/definitions/ruleSet-conditions" - }, - test: { - $ref: "#/definitions/ruleSet-condition" - } - }, - type: "object" - } - ] - }, - "ruleSet-conditions": { - items: { - $ref: "#/definitions/ruleSet-condition" - }, - type: "array" - }, - "ruleSet-loader": { - minLength: 1, - type: "string" - }, - "ruleSet-query": { - anyOf: [ - { - type: "object" - }, - { - type: "string" - } - ] - }, - "ruleSet-rule": { - additionalProperties: false, - properties: { - enforce: { - enum: ["pre", "post"] - }, - exclude: { - $ref: "#/definitions/ruleSet-condition" - }, - include: { - $ref: "#/definitions/ruleSet-condition" - }, - issuer: { - $ref: "#/definitions/ruleSet-condition" - }, - loader: { - anyOf: [ - { - $ref: "#/definitions/ruleSet-loader" - }, - { - $ref: "#/definitions/ruleSet-use" - } - ] - }, - loaders: { - $ref: "#/definitions/ruleSet-use" - }, - oneOf: { - $ref: "#/definitions/ruleSet-rules" - }, - options: { - $ref: "#/definitions/ruleSet-query" - }, - parser: { - additionalProperties: true, - type: "object" - }, - query: { - $ref: "#/definitions/ruleSet-query" - }, - resource: { - $ref: "#/definitions/ruleSet-condition" - }, - resourceQuery: { - $ref: "#/definitions/ruleSet-condition" - }, - rules: { - $ref: "#/definitions/ruleSet-rules" - }, - test: { - $ref: "#/definitions/ruleSet-condition" - }, - use: { - $ref: "#/definitions/ruleSet-use" - } - }, - type: "object" - }, - "ruleSet-rules": { - items: { - $ref: "#/definitions/ruleSet-rule" - }, - type: "array" - }, - "ruleSet-use": { - anyOf: [ - { - $ref: "#/definitions/ruleSet-use-item" - }, - { - instanceof: "Function" - }, - { - items: { - $ref: "#/definitions/ruleSet-use-item" - }, - type: "array" - } - ] - }, - "ruleSet-use-item": { - anyOf: [ - { - $ref: "#/definitions/ruleSet-loader" - }, - { - instanceof: "Function" - }, - { - additionalProperties: false, - properties: { - loader: { - $ref: "#/definitions/ruleSet-loader" - }, - options: { - $ref: "#/definitions/ruleSet-query" - }, - query: { - $ref: "#/definitions/ruleSet-query" - } - }, - type: "object" - } - ] - } - }, - properties: { - amd: { - description: "Set the value of `require.amd` and `define.amd`." - }, - bail: { - description: - "Report the first error as a hard error instead of tolerating it.", - type: "boolean" - }, - cache: { - description: - "Cache generated modules and chunks to improve performance for multiple incremental builds.", - anyOf: [ - { - description: "You can pass `false` to disable it.", - type: "boolean" - }, - { - description: - "You can pass an object to enable it and let webpack use the passed object as cache. This way you can share the cache object between multiple compiler calls.", - type: "object" - } - ] - }, - context: { - description: - "The base directory (absolute path!) for resolving the `entry` option. If `output.pathinfo` is set, the included pathinfo is shortened to this directory.", - type: "string" - }, - dependencies: { - description: "References to other configurations to depend on.", - items: { - type: "string" - }, - type: "array" - }, - devServer: { - type: "object" - }, - devtool: { - description: "A developer tool to enhance debugging.", - anyOf: [ - { - type: "string" - }, - { - enum: [false] - } - ] - }, - entry: { - $ref: "#/definitions/entry" - }, - externals: { - $ref: "#/definitions/externals" - }, - loader: { - description: "Custom values available in the loader context.", - type: "object" - }, - module: { - $ref: "#/definitions/module" - }, - name: { - description: - "Name of the configuration. Used when loading multiple configurations.", - type: "string" - }, - node: { - description: "Include polyfills or mocks for various node stuff.", - additionalProperties: { - enum: [false, true, "mock", "empty"] - }, - properties: { - Buffer: { - enum: [false, true, "mock"] - }, - __dirname: { - enum: [false, true, "mock"] - }, - __filename: { - enum: [false, true, "mock"] - }, - console: { - enum: [false, true, "mock"] - }, - global: { - type: "boolean" - }, - process: { - enum: [false, true, "mock"] - } - }, - type: "object" - }, - output: { - $ref: "#/definitions/output" - }, - performance: { - description: "Configuration for web performance recommendations.", - anyOf: [ - { - enum: [false] - }, - { - additionalProperties: false, - properties: { - assetFilter: { - description: "Filter function to select assets that are checked", - instanceof: "Function" - }, - hints: { - description: - "Sets the format of the hints: warnings, errors or nothing at all", - enum: [false, "warning", "error"] - }, - maxEntrypointSize: { - description: "Total size of an entry point (in bytes)", - type: "number" - }, - maxAssetSize: { - description: - "Filesize limit (in bytes) when exceeded, that webpack will provide performance hints", - type: "number" - } - }, - type: "object" - } - ] - }, - plugins: { - description: "Add additional plugins to the compiler.", - type: "array" - }, - profile: { - description: "Capture timing information for each module.", - type: "boolean" - }, - recordsInputPath: { - description: "Store compiler state to a json file.", - type: "string" - }, - recordsOutputPath: { - description: "Load compiler state from a json file.", - type: "string" - }, - recordsPath: { - description: - "Store/Load compiler state from/to a json file. This will result in persistent ids of modules and chunks. An absolute path is expected. `recordsPath` is used for `recordsInputPath` and `recordsOutputPath` if they left undefined.", - type: "string" - }, - resolve: { - $ref: "#/definitions/resolve" - }, - resolveLoader: { - $ref: "#/definitions/resolve" - }, - stats: { - description: "Used by the webpack CLI program to pass stats options.", - anyOf: [ - { - type: "object" - }, - { - type: "boolean" - }, - { - enum: ["none", "errors-only", "minimal", "normal", "verbose"] - } - ] - }, - target: { - anyOf: [ - { - enum: [ - "web", - "webworker", - "node", - "async-node", - "node-webkit", - "atom", - "electron", - "electron-main", - "electron-renderer" - ] - }, - { - instanceof: "Function" - } - ] - }, - watch: { - description: "Enter watch mode, which rebuilds on file change.", - type: "boolean" - }, - watchOptions: { - properties: { - aggregateTimeout: { - description: - "Delay the rebuilt after the first change. Value is a time in ms.", - type: "number" - }, - poll: { - anyOf: [ - { - description: "`true`: use polling.", - type: "boolean" - }, - { - description: "`number`: use polling with specified interval.", - type: "number" - } - ] - } - }, - type: "object" - } - }, - required: ["entry"], - type: "object" -}; diff --git a/open-bot.yml b/open-bot.yml new file mode 100644 index 00000000000..35a5399eac2 --- /dev/null +++ b/open-bot.yml @@ -0,0 +1,344 @@ +bot: "webpack-bot" +rules: + +# Add ci-ok, ci-not-ok labels depending on travis status +# comment to point the user to the results +# comment in case of success +- filters: + open: true + pull_request: + mergeable: true + status_1: + context: "continuous-integration/travis-ci/pr" + ensure_1: + value: "{{status_1.state}}" + equals: "success" + actions: + label: + add: "PR: CI-ok" + remove: "PR: CI-not-ok" + comment: + identifier: "ci-result" + message: |- + Thank you for your pull request! The most important CI builds succeeded, we’ll review the pull request soon. +- filters: + open: true + pull_request: + mergeable: true + status_1: + context: "continuous-integration/travis-ci/pr" + any: + ensure_1: + value: "{{status_1.state}}" + equals: "failure" + actions: + label: + add: "PR: CI-not-ok" + remove: "PR: CI-ok" + set: + id: report_ci + value: yep + + + +# Report specific error message if jest tests fails +- filters: + ensure: + value: "{{report_ci}}" + equals: yep + commit: true + status: + context: "continuous-integration/travis-ci/pr" + travis_job: + state: "failed" + allow_failure: false + config: + env: JOB_PART=integration + fetch: travis_job.log + string_cleanup: + id: logResult + value: "{{{fetch}}}" + remove: + - "^[\\s\\S]+?npm run travis:\\$JOB_PART\n*" + - "npm ERR!.*\n" + - "\n*=============================================================================\n[\\s\\S]*" + actions: + comment: + identifier: "ci-result" + message: |- + @{{commit.author.login}} Please review the following output log for errors: + + ``` text + {{{logResult}}} + ``` + + See [complete report here]({{status.target_url}}). + set: + id: report_ci + value: nope + + + +# Report specific error message if linting fails +- filters: + ensure: + value: "{{report_ci}}" + equals: yep + commit: true + status: + context: "continuous-integration/travis-ci/pr" + travis_job: + state: "failed" + config: + env: JOB_PART=lint + fetch: travis_job.log + string_cleanup: + id: logResult + value: "{{{fetch}}}" + remove: + - "^[\\s\\S]+?npm run travis:\\$JOB_PART\n*" + - "npm ERR!.*\n" + - "\n*The command \"npm run travis:\\$JOB_PART\" exited [\\s\\S]*" + actions: + comment: + identifier: "ci-result" + message: |- + @{{commit.author.login}} The tests look fine, but there are code style issue in your Pull Request. Please review the following: + + ``` text + {{{logResult}}} + ``` + + See [complete report here]({{status.target_url}}). + set: + id: report_ci + value: nope + + + + +# Report a general error message +- filters: + ensure: + value: "{{report_ci}}" + equals: yep + commit: true + status_1: + context: "continuous-integration/travis-ci/pr" + actions: + comment: + identifier: "ci-result" + message: |- + @{{commit.author.login}} The most important CI builds failed. This way your PR can't be merged. + + Please take a look at the CI results from [travis]({{status_1.target_url}}) ({{status_1.state}}) and fix these issues. + + +# add conflict label to pull requests with conflict +# on conflict all result labels are removed +- filters: + open: true + pull_request: + mergeable: false + actions: + label: + add: "PR: conflict" + remove: + - "PR: tests-needed" + - "PR: CI-ok" + - "PR: CI-not-ok" +- filters: + open: true + pull_request: + mergeable: true + actions: + label: + remove: "PR: conflict" + + + +# add unreviewed, reviewed, review-outdated labels +# comment to ping reviewer +# comment on new PR +- filters: + open: true + in_order: + commit: true + review: + state: APPROVED|CHANGES_REQUESTED + ensure: + value: "{{review.state}}" + equals: APPROVED + actions: + label: + add: "PR: reviewed-approved" + remove: + - "PR: review-outdated" + - "PR: unreviewed" + - "PR: reviewed" +- filters: + open: true + in_order: + commit: true + review: + state: APPROVED|CHANGES_REQUESTED + ensure: + value: "{{review.state}}" + equals: CHANGES_REQUESTED + actions: + label: + add: "PR: reviewed-changes-requested" + remove: + - "PR: review-outdated" + - "PR: unreviewed" + - "PR: reviewed" +- filters: + open: true + in_order: + review: + state: APPROVED|CHANGES_REQUESTED + commit: true + not: + label: "review-outdated" + ensure: + value: "{{commit.author.login}}" + notEquals: "{{review.user.login}}" + actions: + label: + add: "PR: review-outdated" + remove: + - "PR: reviewed-approved" + - "PR: reviewed-changes-requested" + - "PR: unreviewed" + - "PR: reviewed" + comment: + identifier: "review-outdated" + message: |- + @{{commit.author.login}} Thanks for your update. + + I labeled the Pull Request so reviewers will review it again. + + @{{review.user.login}} Please review the new changes. +- filters: + open: true + commit: true + not: + review: + state: APPROVED|CHANGES_REQUESTED + actions: + label: "PR: unreviewed" + + + +# add small label to small pull requests +- filters: + open: true + pull_request: + additions: "<= 10" + deletions: "<= 10" + changed_files: "<= 2" + actions: + label: "PR: small" + + + +# add non-master label to pull request to other branch +- filters: + open: true + age: + minimum: 1d + maximum: 1w + pull_request: + head_ref: "^master$" + permission: "read|none" + actions: + comment: + identifier: "head-master" + edit: true + message: |- + Hi @{{pull_request.user.login}}. + + Just a little hint from a friendly bot about the best practice when submitting pull requests: + + > Don't submit pull request from your own `master` branch. It's recommended to create a feature branch for the PR. + + *You don't have to change it for this PR, just make sure to follow this hint the next time you submit a PR.* + + +# Move issue task +- filters: + open: true + comment: "\\s*@webpack-bot\\s+move\\s+(?:to\\s+)?([a-z0-9_\\-\\.]+/[a-z0-9_\\-\\.]+)\\s*([\\s\\S]*)$" + not: + comment_1: + matching: "moved\\-by\\-bot" + author: "." + permission: + user: "{{comment.actor.login}}" + actions: + new_issue: + target: "{{{comment_match.[1]}}}" + body: |- + {{{issue.body}}} + + --- + + This issue was moved from {{owner}}/{{repo}}#{{issue.number}} by @{{comment.actor.login}}. Orginal issue was by @{{issue.user.login}}. + + {{{comment_match.[2]}}} + comment: + identifier: moved-by-bot + message: |- + I've moved it to {{comment_match.[1]}}. + close: true + + +# mark inactive issues with inactive label +# close them when no activity after warning +- filters: + issue: true + open: true + not: + label: inactive + ensure: + value: "{{issue.reactions.[+1]}}" + range: "< 10" + last_action_age: 26w # half a year + actions: + comment: + identifer: inactive-warning + message: |- + **This issue had no activity for at least half a year.** + + It's subject to automatic issue closing if there is no activity in the next 15 days. + label: inactive +- filters: + open: true + label: inactive + last_action_age: + maximum: 26w # half a year + actions: + label: + remove: + - inactive +- filters: + open: true + label: inactive + last_action_age: + minimum: 15d + includeBotActions: true + actions: + close: true + comment: + identifer: inactive-close + message: |- + Issue was closed because of inactivity. + + If you think this is still a valid issue, please file a new issue with additional information. + + +# Check issues every week +- filters: + open: true + actions: + schedule: 1d diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 85b37f958f2..00000000000 --- a/package-lock.json +++ /dev/null @@ -1,8885 +0,0 @@ -{ - "name": "webpack-cli", - "version": "1.5.3", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "dev": true, - "requires": { - "acorn": "4.0.13" - } - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true, - "requires": { - "acorn": "4.0.13" - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", - "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", - "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" - } - }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", - "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "ast-types": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", - "integrity": "sha1-LMGZedFcZVEIv1ZTI7jn7jh1H2s=" - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.11.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" - }, - "dependencies": { - "fs-readdir-recursive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", - "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-eslint": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", - "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0" - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-20.0.3.tgz", - "integrity": "sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "20.0.3" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-istanbul": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", - "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.8.0", - "test-exclude": "4.1.1" - } - }, - "babel-plugin-jest-hoist": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz", - "integrity": "sha1-r+3IU70/jcNUjqZx++adA8wsF2c=", - "dev": true - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=" - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=" - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=" - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=" - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "requires": { - "babel-plugin-syntax-flow": "6.18.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "requires": { - "babel-plugin-transform-flow-strip-types": "6.22.0" - } - }, - "babel-preset-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz", - "integrity": "sha1-y6yq3stdaJyh4d4TYOv8ZoYsF4o=", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "20.0.3" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", - "dev": true - }, - "binaryextensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.0.0.tgz", - "integrity": "sha1-5ZfRp6ajVYotHHJBoWyZll5qpA8=" - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "boolify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boolify/-/boolify-1.0.1.tgz", - "integrity": "sha1-tcCeF8rNET0Rt7s+04TMASmU2Gs=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true, - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true, - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "1.0.6" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "0.4.0" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.1.tgz", - "integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", - "mississippi": "1.3.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.0.0", - "unique-filename": "1.1.0", - "y18n": "3.2.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "camelcase-keys": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.1.0.tgz", - "integrity": "sha1-IU00jMVFfzkxaiwxzD43JGMl5z8=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "map-obj": "2.0.0", - "quick-lru": "1.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - } - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "requires": { - "color-convert": "1.9.0" - } - } - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true - }, - "ci-info": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", - "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "2.0.0" - } - }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=" - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "requires": { - "slice-ansi": "0.0.4", - "string-width": "1.0.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - }, - "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "requires": { - "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "common-tags": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", - "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-type-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.1.tgz", - "integrity": "sha1-w+VpiMU8ZRJ/tG1AMqOpACRv3JQ=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-1.1.0.tgz", - "integrity": "sha1-DeoPmATv37kp+7GxiOJVU+oFPTc=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "js-yaml": "3.10.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "require-from-string": "1.2.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true, - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5", - "randomfill": "1.0.3" - } - }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.2" - } - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-fns": { - "version": "1.28.5", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.28.5.tgz", - "integrity": "sha1-JXz8RdMi30XvVlhmWWfuhBzXP68=" - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "1.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "requires": { - "repeating": "2.0.1" - } - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" - }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.5" - } - }, - "dlv": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.0.tgz", - "integrity": "sha1-/uGnxD9jvnXz9nnoUmLaXxAnZKc=", - "dev": true - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "duplexify": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", - "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "editions": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.3.tgz", - "integrity": "sha1-CQcQG92iD6w8vjNMJ8vQaI3Jmls=" - }, - "ejs": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", - "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "requires": { - "prr": "0.0.0" - } - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "requires": { - "string-template": "0.2.1", - "xtend": "4.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", - "dev": true, - "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - } - } - }, - "eslint": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.8.0.tgz", - "integrity": "sha1-Ip7w41Tg5h2DfHqA/fuoJeGZgV4=", - "dev": true, - "requires": { - "ajv": "5.2.3", - "babel-code-frame": "6.26.0", - "chalk": "2.1.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.1", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.0.0", - "js-yaml": "3.10.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "4.0.2", - "text-table": "0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "2.38.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.38.0.tgz", - "integrity": "sha512-bxde09/khzLyKLO1Mu4Mm2MpHURG2Ml2W5YbgGnD8sNJmukDT8MWARvo4ftIQ3HEnIWcZqNWAp5uF2dmrg9kMw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "eslint-plugin-node": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.0.tgz", - "integrity": "sha512-N9FLFwknT5LhRhjz1lmHguNss/MCwkrLCS4CjqqTZZTJaUhLRfDNK3zxSHL/Il3Aa0Mw+xY3T1gtsJrUNoJy8Q==", - "dev": true, - "requires": { - "ignore": "3.3.5", - "minimatch": "3.0.4", - "resolve": "1.4.0", - "semver": "5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" - } - }, - "espree": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", - "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", - "dev": true, - "requires": { - "acorn": "5.1.2", - "acorn-jsx": "3.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", - "dev": true - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", - "dev": true, - "requires": { - "merge": "1.2.0" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "1.0.1" - } - }, - "expect": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-21.2.1.tgz", - "integrity": "sha512-orfQQqFRTX0jH7znRIGi8ZMR8kTNpXklTTz8+HGTpmTKZo3Occ6JNB5FXMb8cRuiiC/GyDqsr30zUa66ACYlYw==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "21.2.1", - "jest-get-type": "21.2.0", - "jest-matcher-utils": "21.2.1", - "jest-message-util": "21.2.1", - "jest-regex-util": "21.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "external-editor": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", - "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", - "requires": { - "iconv-lite": "0.4.19", - "jschardet": "1.5.1", - "tmp": "0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", - "dev": true, - "requires": { - "commondir": "1.0.1", - "make-dir": "1.1.0", - "pkg-dir": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - }, - "first-chunk-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", - "requires": { - "readable-stream": "2.3.3" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "flow-bin": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.49.1.tgz", - "integrity": "sha1-yeRWsxc6dTWk/68olWNSxju44+k=", - "dev": true - }, - "flow-parser": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.61.0.tgz", - "integrity": "sha1-V9HTO7yPsbk0GYRGSsAy4FTuEIQ=" - }, - "flow-remove-types": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-1.2.1.tgz", - "integrity": "sha1-WOJhv4uEK9I0yGyvuYKhITr/Dts=", - "dev": true, - "requires": { - "babylon": "6.18.0", - "vlq": "0.2.3" - } - }, - "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-own-enumerable-property-symbols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", - "integrity": "sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", - "requires": { - "got": "7.1.0", - "is-plain-obj": "1.1.0" - } - }, - "github-username": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", - "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", - "requires": { - "gh-got": "6.0.0" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "2.0.1" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.1", - "resolve-dir": "1.0.1" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "1.0.1", - "which": "1.3.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.0", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "grouped-queue": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", - "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", - "requires": { - "lodash": "4.17.4" - } - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.2.3", - "har-schema": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "has-symbol-support-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", - "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.1" - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.0.2" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" - }, - "html-encoding-sniffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz", - "integrity": "sha1-eb96eF6klf5mFl5zQVPzY/9UN9o=", - "dev": true, - "requires": { - "whatwg-encoding": "1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "husky": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", - "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", - "dev": true, - "requires": { - "is-ci": "1.0.10", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", - "dev": true - } - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.0.5", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "interpret": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", - "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=" - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.10.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "dev": true, - "requires": { - "ci-info": "1.1.1" - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-scoped": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", - "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", - "requires": { - "scoped-regex": "1.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-api": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", - "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", - "dev": true, - "requires": { - "async": "2.5.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-report": "1.1.1", - "istanbul-lib-source-maps": "1.2.1", - "istanbul-reports": "1.1.2", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - }, - "dependencies": { - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - } - } - }, - "istanbul-lib-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", - "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", - "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==", - "dev": true, - "requires": { - "append-transform": "0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", - "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", - "dev": true, - "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" - } - }, - "istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", - "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", - "dev": true, - "requires": { - "debug": "2.6.9", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", - "dev": true, - "requires": { - "handlebars": "4.0.10" - } - }, - "istextorbinary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", - "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", - "requires": { - "binaryextensions": "2.0.0", - "editions": "1.3.3", - "textextensions": "2.1.0" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "jest": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-21.2.1.tgz", - "integrity": "sha512-mXN0ppPvWYoIcC+R+ctKxAJ28xkt/Z5Js875padm4GbgUn6baeR5N4Ng6LjatIRpUQDZVJABT7Y4gucFjPryfw==", - "dev": true, - "requires": { - "jest-cli": "21.2.1" - } - }, - "jest-changed-files": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-21.2.0.tgz", - "integrity": "sha512-+lCNP1IZLwN1NOIvBcV5zEL6GENK6TXrDj4UxWIeLvIsIDa+gf6J7hkqsW2qVVt/wvH65rVvcPwqXdps5eclTQ==", - "dev": true, - "requires": { - "throat": "4.1.0" - } - }, - "jest-cli": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-21.2.1.tgz", - "integrity": "sha512-T1BzrbFxDIW/LLYQqVfo94y/hhaj1NzVQkZgBumAC+sxbjMROI7VkihOdxNR758iYbQykL2ZOWUBurFgkQrzdg==", - "dev": true, - "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.1.0", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "is-ci": "1.0.10", - "istanbul-api": "1.1.14", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-source-maps": "1.2.1", - "jest-changed-files": "21.2.0", - "jest-config": "21.2.1", - "jest-environment-jsdom": "21.2.1", - "jest-haste-map": "21.2.0", - "jest-message-util": "21.2.1", - "jest-regex-util": "21.2.0", - "jest-resolve-dependencies": "21.2.0", - "jest-runner": "21.2.1", - "jest-runtime": "21.2.1", - "jest-snapshot": "21.2.1", - "jest-util": "21.2.1", - "micromatch": "2.3.11", - "node-notifier": "5.1.2", - "pify": "3.0.0", - "slash": "1.0.0", - "string-length": "2.0.0", - "strip-ansi": "4.0.0", - "which": "1.3.0", - "worker-farm": "1.5.0", - "yargs": "9.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "jest-config": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-21.2.1.tgz", - "integrity": "sha512-fJru5HtlD/5l2o25eY9xT0doK3t2dlglrqoGpbktduyoI0T5CwuB++2YfoNZCrgZipTwPuAGonYv0q7+8yDc/A==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "glob": "7.1.2", - "jest-environment-jsdom": "21.2.1", - "jest-environment-node": "21.2.1", - "jest-get-type": "21.2.0", - "jest-jasmine2": "21.2.1", - "jest-regex-util": "21.2.0", - "jest-resolve": "21.2.0", - "jest-util": "21.2.1", - "jest-validate": "21.2.1", - "pretty-format": "21.2.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "jest-diff": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-21.2.1.tgz", - "integrity": "sha512-E5fu6r7PvvPr5qAWE1RaUwIh/k6Zx/3OOkZ4rk5dBJkEWRrUuSgbMt2EO8IUTPTd6DOqU3LW6uTIwX5FRvXoFA==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "diff": "3.3.1", - "jest-get-type": "21.2.0", - "pretty-format": "21.2.1" - } - }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "jest-environment-jsdom": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz", - "integrity": "sha512-mecaeNh0eWmzNrUNMWARysc0E9R96UPBamNiOCYL28k7mksb1d0q6DD38WKP7ABffjnXyUWJPVaWRgUOivwXwg==", - "dev": true, - "requires": { - "jest-mock": "21.2.0", - "jest-util": "21.2.1", - "jsdom": "9.12.0" - } - }, - "jest-environment-node": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-21.2.1.tgz", - "integrity": "sha512-R211867wx9mVBVHzrjGRGTy5cd05K7eqzQl/WyZixR/VkJ4FayS8qkKXZyYnwZi6Rxo6WEV81cDbiUx/GfuLNw==", - "dev": true, - "requires": { - "jest-mock": "21.2.0", - "jest-util": "21.2.1" - } - }, - "jest-get-type": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-21.2.0.tgz", - "integrity": "sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q==", - "dev": true - }, - "jest-haste-map": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-21.2.0.tgz", - "integrity": "sha512-5LhsY/loPH7wwOFRMs+PT4aIAORJ2qwgbpMFlbWbxfN0bk3ZCwxJ530vrbSiTstMkYLao6JwBkLhCJ5XbY7ZHw==", - "dev": true, - "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.11", - "jest-docblock": "21.2.0", - "micromatch": "2.3.11", - "sane": "2.2.0", - "worker-farm": "1.5.0" - } - }, - "jest-jasmine2": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz", - "integrity": "sha512-lw8FXXIEekD+jYNlStfgNsUHpfMWhWWCgHV7n0B7mA/vendH7vBFs8xybjQsDzJSduptBZJHqQX9SMssya9+3A==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "expect": "21.2.1", - "graceful-fs": "4.1.11", - "jest-diff": "21.2.1", - "jest-matcher-utils": "21.2.1", - "jest-message-util": "21.2.1", - "jest-snapshot": "21.2.1", - "p-cancelable": "0.3.0" - } - }, - "jest-matcher-utils": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz", - "integrity": "sha512-kn56My+sekD43dwQPrXBl9Zn9tAqwoy25xxe7/iY4u+mG8P3ALj5IK7MLHZ4Mi3xW7uWVCjGY8cm4PqgbsqMCg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "jest-get-type": "21.2.0", - "pretty-format": "21.2.1" - } - }, - "jest-message-util": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-21.2.1.tgz", - "integrity": "sha512-EbC1X2n0t9IdeMECJn2BOg7buOGivCvVNjqKMXTzQOu7uIfLml+keUfCALDh8o4rbtndIeyGU8/BKfoTr/LVDQ==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "micromatch": "2.3.11", - "slash": "1.0.0" - } - }, - "jest-mock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-21.2.0.tgz", - "integrity": "sha512-aZDfyVf0LEoABWiY6N0d+O963dUQSyUa4qgzurHR3TBDPen0YxKCJ6l2i7lQGh1tVdsuvdrCZ4qPj+A7PievCw==", - "dev": true - }, - "jest-regex-util": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-21.2.0.tgz", - "integrity": "sha512-BKQ1F83EQy0d9Jen/mcVX7D+lUt2tthhK/2gDWRgLDJRNOdRgSp1iVqFxP8EN1ARuypvDflRfPzYT8fQnoBQFQ==", - "dev": true - }, - "jest-resolve": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-21.2.0.tgz", - "integrity": "sha512-vefQ/Lr+VdNvHUZFQXWtOqHX3HEdOc2MtSahBO89qXywEbUxGPB9ZLP9+BHinkxb60UT2Q/tTDOS6rYc6Mwigw==", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "chalk": "2.1.0", - "is-builtin-module": "1.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz", - "integrity": "sha512-ok8ybRFU5ScaAcfufIQrCbdNJSRZ85mkxJ1EhUp8Bhav1W1/jv/rl1Q6QoVQHObNxmKnbHVKrfLZbCbOsXQ+bQ==", - "dev": true, - "requires": { - "jest-regex-util": "21.2.0" - } - }, - "jest-runner": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-21.2.1.tgz", - "integrity": "sha512-Anb72BOQlHqF/zETqZ2K20dbYsnqW/nZO7jV8BYENl+3c44JhMrA8zd1lt52+N7ErnsQMd2HHKiVwN9GYSXmrg==", - "dev": true, - "requires": { - "jest-config": "21.2.1", - "jest-docblock": "21.2.0", - "jest-haste-map": "21.2.0", - "jest-jasmine2": "21.2.1", - "jest-message-util": "21.2.1", - "jest-runtime": "21.2.1", - "jest-util": "21.2.1", - "pify": "3.0.0", - "throat": "4.1.0", - "worker-farm": "1.5.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "jest-runtime": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-21.2.1.tgz", - "integrity": "sha512-6omlpA3+NSE+rHwD0PQjNEjZeb2z+oRmuehMfM1tWQVum+E0WV3pFt26Am0DUfQkkPyTABvxITRjCUclYgSOsA==", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-jest": "21.2.0", - "babel-plugin-istanbul": "4.1.5", - "chalk": "2.1.0", - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "jest-config": "21.2.1", - "jest-haste-map": "21.2.0", - "jest-regex-util": "21.2.0", - "jest-resolve": "21.2.0", - "jest-util": "21.2.1", - "json-stable-stringify": "1.0.1", - "micromatch": "2.3.11", - "slash": "1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "2.3.0", - "yargs": "9.0.1" - }, - "dependencies": { - "babel-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-21.2.0.tgz", - "integrity": "sha512-O0W2qLoWu1QOoOGgxiR2JID4O6WSpxPiQanrkyi9SSlM0PJ60Ptzlck47lhtnr9YZO3zYOsxHwnyeWJ6AffoBQ==", - "dev": true, - "requires": { - "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "21.2.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz", - "integrity": "sha512-yi5QuiVyyvhBUDLP4ButAnhYzkdrUwWDtvUJv71hjH3fclhnZg4HkDeqaitcR2dZZx/E67kGkRcPVjtVu+SJfQ==", - "dev": true - }, - "babel-preset-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz", - "integrity": "sha512-hm9cBnr2h3J7yXoTtAVV0zg+3vg0Q/gT2GYuzlreTU0EPkJRtlNgKJJ3tBKEn0+VjAi3JykV6xCJkuUYttEEfA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "21.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" - } - } - } - }, - "jest-snapshot": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-21.2.1.tgz", - "integrity": "sha512-bpaeBnDpdqaRTzN8tWg0DqOTo2DvD3StOemxn67CUd1p1Po+BUpvePAp44jdJ7Pxcjfg+42o4NHw1SxdCA2rvg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "jest-diff": "21.2.1", - "jest-matcher-utils": "21.2.1", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "21.2.1" - } - }, - "jest-util": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-21.2.1.tgz", - "integrity": "sha512-r20W91rmHY3fnCoO7aOAlyfC51x2yeV3xF+prGsJAUsYhKeV670ZB8NO88Lwm7ASu8SdH0S+U+eFf498kjhA4g==", - "dev": true, - "requires": { - "callsites": "2.0.0", - "chalk": "2.1.0", - "graceful-fs": "4.1.11", - "jest-message-util": "21.2.1", - "jest-mock": "21.2.0", - "jest-validate": "21.2.1", - "mkdirp": "0.5.1" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "jest-validate": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-21.2.1.tgz", - "integrity": "sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg==", - "dev": true, - "requires": { - "chalk": "2.1.0", - "jest-get-type": "21.2.0", - "leven": "2.1.0", - "pretty-format": "21.2.1" - }, - "dependencies": { - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - } - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jschardet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", - "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==" - }, - "jscodeshift": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.0.tgz", - "integrity": "sha512-3ssNOmorVGMCpfwb5I82MSSbqSR+MMs+pQAf/Mvfmqrx17QbiYstSjsOlP1/PBul05917O9FSdzY11J4DMjAkQ==", - "requires": { - "async": "1.5.2", - "babel-plugin-transform-flow-strip-types": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-1": "6.24.1", - "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.1.2", - "flow-parser": "0.61.0", - "lodash": "4.17.4", - "micromatch": "2.3.11", - "node-dir": "0.1.8", - "nomnom": "1.8.1", - "recast": "0.12.9", - "temp": "0.8.3", - "write-file-atomic": "1.3.4" - }, - "dependencies": { - "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==" - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", - "requires": { - "ast-types": "0.10.1", - "core-js": "2.5.1", - "esprima": "4.0.0", - "private": "0.1.7", - "source-map": "0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "dev": true, - "requires": { - "abab": "1.0.4", - "acorn": "4.0.13", - "acorn-globals": "3.1.0", - "array-equal": "1.0.0", - "content-type-parser": "1.0.1", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.1", - "nwmatcher": "1.4.2", - "parse5": "1.5.1", - "request": "2.83.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.1", - "whatwg-url": "4.8.0", - "xml-name-validator": "2.0.1" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lint-staged": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-4.2.3.tgz", - "integrity": "sha512-Ks1vMyVpp3ldeFDN9sIcHcFDh0v3X6Y6LOdT0Wl86/BSDM2R8PVcuFODkh0Dav7Ni/asUPKONfXRWZM9YO85IQ==", - "dev": true, - "requires": { - "app-root-path": "2.0.1", - "chalk": "2.1.0", - "cosmiconfig": "1.1.0", - "execa": "0.8.0", - "is-glob": "4.0.0", - "jest-validate": "21.2.1", - "listr": "0.12.0", - "lodash": "4.17.4", - "log-symbols": "2.1.0", - "minimatch": "3.0.4", - "npm-which": "3.0.1", - "p-map": "1.2.0", - "staged-git-files": "0.0.4", - "stringify-object": "3.2.1" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "log-symbols": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", - "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", - "dev": true, - "requires": { - "chalk": "2.1.0" - } - } - } - }, - "listr": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.12.0.tgz", - "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", - "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.2.0", - "listr-verbose-renderer": "0.4.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.4.3", - "stream-to-observable": "0.1.0", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - }, - "listr-update-renderer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz", - "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", - "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz", - "integrity": "sha1-RNwBuww0oDxXIVTU0Izemx3FYg8=", - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.28.5", - "figures": "1.7.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", - "dev": true - }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz", - "integrity": "sha1-aYhLoUSsM/5plzemCG3v+t0PicU=", - "dev": true - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - } - } - }, - "loglevel": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.0.tgz", - "integrity": "sha512-OQ2jhWI5G2qsvO0UFNyCQWgKl/tFiwuPIXxELzACeUO2FqstN/R7mmL09+nhv6xOWVPPojQO1A90sCEoJSgBcQ==", - "dev": true - }, - "loglevel-colored-level-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "loglevel": "1.5.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "3.0.2" - } - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", - "dev": true, - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-plural": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-3.0.6.tgz", - "integrity": "sha1-IDOgO6wpC487uRJY9lud9+iwHKc=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.4" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "dev": true, - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "1.1.0" - } - }, - "mem-fs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", - "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", - "requires": { - "through2": "2.0.3", - "vinyl": "1.2.0", - "vinyl-file": "2.0.0" - }, - "dependencies": { - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "mem-fs-editor": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", - "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", - "requires": { - "commondir": "1.0.1", - "deep-extend": "0.4.2", - "ejs": "2.5.7", - "glob": "7.1.2", - "globby": "6.1.0", - "mkdirp": "0.5.1", - "multimatch": "2.1.0", - "rimraf": "2.2.8", - "through2": "2.0.3", - "vinyl": "2.1.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "0.1.4", - "readable-stream": "2.3.3" - } - }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, - "messageformat": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/messageformat/-/messageformat-1.0.2.tgz", - "integrity": "sha1-kI9GkfKf8o2uNcRUNqJM/5NAI4g=", - "dev": true, - "requires": { - "glob": "7.0.6", - "make-plural": "3.0.6", - "messageformat-parser": "1.1.0", - "nopt": "3.0.6", - "reserved-words": "0.1.2" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "messageformat-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-1.1.0.tgz", - "integrity": "sha512-Hwem6G3MsKDLS1FtBRGIs8T50P1Q00r3srS6QJePCFbad9fq0nYxwf3rnU2BreApRGhmpKMV7oZI06Sy1c9TPA==", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "1.30.0" - } - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" - }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mississippi": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", - "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "duplexify": "3.5.1", - "end-of-stream": "1.4.0", - "flush-write-stream": "1.0.2", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "1.0.3", - "pumpify": "1.3.5", - "stream-each": "1.2.2", - "through2": "2.0.3" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-dir": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", - "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", - "dev": true, - "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.4", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4" - } - }, - "node-notifier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.1.2.tgz", - "integrity": "sha1-L6nhJgX6EACdRFSdb82KY93g5P8=", - "dev": true, - "requires": { - "growly": "1.3.0", - "semver": "5.4.1", - "shellwords": "0.1.1", - "which": "1.3.0" - } - }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-path": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.3.tgz", - "integrity": "sha1-Fc/04ciaONp39W9gVbJPl137K74=", - "dev": true, - "requires": { - "which": "1.3.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "2.0.1" - } - }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "dev": true, - "requires": { - "commander": "2.11.0", - "npm-path": "2.0.3", - "which": "1.3.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nwmatcher": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.2.tgz", - "integrity": "sha512-QMkCGQFYp5p+zwU3INntLmz1HMfSx9dMVJMYKmE1yuSf/22Wjo6VPFa405mCLUuQn9lbQvH2DZN9lt10ZNvtAg==", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "1.1.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.2" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "requires": { - "p-reduce": "1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", - "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=" - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=" - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, - "p-timeout": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.0.tgz", - "integrity": "sha1-mCD5lDTFgXhotPNICe5SkWYNW2w=", - "requires": { - "p-finally": "1.0.0" - } - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "2.3.0" - } - }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" - }, - "prettier": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.7.4.tgz", - "integrity": "sha1-XoYkrpNjyA+V7GRFhOzfVddPk/o=" - }, - "prettier-eslint": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-8.2.0.tgz", - "integrity": "sha512-OSx/0ULxWuIjeMO6KJoMVIDc7/Kj9a0wxUDzaGJTNiZXlNRq2bCl5jya8p42OQCVJzp1HnnQyGrWb+6/5+jbJQ==", - "dev": true, - "requires": { - "common-tags": "1.4.0", - "dlv": "1.1.0", - "eslint": "4.8.0", - "indent-string": "3.2.0", - "lodash.merge": "4.6.0", - "loglevel-colored-level-prefix": "1.0.0", - "prettier": "1.7.4", - "pretty-format": "20.0.3", - "require-relative": "0.8.7", - "typescript": "2.5.3", - "typescript-eslint-parser": "7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "pretty-format": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-20.0.3.tgz", - "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1", - "ansi-styles": "3.2.0" - } - } - } - }, - "prettier-eslint-cli": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/prettier-eslint-cli/-/prettier-eslint-cli-4.4.0.tgz", - "integrity": "sha512-q7kAFt+JpUQJALs110mpaT0+NEMZ4tt1SgOmeNL1D+13rABH0nIMw8fy3NnaTMSmRH9Wfuct6jHSDyqdb9PpVQ==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "babel-runtime": "6.26.0", - "boolify": "1.0.1", - "camelcase-keys": "4.1.0", - "chalk": "2.1.0", - "common-tags": "1.4.0", - "eslint": "4.8.0", - "find-up": "2.1.0", - "get-stdin": "5.0.1", - "glob": "7.1.2", - "ignore": "3.3.5", - "indent-string": "3.2.0", - "lodash.memoize": "4.1.2", - "loglevel-colored-level-prefix": "1.0.0", - "messageformat": "1.0.2", - "prettier-eslint": "8.2.0", - "rxjs": "5.4.3", - "yargs": "8.0.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - } - } - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" - }, - "pretty-format": { - "version": "21.2.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-21.2.1.tgz", - "integrity": "sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A==", - "dev": true, - "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - } - } - }, - "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } - }, - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "once": "1.4.0" - } - }, - "pumpify": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", - "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", - "dev": true, - "requires": { - "duplexify": "3.5.1", - "inherits": "2.0.3", - "pump": "1.0.3" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "dev": true, - "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" - } - }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "requires": { - "pify": "3.0.0", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - } - }, - "recast": { - "version": "git://github.com/kalcifer/recast.git#b66a17eee9e072338744b947a406d3f134bc0b0d", - "requires": { - "ast-types": "0.9.2", - "esprima": "3.1.3", - "private": "0.1.7", - "source-map": "0.5.7" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "1.4.0" - } - }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.7" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "0.1.3" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } - } - }, - "reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", - "dev": true - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "3.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true, - "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "2.1.0" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "1.2.0" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "4.0.8" - } - }, - "rxjs": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", - "integrity": "sha512-fSNi+y+P9ss+EZuV0GcIIqPUK07DEaMRUtLJvdcvMyFjc9dizuDjere+A4V7JrLGnm9iCc+nagV/4QdMTkqC4A==", - "requires": { - "symbol-observable": "1.0.4" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "sane": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.2.0.tgz", - "integrity": "sha512-OSJxhHO0CgPUw3lUm3GhfREAfza45smvEI9ozuFrxKG10GHVo0ryW9FK5VYlLvxj0SV7HVKHW0voYJIRu27GWg==", - "dev": true, - "requires": { - "anymatch": "1.3.2", - "exec-sh": "0.2.1", - "fb-watchman": "2.0.0", - "fsevents": "1.1.2", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.18.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.3.tgz", - "integrity": "sha512-sgv/iF/T4/SewJkaVpldKC4WjSkz0JsOh2eKtxCPpCO1oR05+7MOF+H476HVRbLArkgA7j5TRJJ4p2jdFkUGQQ==", - "dev": true, - "requires": { - "ajv": "5.2.3", - "ajv-keywords": "2.1.0" - } - }, - "scoped-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", - "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=" - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - }, - "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "requires": { - "glob": "7.1.2", - "interpret": "1.0.4", - "rechoir": "0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "should": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/should/-/should-13.1.0.tgz", - "integrity": "sha512-Nn354G2A2lnmDsKB5rQbSjdOA6XOYcdO8XysWOY7iGJMMsuQf3vo1yHcwjjczNUQJY7sKYlY/mAc2FoZpaGvDA==", - "dev": true, - "requires": { - "should-equal": "2.0.0", - "should-format": "3.0.3", - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1", - "should-util": "1.0.0" - } - }, - "should-equal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", - "dev": true, - "requires": { - "should-type": "1.4.0" - } - }, - "should-format": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha1-m/yPdPo5IFxT04w01xcwPidxJPE=", - "dev": true, - "requires": { - "should-type": "1.4.0", - "should-type-adaptors": "1.0.1" - } - }, - "should-type": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=", - "dev": true - }, - "should-type-adaptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.0.1.tgz", - "integrity": "sha1-7+VVPN9oz/ZuXF9RtxLcNRx3vqo=", - "dev": true, - "requires": { - "should-type": "1.4.0", - "should-util": "1.0.0" - } - }, - "should-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.0.tgz", - "integrity": "sha1-yYzaN0qmsZDfi6h8mInCtNtiAGM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, - "sntp": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", - "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "requires": { - "source-map": "0.5.7" - } - }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "requires": { - "concat-stream": "1.6.0", - "os-shim": "0.1.3" - } - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, - "ssri": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz", - "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "staged-git-files": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-0.0.4.tgz", - "integrity": "sha1-15fhtVHKemOd7AI33G60u5vhfTU=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.0", - "stream-shift": "1.0.0" - } - }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "stream-to-observable": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", - "integrity": "sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4=" - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "1.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringify-object": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.2.1.tgz", - "integrity": "sha512-jPcQYw/52HUPP8uOE4kkjxl5bB9LfHkKCTptIk3qw7ozP5XMIMlHMLjt00GGSwW6DJAf/njY5EU6Vpwl4LlBKQ==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "2.0.1", - "is-obj": "1.0.1", - "is-regexp": "1.0.0" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-bom-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", - "requires": { - "first-chunk-stream": "2.0.0", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "requires": { - "has-flag": "2.0.0" - } - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", - "dev": true, - "requires": { - "ajv": "5.2.3", - "ajv-keywords": "2.1.0", - "chalk": "2.1.0", - "lodash": "4.17.4", - "slice-ansi": "1.0.0", - "string-width": "2.1.1" - }, - "dependencies": { - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0" - } - } - } - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "requires": { - "os-tmpdir": "1.0.2", - "rimraf": "2.2.8" - } - }, - "test-exclude": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", - "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "textextensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.1.0.tgz", - "integrity": "sha1-G+DcKg3CRNRL6KCa9qha+5PE28M=" - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-browserify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", - "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typescript": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", - "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", - "dev": true - }, - "typescript-eslint-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-7.0.0.tgz", - "integrity": "sha1-vlfYdo43cHr4JeM56irxjXOTyrs=", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.4.tgz", - "integrity": "sha512-fRrOJ5tv6YCsJIhP9mPRnfgyo4DVNSIfNOa7Gs9aT1NNpeJc85W7GcbVxQgc+9rU3No6tnkbMqZ4xsgRBU+HGQ==", - "dev": true, - "requires": { - "cacache": "10.0.1", - "find-cache-dir": "1.0.0", - "schema-utils": "0.3.0", - "serialize-javascript": "1.4.0", - "source-map": "0.6.1", - "uglify-es": "3.2.2", - "webpack-sources": "1.1.0", - "worker-farm": "1.5.0" - }, - "dependencies": { - "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", - "dev": true, - "requires": { - "ajv": "5.2.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.2.2.tgz", - "integrity": "sha512-l+s5VLzFwGJfS+fbqaGf/Dfwo1MF13jLOF2ekL0PytzqEqQ6cVppvHf4jquqFok+35USMpKjqkYxy6pQyUcuug==", - "dev": true, - "requires": { - "commander": "2.12.2", - "source-map": "0.6.1" - } - } - } - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" - }, - "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", - "dev": true, - "requires": { - "unique-slug": "2.0.0" - } - }, - "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", - "dev": true, - "requires": { - "imurmurhash": "0.1.4" - } - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" - } - }, - "vinyl-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", - "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "2.0.0", - "vinyl": "1.2.0" - }, - "dependencies": { - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=" - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.11" - } - }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "dev": true, - "requires": { - "exec-sh": "0.2.1", - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "watchpack": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", - "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", - "dev": true, - "requires": { - "async": "2.6.0", - "chokidar": "1.7.0", - "graceful-fs": "4.1.11" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - } - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.0.0-alpha.1.tgz", - "integrity": "sha512-4jcDzG58oRcuvTKofcbMRPAKFXP9ZDkvVNupFaT0YKz45EseMt4P3YC/YiBs02gldEtcN6GLqMWZ20CmeXjl4w==", - "dev": true, - "requires": { - "acorn": "5.2.1", - "acorn-dynamic-import": "2.0.2", - "ajv": "5.2.3", - "ajv-keywords": "2.1.0", - "async": "2.6.0", - "enhanced-resolve": "4.0.0-beta.2", - "eslint-scope": "3.7.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.3", - "source-map": "0.5.7", - "tapable": "1.0.0-beta.5", - "uglifyjs-webpack-plugin": "1.1.4", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0" - }, - "dependencies": { - "acorn": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", - "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", - "dev": true - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.4" - } - }, - "enhanced-resolve": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0-beta.2.tgz", - "integrity": "sha512-OQfvXu+nF8vR+CiNYjUk1565pROxNhlQeUmjxHdfPTsj1jM0E0k0q8Ez4zTjoV07mt9GB1rtVGUctwhUwfP6uw==", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0-beta.5" - } - }, - "tapable": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.5.tgz", - "integrity": "sha512-TRKt8j59hRVoYaoSB5IFCbfNEcLzDaVdKrOIPlC1AJAIZTmZZTbHDXGsqiUb9IjeRAYGeQtc617oEzlsnpUi3w==", - "dev": true - } - } - }, - "webpack-addons": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.4.tgz", - "integrity": "sha512-Hz3rX88l1g5y8ij9HY3/tuZPhj+TsOwTpkEDEM2L01BX+XVWn31QYXSftf7IeFr6bPttUYIAKiaM+Fh5OZMzsg==", - "requires": { - "babel-code-frame": "6.26.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-3": "6.24.1", - "jscodeshift": "0.4.0" - } - }, - "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", - "dev": true, - "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "whatwg-encoding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", - "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", - "dev": true, - "requires": { - "iconv-lite": "0.4.13" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", - "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", - "dev": true - } - } - }, - "whatwg-url": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", - "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", - "dev": true, - "requires": { - "tr46": "0.0.3", - "webidl-conversions": "3.0.1" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - } - } - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "worker-farm": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.0.tgz", - "integrity": "sha512-DHRiUggxtbruaTwnLDm2/BRDKZIoOYvrgYUj5Bam4fU6Gtvc0FaEyoswFPBjMXAweGW2H4BDNIpy//1yXXuaqQ==", - "dev": true, - "requires": { - "errno": "0.1.4", - "xtend": "4.0.1" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" - } - }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - } - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "requires": { - "camelcase": "4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - } - } - }, - "yeoman-environment": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.4.tgz", - "integrity": "sha512-oiY/siFXFPCWlaM2U/wLjWs5z/zifd/8XKjkfjkHJW/faWNGc6iTGqUInWdkZohBeS4Zeb/JldAGKE+wETrbdw==", - "requires": { - "chalk": "2.1.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "globby": "6.1.0", - "grouped-queue": "0.3.3", - "inquirer": "3.3.0", - "is-scoped": "1.0.0", - "lodash": "4.17.4", - "log-symbols": "2.1.0", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "3.0.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "log-symbols": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.1.0.tgz", - "integrity": "sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ==", - "requires": { - "chalk": "2.1.0" - } - }, - "untildify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", - "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=" - } - } - }, - "yeoman-generator": { - "version": "git://github.com/ev1stensberg/generator.git#9e24fa31c85302ca1145ae34fc68b4f133251ca0", - "requires": { - "async": "2.6.0", - "chalk": "1.1.3", - "cli-table": "0.3.1", - "cross-spawn": "5.1.0", - "dargs": "5.1.0", - "dateformat": "2.2.0", - "debug": "2.6.9", - "detect-conflict": "1.0.1", - "error": "7.0.2", - "find-up": "2.1.0", - "github-username": "4.1.0", - "istextorbinary": "2.1.0", - "lodash": "4.17.4", - "mem-fs-editor": "3.0.2", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "pretty-bytes": "4.0.2", - "read-chunk": "2.1.0", - "read-pkg-up": "2.0.0", - "rimraf": "2.2.8", - "run-async": "2.3.0", - "shelljs": "0.7.8", - "text-table": "0.2.0", - "through2": "2.0.3", - "yeoman-environment": "1.6.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "requires": { - "lodash": "4.17.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=" - }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "6.0.4", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.4", - "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "yeoman-environment": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", - "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", - "requires": { - "chalk": "1.1.3", - "debug": "2.6.9", - "diff": "2.2.3", - "escape-string-regexp": "1.0.5", - "globby": "4.1.0", - "grouped-queue": "0.3.3", - "inquirer": "1.2.3", - "lodash": "4.17.4", - "log-symbols": "1.0.2", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "2.1.0" - } - } - } - } - } -} diff --git a/package.json b/package.json index 22d340360f8..9e81f644dba 100644 --- a/package.json +++ b/package.json @@ -13,20 +13,24 @@ }, "main": "./bin/webpack.js", "engines": { - "node": ">=4.0.0" + "node": ">=6.11.5" }, "scripts": { - "lint": "eslint \"**/*.js\"", + "lint": "./node_modules/eslint/bin/eslint.js \"**/*.js\"", "format": "prettier-eslint \"bin/**/**/*.js\" --write && prettier-eslint \"lib/**/**/*.js\" --write && prettier-eslint \"test/**/**/*.js\" --write", "format:dist": "prettier-eslint \"dist/**/**/*.js\" --write", - "lint:codeOnly": "eslint \"{lib,bin,__mocks__}/**/!(__testfixtures__)/*.js\" \"{lib,bin,__mocks__}/**.js\"", + "lint:codeOnly": "eslint \"{lib,bin}/**/!(__testfixtures__)/*.js\" \"{lib,bin}/**.js\"", "precommit": "lint-staged", - "prepublish": "flow-remove-types lib/ -d dist/ && npm run format:dist", - "pretest": "npm run lint", - "test": "jest --coverage" + "prepare": "flow-remove-types lib/ -d dist/ && yarn format:dist", + "pretest": "yarn lint", + "test": "jest", + "test:ci": "jest --ci && codecov -f coverage/coverage-final.json", + "jsdoc": "jsdoc -c jsdoc.json -r -d docs", + "travis:integration": "yarn prepare && yarn test:ci", + "travis:lint": "yarn prepare && yarn lint" }, "lint-staged": { - "{lib,bin,__mocks__}/**/!(__testfixtures__)/**.js": [ + "{lib,bin}/**/!(__testfixtures__)/**.js": [ "eslint --fix", "git add" ] @@ -35,17 +39,20 @@ "testEnvironment": "node", "modulePathIgnorePatterns": [ "dist" - ] + ], + "coverageDirectory": "./coverage/", + "collectCoverage": true }, "dependencies": { "babel-code-frame": "^6.22.0", "babel-core": "^6.25.0", - "babel-preset-es2015": "^6.24.1", + "babel-preset-env": "^1.6.1", "babel-preset-stage-3": "^6.24.1", "chalk": "^2.0.1", "cross-spawn": "^5.1.0", "diff": "^3.3.0", "enhanced-resolve": "^3.4.1", + "glob-all": "^3.1.0", "global-modules": "^1.0.0", "got": "^7.1.0", "inquirer": "^3.2.0", @@ -54,22 +61,21 @@ "listr": "^0.12.0", "loader-utils": "^1.1.0", "lodash": "^4.17.4", + "log-symbols": "2.1.0", "mkdirp": "^0.5.1", "p-each-series": "^1.0.0", "p-lazy": "^1.0.0", "prettier": "^1.5.3", - "recast": "git://github.com/kalcifer/recast.git#bug/allowbreak", + "recast": "^0.13.0", "resolve-cwd": "^2.0.0", - "rx": "^4.1.0", "supports-color": "^4.4.0", - "webpack-addons": "^1.1.4", + "v8-compile-cache": "^1.1.0", + "webpack-addons": "^1.1.5", "yargs": "^9.0.1", "yeoman-environment": "^2.0.0", "yeoman-generator": "git://github.com/ev1stensberg/generator.git#Feature-getArgument" }, "devDependencies": { - "ajv": "^5.2.2", - "ajv-keywords": "^2.1.0", "babel-cli": "^6.24.1", "babel-eslint": "^7.2.3", "babel-jest": "^20.0.3", @@ -81,11 +87,13 @@ "flow-bin": "^0.49.1", "flow-remove-types": "^1.2.1", "husky": "^0.14.3", - "jest": "^21.1.0", - "jest-cli": "^21.1.0", + "jest": "^21.2.1", + "jest-cli": "^21.2.1", + "jsdoc": "^3.5.5", "lint-staged": "^4.1.3", - "prettier-eslint-cli": "^4.3.2", - "should": "^13.1.0", - "webpack": "^4.0.0-alpha.1" + "prettier-eslint-cli": "^4.6.1", + "schema-utils": "^0.4.2", + "webpack": "^4.0.0-alpha.1", + "webpack-dev-server": "^2.9.7" } } diff --git a/test/BinTestCases.test.js b/test/BinTestCases.test.js index a173d998b80..9b44b5fc9d9 100644 --- a/test/BinTestCases.test.js +++ b/test/BinTestCases.test.js @@ -6,35 +6,54 @@ const fs = require("fs"); const child_process = require("child_process"); function spawn(args, options) { - if(process.env.running_under_istanbul) { - args = ["--no-deprecation", require.resolve("istanbul/lib/cli.js"), "cover", "--report", "none", "--print", "none", "--include-pid", "--dir", path.resolve("coverage"), "--", require.resolve("webpack/test/helpers/exec-in-directory.js"), options.cwd].concat(args); + if (process.env.running_under_istanbul) { + args = [ + "--no-deprecation", + require.resolve("istanbul/lib/cli.js"), + "cover", + "--report", + "none", + "--print", + "none", + "--include-pid", + "--dir", + path.resolve("coverage"), + "--", + require.resolve("webpack/test/helpers/exec-in-directory.js"), + options.cwd + ].concat(args); options = Object.assign({}, options, { cwd: undefined }); } - return child_process.spawn(process.execPath, ["--no-deprecation"].concat(args), options); + return child_process.spawn( + process.execPath, + ["--no-deprecation"].concat(args), + options + ); } function loadOptsFile(optsPath) { // Options file parser from Mocha // https://github.com/mochajs/mocha/blob/2bb2b9fa35818db7a02e5068364b0c417436b1af/bin/options.js#L25-L31 - return fs.readFileSync(optsPath, "utf8") + return fs + .readFileSync(optsPath, "utf8") .replace(/\\\s/g, "%20") .split(/\s/) .filter(Boolean) - .map((value) => value.replace(/%20/g, " ")); + .map(value => value.replace(/%20/g, " ")); } function getTestSpecificArguments(testDirectory) { try { return loadOptsFile(path.join(testDirectory, "test.opts")); - } catch(e) { + } catch (e) { return null; } } function convertToArrayOfLines(outputArray) { - if(outputArray.length === 0) return outputArray; + if (outputArray.length === 0) return outputArray; return outputArray.join("").split("\n"); } @@ -48,7 +67,9 @@ function findTestsRecursive(readPath) { const result = isAnyTests ? [readPath] : []; - return result.concat(folders.map(findTestsRecursive).reduce((acc, list) => acc.concat(list), [])); + return result.concat( + folders.map(findTestsRecursive).reduce((acc, list) => acc.concat(list), []) + ); } const casesPath = path.join(__dirname, "binCases"); @@ -61,7 +82,10 @@ describe("BinTestCases", function() { const testName = testDirectory.replace(casesPath, ""); const testArgs = getTestSpecificArguments(testDirectory) || defaultArgs; const testAssertions = require(path.join(testDirectory, "stdin.js")); - const outputPath = path.join(path.resolve(casesPath, "../js/bin"), testName); + const outputPath = path.join( + path.resolve(casesPath, "../js/bin"), + testName + ); const cmd = `${path.resolve(process.cwd(), "bin/webpack.js")}`; const args = testArgs.concat(["--output-path", `${outputPath}`]); @@ -77,30 +101,30 @@ describe("BinTestCases", function() { error: [] }; - if(asyncExists) { + if (asyncExists) { describe(testName, function() { it("should run successfully", function(done) { jest.setTimeout(10000); const child = spawn([cmd].concat(args), opts); - child.on("close", (code) => { + child.on("close", code => { env.code = code; }); - child.on("error", (error) => { + child.on("error", error => { env.error.push(error); }); - child.stdout.on("data", (data) => { + child.stdout.on("data", data => { env.stdout.push(data); }); - child.stderr.on("data", (data) => { + child.stderr.on("data", data => { env.stderr.push(data); }); setTimeout(() => { - if(env.code) { + if (env.code) { done(`Watch didn't run ${env.error}`); } @@ -113,25 +137,25 @@ describe("BinTestCases", function() { }); } else { describe(testName, function() { - beforeEach(function(done) { + beforeEach(function(done) { jest.setTimeout(20000); const child = spawn([cmd].concat(args), opts); - child.on("close", (code) => { + child.on("close", code => { env.code = code; done(); }); - child.on("error", (error) => { + child.on("error", error => { env.error.push(error); }); - child.stdout.on("data", (data) => { + child.stdout.on("data", data => { env.stdout.push(data); }); - child.stderr.on("data", (data) => { + child.stderr.on("data", data => { env.stderr.push(data); }); }); diff --git a/test/binCases/config-name/found-many/stdin.js b/test/binCases/config-name/found-many/stdin.js index e625f7bdaae..809d2b0ca08 100644 --- a/test/binCases/config-name/found-many/stdin.js +++ b/test/binCases/config-name/found-many/stdin.js @@ -3,7 +3,7 @@ module.exports = function testAssertions(code, stdout, stderr) { expect(code).toBe(0); expect(stdout).toEqual(expect.anything()); - expect(stdout[7]).toContain('./index2.js'); - expect(stdout[13]).toContain('./index3.js'); + expect(stdout[7]).toContain("./index2.js"); + expect(stdout[13]).toContain("./index3.js"); expect(stderr).toHaveLength(0); }; diff --git a/test/binCases/env/complex/index.js b/test/binCases/env/complex/index.js index cde7d6391de..0d24e266fe2 100644 --- a/test/binCases/env/complex/index.js +++ b/test/binCases/env/complex/index.js @@ -1 +1 @@ -module.exports = "index"; \ No newline at end of file +module.exports = "index"; diff --git a/test/binCases/errors/issue-5576/stdin.js b/test/binCases/errors/issue-5576/stdin.js index 577ec2f6887..b211d95a820 100644 --- a/test/binCases/errors/issue-5576/stdin.js +++ b/test/binCases/errors/issue-5576/stdin.js @@ -5,9 +5,7 @@ module.exports = function testAssertions(code, stdout, stderr) { expect(stdout[0]).toContain("Hash: "); expect(stdout[1]).toContain("Version: "); expect(stdout[2]).toContain("Time: "); - expect(stdout[4]).toContain( - "ERROR in Entry module not found: Error: Can't resolve" - ); + expect(stdout[4]).toContain("bundle.js"); expect(stderr).toHaveLength(0); }; diff --git a/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts b/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts index edc5ab3dcb3..588ecad79e1 100644 --- a/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts +++ b/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts @@ -3,4 +3,5 @@ --output-filename [name].js --output-chunk-filename [id].chunk.js --target async-node ---plugin webpack/lib/optimize/UglifyJsPlugin +--plugin uglifyjs-webpack-plugin +--config-register babel-register diff --git a/test/binCases/plugins/uglifyjsplugin-empty-args/webpack.config.js b/test/binCases/plugins/uglifyjsplugin-empty-args/webpack.config.js index a5c12a44666..3c6f7ce18ab 100644 --- a/test/binCases/plugins/uglifyjsplugin-empty-args/webpack.config.js +++ b/test/binCases/plugins/uglifyjsplugin-empty-args/webpack.config.js @@ -1,5 +1,5 @@ -var path = require("path"); +import path from "path"; -module.exports = { +export default { entry: path.resolve(__dirname, "./index") }; diff --git a/test/js/bin/config-name/found-many/main.js b/test/js/bin/config-name/found-many/main.js index 423d8c697ed..cec323f23dd 100644 --- a/test/js/bin/config-name/found-many/main.js +++ b/test/js/bin/config-name/found-many/main.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "bar"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="bar"}]); \ No newline at end of file diff --git a/test/js/bin/config-name/found-one/main.js b/test/js/bin/config-name/found-one/main.js index 115f09a4d04..423d8c697ed 100644 --- a/test/js/bin/config-name/found-one/main.js +++ b/test/js/bin/config-name/found-one/main.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/configFile/profile/null.js b/test/js/bin/configFile/profile/null.js index 7d010ec2356..3e5dbceb153 100644 --- a/test/js/bin/configFile/profile/null.js +++ b/test/js/bin/configFile/profile/null.js @@ -1,101 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -const foo = __webpack_require__(1); - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(2); - -console.log("foo"); - - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -console.log("bar"); - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(n){function e(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return n[t].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var o={};e.m=n,e.c=o,e.d=function(n,o,t){e.o(n,o)||Object.defineProperty(n,o,{configurable:!1,enumerable:!0,get:t})},e.r=function(n){Object.defineProperty(n,"__esModule",{value:!0})},e.n=function(n){var o=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(o,"a",o),o},e.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},e.p="",e.w={},e(e.s=0)}([function(n,e,o){o(1)},function(n,e,o){o(2),console.log("foo")},function(n,e){console.log("bar")}]); \ No newline at end of file diff --git a/test/js/bin/entry/multi-file/null.js b/test/js/bin/entry/multi-file/null.js index d76d21d5f03..4f08c0a58f8 100644 --- a/test/js/bin/entry/multi-file/null.js +++ b/test/js/bin/entry/multi-file/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/entry/named-entry/foo.js b/test/js/bin/entry/named-entry/foo.js index 261eade1778..205625c62a5 100644 --- a/test/js/bin/entry/named-entry/foo.js +++ b/test/js/bin/entry/named-entry/foo.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "fileA"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="fileA"}]); \ No newline at end of file diff --git a/test/js/bin/entry/named-entry/null.js b/test/js/bin/entry/named-entry/null.js index f96c34b714c..c388eb8715e 100644 --- a/test/js/bin/entry/named-entry/null.js +++ b/test/js/bin/entry/named-entry/null.js @@ -1,86 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 1); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */ -/***/ (function(module, exports) { - -module.exports = "index"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=e,n.c=r,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.w={},n(n.s=1)}([,function(e,n){e.exports="index"}]); \ No newline at end of file diff --git a/test/js/bin/entry/non-hyphenated-args/main.js b/test/js/bin/entry/non-hyphenated-args/main.js index 18c1ee46cb2..56ecbf156c1 100644 --- a/test/js/bin/entry/non-hyphenated-args/main.js +++ b/test/js/bin/entry/non-hyphenated-args/main.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 1); /******/ }) diff --git a/test/js/bin/entry/non-hyphenated-args/null.js b/test/js/bin/entry/non-hyphenated-args/null.js index 527680c3621..bc143e40153 100644 --- a/test/js/bin/entry/non-hyphenated-args/null.js +++ b/test/js/bin/entry/non-hyphenated-args/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/errors/parse/null.js b/test/js/bin/errors/parse/null.js index d927afa6234..f4ccbaf3fab 100644 --- a/test/js/bin/errors/parse/null.js +++ b/test/js/bin/errors/parse/null.js @@ -1,73 +1,86 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { +/******/ (function(modules) { + // webpackBootstrap + /******/ // The module cache + /******/ var installedModules = {}; // The require function + /******/ + /******/ /******/ function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ if (installedModules[moduleId]) { + /******/ return installedModules[moduleId].exports; + /******/ + } // Create a new module (and put it into the cache) + /******/ /******/ var module = (installedModules[moduleId] = { + /******/ i: moduleId, + /******/ l: false, + /******/ exports: {} + /******/ + }); // Execute the module function + /******/ + /******/ /******/ modules[moduleId].call( + module.exports, + module, + module.exports, + __webpack_require__ + ); // Flag the module as loaded + /******/ + /******/ /******/ module.l = true; // Return the exports of the module + /******/ + /******/ /******/ return module.exports; + /******/ + } // expose the modules object (__webpack_modules__) + /******/ + /******/ + /******/ /******/ __webpack_require__.m = modules; // expose the module cache + /******/ + /******/ /******/ __webpack_require__.c = installedModules; // define getter function for harmony exports + /******/ + /******/ /******/ __webpack_require__.d = function(exports, name, getter) { + /******/ if (!__webpack_require__.o(exports, name)) { + /******/ Object.defineProperty(exports, name, { + /******/ configurable: false, + /******/ enumerable: true, + /******/ get: getter + /******/ + }); + /******/ + } + /******/ + }; // getDefaultExport function for compatibility with non-harmony modules + /******/ + /******/ /******/ __webpack_require__.n = function(module) { + /******/ var getter = + module && module.__esModule + ? /******/ function getDefault() { + return module["default"]; + } + : /******/ function getModuleExports() { + return module; + }; + /******/ __webpack_require__.d(getter, "a", getter); + /******/ return getter; + /******/ + }; // Object.prototype.hasOwnProperty.call + /******/ + /******/ /******/ __webpack_require__.o = function(object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; // __webpack_public_path__ + /******/ + /******/ /******/ __webpack_require__.p = ""; // Load entry module and return exports + /******/ + /******/ /******/ return __webpack_require__((__webpack_require__.s = 0)); + /******/ +})( + /************************************************************************/ + /******/ [ + /* 0 */ + /***/ function(module, exports) { + throw new Error( + "Module parse failed: Unexpected token (1:0)\nYou may need an appropriate loader to handle this file type.\n| }\n| " + ); -throw new Error("Module parse failed: Unexpected token (1:0)\nYou may need an appropriate loader to handle this file type.\n| }\n| "); - -/***/ }) -/******/ ]); \ No newline at end of file + /***/ + } + /******/ + ] +); diff --git a/test/js/bin/module/module-bind/null.js b/test/js/bin/module/module-bind/null.js index fe5e939a265..8d71e3af7cb 100644 --- a/test/js/bin/module/module-bind/null.js +++ b/test/js/bin/module/module-bind/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/plugins/uglifyjsplugin-empty-args/null.js b/test/js/bin/plugins/uglifyjsplugin-empty-args/null.js index a71ebe70b50..0fcd602b4cb 100644 --- a/test/js/bin/plugins/uglifyjsplugin-empty-args/null.js +++ b/test/js/bin/plugins/uglifyjsplugin-empty-args/null.js @@ -1 +1 @@ -!function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return r[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var e={};t.m=r,t.c=e,t.d=function(r,e,n){t.o(r,e)||Object.defineProperty(r,e,{configurable:!1,enumerable:!0,get:n})},t.n=function(r){var e=r&&r.__esModule?function(){return r.default}:function(){return r};return t.d(e,"a",e),e},t.o=function(r,t){return Object.prototype.hasOwnProperty.call(r,t)},t.p="",t(t.s=0)}([function(r,t){r.exports="foo"}]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="foo"}]); \ No newline at end of file diff --git a/test/js/bin/stats/custom-preset/null.js b/test/js/bin/stats/custom-preset/null.js index 127d2e0ca0f..0ba11eab9b1 100644 --- a/test/js/bin/stats/custom-preset/null.js +++ b/test/js/bin/stats/custom-preset/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/stats/multi-config/null.js b/test/js/bin/stats/multi-config/null.js index 0ba11eab9b1..0fcd602b4cb 100644 --- a/test/js/bin/stats/multi-config/null.js +++ b/test/js/bin/stats/multi-config/null.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "foo"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="foo"}]); \ No newline at end of file diff --git a/test/js/bin/stats/none/null.js b/test/js/bin/stats/none/null.js index 0ba11eab9b1..0fcd602b4cb 100644 --- a/test/js/bin/stats/none/null.js +++ b/test/js/bin/stats/none/null.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "foo"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="foo"}]); \ No newline at end of file diff --git a/test/js/bin/stats/single-config/null.js b/test/js/bin/stats/single-config/null.js index 0ba11eab9b1..0fcd602b4cb 100644 --- a/test/js/bin/stats/single-config/null.js +++ b/test/js/bin/stats/single-config/null.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "foo"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="foo"}]); \ No newline at end of file diff --git a/test/js/bin/watch/multi-config-watch-opt/null.js b/test/js/bin/watch/multi-config-watch-opt/null.js index 127d2e0ca0f..0ba11eab9b1 100644 --- a/test/js/bin/watch/multi-config-watch-opt/null.js +++ b/test/js/bin/watch/multi-config-watch-opt/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/watch/multi-config/null.js b/test/js/bin/watch/multi-config/null.js index 0ba11eab9b1..0fcd602b4cb 100644 --- a/test/js/bin/watch/multi-config/null.js +++ b/test/js/bin/watch/multi-config/null.js @@ -1,85 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = "foo"; - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t={};r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p="",r.w={},r(r.s=0)}([function(e,r){e.exports="foo"}]); \ No newline at end of file diff --git a/test/js/bin/watch/single-config-watch-opt/null.js b/test/js/bin/watch/single-config-watch-opt/null.js index 30d65ea5b72..218933b5225 100644 --- a/test/js/bin/watch/single-config-watch-opt/null.js +++ b/test/js/bin/watch/single-config-watch-opt/null.js @@ -2,6 +2,9 @@ /******/ // The module cache /******/ var installedModules = {}; /******/ +/******/ // object to store loaded and loading wasm modules +/******/ var installedWasmModules = {}; +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ @@ -44,6 +47,11 @@ /******/ } /******/ }; /******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -59,6 +67,9 @@ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ +/******/ // object with all compiled WebAssmbly.Modules +/******/ __webpack_require__.w = {}; +/******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) diff --git a/test/js/bin/watch/single-config/null.js b/test/js/bin/watch/single-config/null.js index 218933b5225..40b7ef73287 100644 --- a/test/js/bin/watch/single-config/null.js +++ b/test/js/bin/watch/single-config/null.js @@ -1,84 +1 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading wasm modules -/******/ var installedWasmModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // object with all compiled WebAssmbly.Modules -/******/ __webpack_require__.w = {}; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - - - -/***/ }) -/******/ ]); \ No newline at end of file +!function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}var r={};n.m=e,n.c=r,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:t})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,"a",r),r},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n.w={},n(n.s=0)}([function(e,n){}]); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000000..7043cc9539c --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,3 @@ +module.exports = { + plugins: [] +}; diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..c2db846edf5 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,6386 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abab@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@~1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +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-globals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + dependencies: + acorn "^4.0.4" + +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" + +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3, acorn@^4.0.4: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0, acorn@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + +ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +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" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +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@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +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.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +app-root-path@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + dependencies: + default-require-extensions "^1.0.0" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.9" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +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-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + +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-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +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: + 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, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1.js@^4.0.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" + 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@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +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" + +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@^1.4.0, async@^1.5.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.0.0, async@^2.1.2, async@^2.1.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-cli@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + dependencies: + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" + fs-readdir-recursive "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" + slash "^1.0.0" + source-map "^0.5.6" + v8flags "^2.1.1" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-eslint@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + dependencies: + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.17.0" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^20.0.3" + +babel-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e" + dependencies: + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^21.2.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-check-es2015-constants@^6.22.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-istanbul@^4.0.0: + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + dependencies: + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" + +babel-plugin-jest-hoist@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" + +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-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +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-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.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-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.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-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.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.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0, babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.23.0, babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-env@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" + +babel-preset-es2015@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-jest@^20.0.3: + version "20.0.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" + dependencies: + babel-plugin-jest-hoist "^20.0.3" + +babel-preset-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" + dependencies: + babel-plugin-jest-hoist "^21.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-preset-stage-1@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0, babel-register@^6.9.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@7.0.0-beta.19: + version "7.0.0-beta.19" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" + +babylon@^6.15.0, babylon@^6.17.0, babylon@^6.17.3, babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +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.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +"binaryextensions@1 || 2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.0.0.tgz#e597d1a7a6a3558a2d1c7241a16c99965e6aa40f" + +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.5.0, bluebird@~3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boolify/-/boolify-1.0.1.tgz#b5c09e17cacd113d11b7bb3ed384cc012994d86b" + +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" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + 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" + +browser-resolve@^1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^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.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + 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.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^2.1.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.10.0.tgz#bac5ee1cc69ca9d96403ffb8a3abdc5b6aed6346" + dependencies: + caniuse-lite "^1.0.30000780" + electron-to-chromium "^1.3.28" + +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + +buffer-xor@^1.0.3: + 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" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +cacache@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.1.tgz#3e05f6e616117d9b54665b1b20c8aeb93ea5d36f" + dependencies: + bluebird "^3.5.0" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^1.3.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.1" + ssri "^5.0.0" + unique-filename "^1.1.0" + y18n "^3.2.1" + +caller-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + dependencies: + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +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-keys@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^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: + 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" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-lite@^1.0.30000780: + version "1.0.30000783" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz#9b5499fb1b503d2345d12aa6b8612852f4276ffd" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +catharsis@~0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" + dependencies: + underscore-contrib "~0.3.0" + +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@2.3.0, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chalk@^1.0.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" + +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" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + 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" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +ci-info@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +cli-cursor@^1.0.1, cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +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@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +cli-truncate@^0.2.1: + 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" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +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" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + +clone@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + +cloneable-readable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + dependencies: + inherits "^2.0.1" + process-nextick-args "^1.0.6" + through2 "^2.0.1" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +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" + +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +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" + +commander@^2.11.0, commander@^2.9.0, commander@~2.12.1: + version "2.12.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" + +common-tags@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.5.1.tgz#e2e39931a013cd02253defeed89a1ad615a27f07" + dependencies: + babel-runtime "^6.26.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +compressible@~2.0.11: + version "2.0.12" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66" + dependencies: + mime-db ">= 1.30.0 < 2" + +compression@^1.5.2: + version "1.7.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db" + dependencies: + accepts "~1.3.4" + bytes "3.0.0" + compressible "~2.0.11" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +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" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type-parser@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.4.0, convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-util-is@1.0.2, 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" + +cosmiconfig@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" + dependencies: + graceful-fs "^4.1.2" + js-yaml "^3.4.3" + minimist "^1.2.0" + object-assign "^4.0.1" + os-homedir "^1.0.1" + parse-json "^2.2.0" + pinkie-promise "^2.0.0" + require-from-string "^1.1.0" + +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-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + 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" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + 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" + randomfill "^1.0.3" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.37 < 0.3.0": + version "0.2.37" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +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" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +dargs@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + +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-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + +debug@2.6.9, debug@^2.0.0, debug@^2.1.0, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.0.1, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +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" + +decompress-response@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.4.0, deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + dependencies: + strip-bom "^2.0.0" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +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" + +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +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" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-conflict@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" + +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" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + +diff@^2.1.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" + +diff@^3.2.0, diff@^3.3.0, diff@^3.3.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + +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" + +dlv@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.0.tgz#fee1a7c43f63be75f3f679e85262da5f102764a7" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.0.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.2.2.tgz#a8a26bec7646438963fc86e06f8f8b16d6c8bf7a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +doctrine@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" + dependencies: + esutils "^2.0.2" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexify@^3.1.2, duplexify@^3.4.2: + version "3.5.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +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" + +editions@^1.1.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.3.1: + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + +electron-to-chromium@^1.3.28: + version "1.3.29" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.29.tgz#7a58236b95468c3e7660091348522d65d7736b36" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + +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" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" + dependencies: + once "^1.4.0" + +enhanced-resolve@4.0.0-beta.2: + version "4.0.0-beta.2" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0-beta.2.tgz#a13a9da2340712c4f3dacf27e26717e2eae69c24" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0-beta.4" + +enhanced-resolve@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +errno@^0.1.3, errno@^0.1.4: + version "0.1.6" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026" + dependencies: + prr "~1.0.1" + +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" + +error@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + +es-abstract@^1.7.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, 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" + +escodegen@^1.6.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + +eslint-plugin-flowtype@^2.35.1: + version "2.40.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.40.1.tgz#f78a8e6a4cc6da831dd541eb61e803ff0279b796" + dependencies: + lodash "^4.15.0" + +eslint-plugin-node@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29" + dependencies: + ignore "^3.3.6" + minimatch "^3.0.4" + resolve "^1.3.3" + semver "5.3.0" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@^4.2.0, eslint@^4.5.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.0.1" + doctrine "^2.0.2" + eslint-scope "^3.7.1" + espree "^3.5.2" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + +espree@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" + dependencies: + acorn "^5.2.1" + acorn-jsx "^3.0.0" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + 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" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +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" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +expect@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^21.2.1" + jest-get-type "^21.2.0" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + +express@^4.16.2: + version "4.16.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + dependencies: + accepts "~1.3.4" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.0" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.2" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.1" + serve-static "1.13.1" + setprototypeof "1.1.0" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b" + dependencies: + extend "^3.0.0" + spawn-sync "^1.0.15" + tmp "^0.0.29" + +external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +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.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + +figures@^1.3.5, figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +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" + +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +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" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.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, find-up@^2.1.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" + +first-chunk-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + dependencies: + readable-stream "^2.0.2" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flow-bin@^0.49.1: + version "0.49.1" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.49.1.tgz#c9e456b3173a7535a4ffaf28956352c63bb8e3e9" + +flow-parser@^0.*: + version "0.61.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.61.0.tgz#57d1d33bbc8fb1b9341984464ac032e054ee1084" + +flow-remove-types@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" + dependencies: + babylon "^6.15.0" + vlq "^0.2.1" + +flush-write-stream@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +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" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +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.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-readdir-recursive@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +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, fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +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.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + 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-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +gh-got@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0" + dependencies: + got "^7.0.0" + is-plain-obj "^1.1.0" + +github-username@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417" + dependencies: + gh-got "^6.0.0" + +glob-all@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + dependencies: + glob "^7.0.5" + yargs "~1.2.6" + +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@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + 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" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^6.0.1" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.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@^7.0.0, got@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +grouped-queue@^0.3.0, grouped-queue@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" + dependencies: + lodash "^4.17.2" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +handlebars@^4.0.3: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~4.2.1: + 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" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +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-symbol-support-x@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + dependencies: + has-symbol-support-x "^1.4.1" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@3.1.3, 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" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + 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" + +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +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" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-encoding-sniffer@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-parser-js@>=0.4.0: + version "0.4.9" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +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" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +iconv-lite@0.4.19, iconv-lite@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore@^3.2.7, ignore@^3.3.3, ignore@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +import-local@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +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, indent-string@^3.1.0, indent-string@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +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.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + 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.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^1.0.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918" + dependencies: + ansi-escapes "^1.1.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^2.0.0" + external-editor "^1.1.0" + figures "^1.3.5" + lodash "^4.3.0" + mute-stream "0.0.6" + pinkie-promise "^2.0.0" + run-async "^2.2.0" + rx "^4.1.0" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +inquirer@^3.0.6, inquirer@^3.2.0, inquirer@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0, interpret@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +invariant@^2.2.2: + 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" + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" + +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.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +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-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10: + 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-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +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-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-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + 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-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +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-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +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-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1.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-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + +is-resolvable@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4" + +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-scoped@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" + dependencies: + scoped-regex "^1.0.0" + +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-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +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" + +istanbul-api@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" + +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" + dependencies: + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.1.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" + dependencies: + handlebars "^4.0.3" + +istextorbinary@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874" + dependencies: + binaryextensions "1 || 2" + editions "^1.1.1" + textextensions "1 || 2" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jest-changed-files@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29" + dependencies: + throat "^4.0.0" + +jest-cli@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + istanbul-api "^1.1.1" + istanbul-lib-coverage "^1.0.1" + istanbul-lib-instrument "^1.4.2" + istanbul-lib-source-maps "^1.1.0" + jest-changed-files "^21.2.0" + jest-config "^21.2.1" + jest-environment-jsdom "^21.2.1" + jest-haste-map "^21.2.0" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve-dependencies "^21.2.0" + jest-runner "^21.2.1" + jest-runtime "^21.2.1" + jest-snapshot "^21.2.1" + jest-util "^21.2.1" + micromatch "^2.3.11" + node-notifier "^5.0.2" + pify "^3.0.0" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + worker-farm "^1.3.1" + yargs "^9.0.0" + +jest-config@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^21.2.1" + jest-environment-node "^21.2.1" + jest-get-type "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" + jest-validate "^21.2.1" + pretty-format "^21.2.1" + +jest-diff@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-docblock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + +jest-environment-jsdom@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4" + dependencies: + jest-mock "^21.2.0" + jest-util "^21.2.1" + jsdom "^9.12.0" + +jest-environment-node@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" + dependencies: + jest-mock "^21.2.0" + jest-util "^21.2.1" + +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + +jest-haste-map@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^21.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + worker-farm "^1.3.1" + +jest-jasmine2@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592" + dependencies: + chalk "^2.0.1" + expect "^21.2.1" + graceful-fs "^4.1.11" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-snapshot "^21.2.1" + p-cancelable "^0.3.0" + +jest-matcher-utils@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" + +jest-message-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" + dependencies: + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + +jest-mock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" + +jest-regex-util@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" + +jest-resolve-dependencies@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09" + dependencies: + jest-regex-util "^21.2.0" + +jest-resolve@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + is-builtin-module "^1.0.0" + +jest-runner@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" + dependencies: + jest-config "^21.2.1" + jest-docblock "^21.2.0" + jest-haste-map "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-message-util "^21.2.1" + jest-runtime "^21.2.1" + jest-util "^21.2.1" + pify "^3.0.0" + throat "^4.0.0" + worker-farm "^1.3.1" + +jest-runtime@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e" + dependencies: + babel-core "^6.0.0" + babel-jest "^21.2.0" + babel-plugin-istanbul "^4.0.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + graceful-fs "^4.1.11" + jest-config "^21.2.1" + jest-haste-map "^21.2.0" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^9.0.0" + +jest-snapshot@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0" + dependencies: + chalk "^2.0.1" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^21.2.1" + +jest-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + jest-message-util "^21.2.1" + jest-mock "^21.2.0" + jest-validate "^21.2.1" + mkdirp "^0.5.1" + +jest-validate@^21.1.0, jest-validate@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + leven "^2.1.0" + pretty-format "^21.2.1" + +jest@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1" + dependencies: + jest-cli "^21.2.1" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js2xmlparser@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" + dependencies: + xmlcreate "^1.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jscodeshift@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.0.tgz#a76afdbfc6f4e78c3fd0d1a60470dfa43c03190e" + dependencies: + async "^1.5.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^6.17.3" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.12.5" + temp "^0.8.1" + write-file-atomic "^1.2.0" + +jsdoc@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d" + dependencies: + babylon "7.0.0-beta.19" + bluebird "~3.5.0" + catharsis "~0.8.9" + escape-string-regexp "~1.0.5" + js2xmlparser "~3.0.0" + klaw "~2.0.0" + marked "~0.3.6" + mkdirp "~0.5.1" + requizzle "~0.2.1" + strip-json-comments "~2.0.1" + taffydb "2.6.2" + underscore "~1.8.3" + +jsdom@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" + dependencies: + abab "^1.0.3" + acorn "^4.0.4" + acorn-globals "^3.1.0" + array-equal "^1.0.0" + content-type-parser "^1.0.1" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + escodegen "^1.6.1" + html-encoding-sniffer "^1.0.1" + nwmatcher ">= 1.3.9 < 2.0.0" + parse5 "^1.5.1" + request "^2.79.0" + sax "^1.2.1" + symbol-tree "^3.2.1" + tough-cookie "^2.3.2" + webidl-conversions "^4.0.0" + whatwg-encoding "^1.0.1" + whatwg-url "^4.3.0" + xml-name-validator "^2.0.1" + +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-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +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-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + +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" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + 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.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +klaw@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" + dependencies: + graceful-fs "^4.1.9" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +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" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lint-staged@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-4.3.0.tgz#ed0779ad9a42c0dc62bb3244e522870b41125879" + dependencies: + app-root-path "^2.0.0" + chalk "^2.1.0" + commander "^2.11.0" + cosmiconfig "^1.1.0" + execa "^0.8.0" + is-glob "^4.0.0" + jest-validate "^21.1.0" + listr "^0.12.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + p-map "^1.1.1" + staged-git-files "0.0.4" + stringify-object "^3.2.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + +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@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +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.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.merge@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + +lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.3.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log-symbols@2.1.0, log-symbols@^2.0.0, log-symbols@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" + dependencies: + chalk "^2.0.1" + +log-symbols@^1.0.1, log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + +loglevel-colored-level-prefix@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz#6a40218fdc7ae15fc76c3d0f3e676c465388603e" + dependencies: + chalk "^1.1.3" + loglevel "^1.4.1" + +loglevel@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.0.tgz#ae0caa561111498c5ba13723d6fb631d24003934" + +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: + 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, lru-cache@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + dependencies: + pify "^3.0.0" + +make-plural@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.1.1.tgz#5658ce9d337487077daed221854c8cef9dd75749" + optionalDependencies: + minimist "^1.2.0" + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + +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" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +marked@~0.3.6: + version "0.3.7" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.7.tgz#80ef3bbf1bd00d1c9cfebe42ba1b8c85da258d0d" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem-fs-editor@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f" + dependencies: + commondir "^1.0.1" + deep-extend "^0.4.0" + ejs "^2.3.1" + glob "^7.0.3" + globby "^6.1.0" + mkdirp "^0.5.0" + multimatch "^2.0.0" + rimraf "^2.2.8" + through2 "^2.0.0" + vinyl "^2.0.1" + +mem-fs@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" + dependencies: + through2 "^2.0.0" + vinyl "^1.1.0" + vinyl-file "^2.0.0" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +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.3.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" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +messageformat-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-1.1.0.tgz#13ba2250a76bbde8e0fca0dbb3475f95c594a90a" + +messageformat@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-1.1.0.tgz#706c26f901e8219b3aa5308f8b5eaa3781d23a7a" + dependencies: + glob "~7.0.6" + make-plural "^4.0.1" + messageformat-parser "^1.1.0" + nopt "~3.0.6" + reserved-words "^0.1.2" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: + 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.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.30.0 < 2", mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mime@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +mimic-response@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + +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@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mississippi@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^1.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mkdirp@0.5.x, "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" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060" + dependencies: + dns-packet "^1.0.1" + thunky "^0.1.0" + +multimatch@^2.0.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" + +mute-stream@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +nan@^2.3.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-dir@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + +node-forge@0.6.33: + version "0.6.33" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^5.0.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + dependencies: + growly "^1.3.0" + semver "^5.3.0" + shellwords "^0.1.0" + which "^1.2.12" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nomnom@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +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.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-path@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" + dependencies: + which "^1.2.10" + +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" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.9 < 2.0.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + 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-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +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" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +opn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + 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-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-shim@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + 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" + +output-file-sync@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + dependencies: + p-reduce "^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-lazy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" + +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" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + dependencies: + p-finally "^1.0.0" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + 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.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-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parse5@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +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, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +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.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +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@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +portfinder@^1.0.9: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +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" + +prettier-eslint-cli@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.6.1.tgz#2b5dc6dc71d902dd73b9e3b784e5c55198f10bb7" + dependencies: + arrify "^1.0.1" + babel-runtime "^6.23.0" + boolify "^1.0.0" + camelcase-keys "^4.1.0" + chalk "2.3.0" + common-tags "^1.4.0" + eslint "^4.5.0" + find-up "^2.1.0" + get-stdin "^5.0.1" + glob "^7.1.1" + ignore "^3.2.7" + indent-string "^3.1.0" + lodash.memoize "^4.1.2" + loglevel-colored-level-prefix "^1.0.0" + messageformat "^1.0.2" + prettier-eslint "^8.3.0" + rxjs "^5.3.0" + yargs "10.0.3" + +prettier-eslint@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/prettier-eslint/-/prettier-eslint-8.3.1.tgz#406f702b5a0790c3ced11942d54e5ff22d9bc984" + dependencies: + common-tags "^1.4.0" + dlv "^1.1.0" + eslint "^4.5.0" + indent-string "^3.2.0" + lodash.merge "^4.6.0" + loglevel-colored-level-prefix "^1.0.0" + prettier "^1.9.0" + pretty-format "^21.2.1" + require-relative "^0.8.7" + typescript "^2.5.1" + typescript-eslint-parser "^8.0.0" + +prettier@^1.5.3, prettier@^1.9.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.2.tgz#96bc2132f7a32338e6078aeb29727178c6335827" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.6, private@^0.1.7, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@^1.0.6, 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.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +proxy-addr@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.5.2" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + 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" + +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b" + dependencies: + duplexify "^3.1.2" + inherits "^2.0.1" + pump "^1.0.0" + +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.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +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" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +rc@^1.1.7: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-chunk@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" + dependencies: + pify "^3.0.0" + safe-buffer "^5.1.1" + +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@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + 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" + +recast@^0.12.5: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.13.0.tgz#a343a394a37d24668d700f88ed04b8d2c314d40d" + dependencies: + ast-types "0.10.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +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.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +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" + +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" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +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" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + 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.1" + 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.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.79.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.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-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + +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-relative@^0.8.7: + version "0.8.7" + resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +requizzle@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" + dependencies: + underscore "~1.6.0" + +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6, resolve@^1.3.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +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.2.0, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + +run-async@^2.0.0, run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + +rxjs@^5.0.0-beta.11, rxjs@^5.3.0: + version "5.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97" + dependencies: + symbol-observable "1.0.1" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sane@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" + +sax@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + +schema-utils@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.3.tgz#e2a594d3395834d5e15da22b48be13517859458e" + dependencies: + ajv "^5.0.0" + ajv-keywords "^2.1.0" + +scoped-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52" + dependencies: + node-forge "0.6.33" + +"semver@2 || 3 || 4 || 5", semver@5.4.1, semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.1" + +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" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.9" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shelljs@^0.7.0: + version "0.7.8" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shellwords@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +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" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +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" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.18: + version "0.3.18" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" + dependencies: + faye-websocket "^0.10.0" + uuid "^2.0.2" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spawn-sync@^1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + dependencies: + concat-stream "^1.4.7" + os-shim "^0.1.2" + +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" + +spdy-transport@^2.0.18: + version "2.0.20" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + 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" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.0.0.tgz#13c19390b606c821f2a10d02b351c1729b94d8cf" + dependencies: + safe-buffer "^5.1.0" + +staged-git-files@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + +"statuses@>= 1.3.1 < 2", statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +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-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + +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-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" + dependencies: + get-own-enumerable-property-symbols "^2.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + 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@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.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-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + dependencies: + first-chunk-stream "^2.0.0" + strip-bom "^2.0.0" + +strip-bom@3.0.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-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-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-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +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.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-tree@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +table@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +taffydb@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" + +tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + +tapable@^1.0.0-beta.4, tapable@^1.0.0-beta.5: + version "1.0.0-beta.5" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0-beta.5.tgz#9bc844b856487e03345b7d3361288aefd97f8303" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + 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" + +temp@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +text-table@^0.2.0, text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +"textextensions@1 || 2": + version "2.1.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.1.0.tgz#1be0dc2a0dc244d44be8a09af6a85afb93c4dbc3" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +through2@^2.0.0, through2@^2.0.1: + 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" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunky@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e" + +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timers-browserify@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + dependencies: + setimmediate "^1.0.4" + +tmp@^0.0.29: + version "0.0.29" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" + dependencies: + os-tmpdir "~1.0.1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + +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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +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.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +typescript-eslint-parser@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-8.0.1.tgz#e8cac537d996e16c3dbb0d7c4d509799e67afe0c" + dependencies: + lodash.unescape "4.0.1" + semver "5.4.1" + +typescript@^2.5.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" + +uglify-es@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.2.tgz#15c62b7775002c81b7987a1c49ecd3f126cace73" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.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" + +uglifyjs-webpack-plugin@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.4.tgz#e43ad6e736c315024eb99481a7cc9362d6a066be" + dependencies: + cacache "^10.0.0" + find-cache-dir "^1.0.0" + schema-utils "^0.3.0" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.2.1" + webpack-sources "^1.0.1" + worker-farm "^1.4.1" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +underscore-contrib@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" + dependencies: + underscore "1.6.0" + +underscore@1.6.0, underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +untildify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0" + dependencies: + os-homedir "^1.0.0" + +untildify@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.2.tgz#7f1f302055b3fea0f3e81dc78eb36766cb65e3f1" + +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-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" + dependencies: + querystringify "~1.0.0" + requires-port "~1.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + +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" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +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" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +v8-compile-cache@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.0.tgz#1dc2a340fb8e5f800a32bcdbfb8c23cd747021b9" + +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +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" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vinyl-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" + dependencies: + graceful-fs "^4.1.2" + pify "^2.3.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + strip-bom-stream "^2.0.0" + vinyl "^1.1.0" + +vinyl@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +vinyl@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +vlq@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + +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" + +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +watchpack@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + dependencies: + async "^2.1.2" + chokidar "^1.7.0" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + +webidl-conversions@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +webpack-addons@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" + dependencies: + jscodeshift "^0.4.0" + +webpack-dev-middleware@^1.11.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + dependencies: + memory-fs "~0.4.1" + mime "^1.5.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + +webpack-dev-server@^2.9.7: + version "2.9.7" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.7.tgz#100ad6a14775478924d417ca6dcfb9d52a98faed" + dependencies: + ansi-html "0.0.7" + array-includes "^3.0.3" + bonjour "^3.5.0" + chokidar "^1.6.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.17.4" + import-local "^0.1.1" + internal-ip "1.2.0" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.18" + sockjs-client "1.1.4" + spdy "^3.4.1" + strip-ansi "^3.0.1" + supports-color "^4.2.1" + webpack-dev-middleware "^1.11.0" + yargs "^6.6.0" + +webpack-sources@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.0.0-alpha.1: + version "4.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.0.0-alpha.1.tgz#64ca5d3b280683189f9c68a765736d77787c3290" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^5.1.5" + ajv-keywords "^2.0.0" + async "^2.1.2" + enhanced-resolve "4.0.0-beta.2" + eslint-scope "^3.7.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.2" + source-map "^0.5.3" + tapable "^1.0.0-beta.5" + uglifyjs-webpack-plugin "^1.1.1" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +whatwg-encoding@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + +whatwg-url@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.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-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +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" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +worker-farm@^1.3.1, worker-farm@^1.4.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + +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.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xml-name-validator@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +xmlcreate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" + +xtend@^4.0.0, xtend@^4.0.1, 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.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +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-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" + dependencies: + camelcase "^4.1.0" + +yargs@10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.0.0" + +yargs@^6.6.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@^9.0.0, yargs@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + dependencies: + minimist "^0.1.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" + +yeoman-environment@^1.1.0: + version "1.6.6" + resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-1.6.6.tgz#cd85fa67d156060e440d7807d7ef7cf0d2d1d671" + dependencies: + chalk "^1.0.0" + debug "^2.0.0" + diff "^2.1.2" + escape-string-regexp "^1.0.2" + globby "^4.0.0" + grouped-queue "^0.3.0" + inquirer "^1.0.2" + lodash "^4.11.1" + log-symbols "^1.0.1" + mem-fs "^1.1.0" + text-table "^0.2.0" + untildify "^2.0.0" + +yeoman-environment@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.0.5.tgz#84f22bafa84088971fe99ea85f654a3a3dd2b693" + dependencies: + chalk "^2.1.0" + debug "^3.1.0" + diff "^3.3.1" + escape-string-regexp "^1.0.2" + globby "^6.1.0" + grouped-queue "^0.3.3" + inquirer "^3.3.0" + is-scoped "^1.0.0" + lodash "^4.17.4" + log-symbols "^2.1.0" + mem-fs "^1.1.0" + text-table "^0.2.0" + untildify "^3.0.2" + +"yeoman-generator@git://github.com/ev1stensberg/generator.git#Feature-getArgument": + version "1.1.1" + resolved "git://github.com/ev1stensberg/generator.git#9e24fa31c85302ca1145ae34fc68b4f133251ca0" + dependencies: + async "^2.0.0" + chalk "^1.0.0" + cli-table "^0.3.1" + cross-spawn "^5.0.1" + dargs "^5.1.0" + dateformat "^2.0.0" + debug "^2.1.0" + detect-conflict "^1.0.0" + error "^7.0.2" + find-up "^2.1.0" + github-username "^4.0.0" + istextorbinary "^2.1.0" + lodash "^4.11.1" + mem-fs-editor "^3.0.0" + minimist "^1.2.0" + mkdirp "^0.5.0" + pretty-bytes "^4.0.2" + read-chunk "^2.0.0" + read-pkg-up "^2.0.0" + rimraf "^2.2.0" + run-async "^2.0.0" + shelljs "^0.7.0" + text-table "^0.2.0" + through2 "^2.0.0" + yeoman-environment "^1.1.0"