From 62b332decafd8e6e3a16abddf921b4e1702aaedf Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 6 Dec 2017 04:06:38 +0100 Subject: [PATCH 001/109] add remove and add options --- bin/config-yargs.js | 10 ++++++++++ bin/webpack.js | 2 ++ lib/commands/add.js | 4 ++++ lib/{ => commands}/init.js | 4 ++-- lib/{ => commands}/migrate.js | 8 ++++---- lib/commands/remove.js | 3 +++ lib/index.js | 22 ++++++++++++++++++++-- 7 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 lib/commands/add.js rename lib/{ => commands}/init.js (83%) rename lib/{ => commands}/migrate.js (89%) create mode 100644 lib/commands/remove.js diff --git a/bin/config-yargs.js b/bin/config-yargs.js index f7583091c1a..a023ac52a8a 100644 --- a/bin/config-yargs.js +++ b/bin/config-yargs.js @@ -28,6 +28,16 @@ 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 + }, "generate-loader": { type: "boolean", describe: "Generates a new webpack loader project", diff --git a/bin/webpack.js b/bin/webpack.js index 02d26ee3473..34c34a18296 100755 --- a/bin/webpack.js +++ b/bin/webpack.js @@ -13,6 +13,8 @@ var ErrorHelpers = require("webpack/lib/ErrorHelpers"); const NON_COMPILATION_ARGS = [ "init", "migrate", + "add", + "remove", "generate-loader", "generate-plugin" ]; diff --git a/lib/commands/add.js b/lib/commands/add.js new file mode 100644 index 00000000000..429b08d1ab9 --- /dev/null +++ b/lib/commands/add.js @@ -0,0 +1,4 @@ +module.exports = function(type, args) { + // console.log("hey", type, args, "Ho"); + // TODO: check against schema, normalize and create ast +}; diff --git a/lib/init.js b/lib/commands/init.js similarity index 83% rename from lib/init.js rename to lib/commands/init.js index 732d36ac525..daec4808083 100644 --- a/lib/init.js +++ b/lib/commands/init.js @@ -1,7 +1,7 @@ "use strict"; -const npmPackagesExists = require("./utils/npm-packages-exists"); -const creator = require("./creator/index").creator; +const npmPackagesExists = require("../utils/npm-packages-exists"); +const creator = require("../creator/index").creator; /* * @function initializeInquirer diff --git a/lib/migrate.js b/lib/commands/migrate.js similarity index 89% rename from lib/migrate.js rename to lib/commands/migrate.js index eda61c3ab62..e6071219548 100644 --- a/lib/migrate.js +++ b/lib/commands/migrate.js @@ -6,9 +6,9 @@ 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"); +const validateSchema = require("../utils/validateSchema.js"); +const webpackOptionsSchema = require("../utils/webpackOptionsSchema"); +const WebpackOptionsValidationError = require("../utils/WebpackOptionsValidationError"); module.exports = function transformFile( currentConfigPath, @@ -44,7 +44,7 @@ module.exports = function transformFile( { title: "Migrating config from v1 to v2", task: ctx => { - const transformations = require("./transformations").transformations; + const transformations = require("../transformations").transformations; return new Listr( Object.keys(transformations).map(key => { const transform = transformations[key]; diff --git a/lib/commands/remove.js b/lib/commands/remove.js new file mode 100644 index 00000000000..42049803553 --- /dev/null +++ b/lib/commands/remove.js @@ -0,0 +1,3 @@ +module.exports = function() { + console.log("hey"); +}; diff --git a/lib/index.js b/lib/index.js index 19fe632aaa8..87b96096f92 100644 --- a/lib/index.js +++ b/lib/index.js @@ -20,7 +20,7 @@ module.exports = function initialize(command, args) { 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 +29,25 @@ 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": { + // [action, argument] i.e : [plugin, commonschunk] + const action = args.slice(2).length === 1 ? [] : args.slice(3); + const actionType = action.shift(); + if (!action.length) { + throw new Error("Please specify what action you want to do"); + } + //eslint-disable-next-line + return require("./commands/add.js")(actionType, action); + } + case "remove": { + const actionType = args.slice(2).length === 1 ? [] : [popArgs]; + if (!actionType.length) { + throw new Error("Please specify what action you want to do"); + } + //eslint-disable-next-line + return require("./commands/remove.js")(actionType, popArgs); } case "generate-loader": { return require("./generate-loader/index.js")(); From d3c33e0ac722d31c8223381e2296dc2af983cfcf Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 6 Dec 2017 04:49:59 +0100 Subject: [PATCH 002/109] initial work on add --- lib/commands/add.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/commands/add.js b/lib/commands/add.js index 429b08d1ab9..102356f0a83 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,4 +1,27 @@ module.exports = function(type, args) { + const PROP_TYPES = new Set( + "context", + "devServer", + "devtool", + "entry", + "external", + "module", + "node", + "output", + "performance", + "plugin", + "resolve", + "target", + "watch" + ); + if (!PROP_TYPES.has(type)) { + throw new Error(`${type} isn't a valid property in webpack`); + } + // TODO: + // 1.read file + // ask user what he/she wants to perform ( i.e ask for names etc) + // 2. get config prop if it has any + // 3. add config prop if it doesn't + // write and output // console.log("hey", type, args, "Ho"); - // TODO: check against schema, normalize and create ast }; From 356ed35c25338040b73454aeb8668c7addbfcdbf Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 6 Dec 2017 04:51:37 +0100 Subject: [PATCH 003/109] refactor for use in remove also --- lib/commands/add.js | 17 ++--------------- lib/utils/prop-types.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 lib/utils/prop-types.js diff --git a/lib/commands/add.js b/lib/commands/add.js index 102356f0a83..58e07bdf56a 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,19 +1,6 @@ +const PROP_TYPES = require("../utils/prop-types"); + module.exports = function(type, args) { - const PROP_TYPES = new Set( - "context", - "devServer", - "devtool", - "entry", - "external", - "module", - "node", - "output", - "performance", - "plugin", - "resolve", - "target", - "watch" - ); if (!PROP_TYPES.has(type)) { throw new Error(`${type} isn't a valid property in webpack`); } diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js new file mode 100644 index 00000000000..828c4008755 --- /dev/null +++ b/lib/utils/prop-types.js @@ -0,0 +1,15 @@ +module.exports = new Set( + "context", + "devServer", + "devtool", + "entry", + "external", + "module", + "node", + "output", + "performance", + "plugin", + "resolve", + "target", + "watch" +); From 75089eb5a18a900f082480edb52d50b22903699f Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 9 Dec 2017 05:30:05 +0100 Subject: [PATCH 004/109] [WIP] --- lib/commands/add.js | 12 ++++++++++-- lib/utils/prop-types.js | 4 ++-- webpack.config.js | 3 +++ 3 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 webpack.config.js diff --git a/lib/commands/add.js b/lib/commands/add.js index 58e07bdf56a..29193d257ca 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,14 +1,22 @@ +const fs = require("fs"); +const path = require("path"); const PROP_TYPES = require("../utils/prop-types"); module.exports = function(type, args) { if (!PROP_TYPES.has(type)) { throw new Error(`${type} isn't a valid property in webpack`); } + const configPath = path.resolve(process.cwd(), "webpack.config.js"); + const webpackConfigExists = fs.existsSync(configPath); + if (webpackConfigExists) { + const configFile = fs.readFileSync(configPath, "utf8"); + console.log(configFile); + } else { + throw new Error("Couldn't find a webpack configuration in your project path"); + } // TODO: // 1.read file // ask user what he/she wants to perform ( i.e ask for names etc) - // 2. get config prop if it has any - // 3. add config prop if it doesn't // write and output // console.log("hey", type, args, "Ho"); }; diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 828c4008755..5a64d44d330 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,4 +1,4 @@ -module.exports = new Set( +module.exports = new Set([ "context", "devServer", "devtool", @@ -12,4 +12,4 @@ module.exports = new Set( "resolve", "target", "watch" -); +]); diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000000..3637712fe6d --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,3 @@ +module.exports = { + entry: 'shit' +} From ecb615ef6ace3c958a5b6069351322f39f749460 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 9 Dec 2017 10:45:01 +0100 Subject: [PATCH 005/109] do some refactoring --- lib/creator/index.js | 5 ++--- lib/creator/yeoman/webpack-adapter.js | 18 ------------------ lib/generate-loader/index.js | 2 +- lib/generate-plugin/index.js | 2 +- .../init-generator.js} | 2 +- .../loader-generator.js | 2 +- .../loader-generator.test.js | 0 .../plugin-generator.js | 2 +- .../yeoman => generators}/utils/entry.js | 0 .../yeoman => generators}/utils/module.js | 0 .../yeoman => generators}/utils/plugins.js | 0 .../yeoman => generators}/utils/tooltip.js | 0 .../yeoman => generators}/utils/validate.js | 0 lib/{utils => generators}/webpack-generator.js | 0 webpack.config.js | 4 ++-- 15 files changed, 9 insertions(+), 28 deletions(-) delete mode 100644 lib/creator/yeoman/webpack-adapter.js rename lib/{creator/yeoman/webpack-generator.js => generators/init-generator.js} (99%) rename lib/{generate-loader => generators}/loader-generator.js (95%) rename lib/{generate-loader => generators}/loader-generator.test.js (100%) rename lib/{generate-plugin => generators}/plugin-generator.js (93%) rename lib/{creator/yeoman => generators}/utils/entry.js (100%) rename lib/{creator/yeoman => generators}/utils/module.js (100%) rename lib/{creator/yeoman => generators}/utils/plugins.js (100%) rename lib/{creator/yeoman => generators}/utils/tooltip.js (100%) rename lib/{creator/yeoman => generators}/utils/validate.js (100%) rename lib/{utils => generators}/webpack-generator.js (100%) diff --git a/lib/creator/index.js b/lib/creator/index.js index e68049c963a..0a9df56d2f7 100644 --- a/lib/creator/index.js +++ b/lib/creator/index.js @@ -3,8 +3,7 @@ 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"); /* @@ -18,7 +17,7 @@ const runTransform = require("./transformations/index"); */ 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"; 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/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/creator/yeoman/webpack-generator.js b/lib/generators/init-generator.js similarity index 99% rename from lib/creator/yeoman/webpack-generator.js rename to lib/generators/init-generator.js index 0c3ffc1ddcf..31104912aee 100644 --- a/lib/creator/yeoman/webpack-generator.js +++ b/lib/generators/init-generator.js @@ -10,7 +10,7 @@ const Input = require("webpack-addons").Input; const Confirm = require("webpack-addons").Confirm; const RawList = require("webpack-addons").RawList; -const getPackageManager = require("../../utils/package-manager") +const getPackageManager = require("../utils/package-manager") .getPackageManager; const entryQuestions = require("./utils/entry"); 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/creator/yeoman/utils/entry.js b/lib/generators/utils/entry.js similarity index 100% rename from lib/creator/yeoman/utils/entry.js rename to lib/generators/utils/entry.js diff --git a/lib/creator/yeoman/utils/module.js b/lib/generators/utils/module.js similarity index 100% rename from lib/creator/yeoman/utils/module.js rename to lib/generators/utils/module.js diff --git a/lib/creator/yeoman/utils/plugins.js b/lib/generators/utils/plugins.js similarity index 100% rename from lib/creator/yeoman/utils/plugins.js rename to lib/generators/utils/plugins.js diff --git a/lib/creator/yeoman/utils/tooltip.js b/lib/generators/utils/tooltip.js similarity index 100% rename from lib/creator/yeoman/utils/tooltip.js rename to lib/generators/utils/tooltip.js diff --git a/lib/creator/yeoman/utils/validate.js b/lib/generators/utils/validate.js similarity index 100% rename from lib/creator/yeoman/utils/validate.js rename to lib/generators/utils/validate.js 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/webpack.config.js b/webpack.config.js index 3637712fe6d..e92a7180190 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - entry: 'shit' -} + entry: "shit" +}; From d018b24ba0042aede78dec2194d569f343d268fc Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 9 Dec 2017 11:07:26 +0100 Subject: [PATCH 006/109] refactoring --- lib/commands/migrate.js | 2 +- lib/creator/transformations/context/context.js | 2 +- lib/creator/transformations/context/context.test.js | 2 +- lib/creator/transformations/devServer/devServer.js | 2 +- lib/creator/transformations/devServer/devServer.test.js | 2 +- lib/creator/transformations/devtool/devtool.js | 2 +- lib/creator/transformations/devtool/devtool.test.js | 2 +- lib/creator/transformations/entry/entry.js | 2 +- lib/creator/transformations/entry/entry.test.js | 2 +- lib/creator/transformations/externals/externals.js | 2 +- lib/creator/transformations/externals/externals.test.js | 2 +- lib/creator/transformations/index.js | 2 +- lib/creator/transformations/module/module.js | 2 +- lib/creator/transformations/module/module.test.js | 2 +- lib/creator/transformations/node/node.js | 2 +- lib/creator/transformations/node/node.test.js | 2 +- lib/creator/transformations/other/amd.js | 2 +- lib/creator/transformations/other/bail.js | 2 +- lib/creator/transformations/other/cache.js | 2 +- lib/creator/transformations/other/other.test.js | 2 +- lib/creator/transformations/other/profile.js | 2 +- lib/creator/transformations/output/output.js | 2 +- lib/creator/transformations/output/output.test.js | 2 +- lib/creator/transformations/performance/performance.js | 2 +- lib/creator/transformations/performance/performance.test.js | 2 +- lib/creator/transformations/plugins/plugins.js | 2 +- lib/creator/transformations/plugins/plugins.test.js | 2 +- lib/creator/transformations/resolve/resolve.js | 2 +- lib/creator/transformations/resolve/resolve.test.js | 2 +- lib/creator/transformations/stats/stats.js | 2 +- lib/creator/transformations/stats/stats.test.js | 2 +- lib/creator/transformations/target/target.js | 2 +- lib/creator/transformations/target/target.test.js | 2 +- lib/creator/transformations/top-scope/top-scope.test.js | 2 +- lib/creator/transformations/watch/watch.js | 2 +- lib/creator/transformations/watch/watch.test.js | 2 +- lib/creator/transformations/watch/watchOptions.js | 2 +- lib/creator/transformations/watch/watchOptions.test.js | 2 +- .../__snapshots__/index.test.js.snap | 0 .../__testfixtures__/failing.js | 0 .../bannerPlugin/__snapshots__/bannerPlugin.test.js.snap | 0 .../bannerPlugin/__testfixtures__/.editorconfig | 0 .../bannerPlugin/__testfixtures__/bannerPlugin-0.input.js | 0 .../bannerPlugin/__testfixtures__/bannerPlugin-1.input.js | 0 .../bannerPlugin/__testfixtures__/bannerPlugin-2.input.js | 0 .../bannerPlugin/bannerPlugin.js | 2 +- .../bannerPlugin/bannerPlugin.test.js | 2 +- .../__snapshots__/extractTextPlugin.test.js.snap | 0 .../extractTextPlugin/__testfixtures__/.editorconfig | 0 .../__testfixtures__/extractTextPlugin.input.js | 0 .../extractTextPlugin/extractTextPlugin.js | 2 +- .../extractTextPlugin/extractTextPlugin.test.js | 2 +- lib/{transformations => migrate}/index.js | 0 lib/{transformations => migrate}/index.test.js | 0 .../__snapshots__/loaderOptionsPlugin.test.js.snap | 0 .../loaderOptionsPlugin/__testfixtures__/.editorconfig | 0 .../__testfixtures__/loaderOptionsPlugin-0.input.js | 0 .../__testfixtures__/loaderOptionsPlugin-1.input.js | 0 .../__testfixtures__/loaderOptionsPlugin-2.input.js | 0 .../__testfixtures__/loaderOptionsPlugin-3.input.js | 0 .../loaderOptionsPlugin/loaderOptionsPlugin.js | 6 +++--- .../loaderOptionsPlugin/loaderOptionsPlugin.test.js | 2 +- .../loaders/__snapshots__/loaders.test.js.snap | 0 .../loaders/__testfixtures__/.editorconfig | 0 .../loaders/__testfixtures__/loaders-0.input.js | 0 .../loaders/__testfixtures__/loaders-1.input.js | 0 .../loaders/__testfixtures__/loaders-2.input.js | 0 .../loaders/__testfixtures__/loaders-3.input.js | 0 .../loaders/__testfixtures__/loaders-4.input.js | 0 .../loaders/__testfixtures__/loaders-5.input.js | 0 .../loaders/__testfixtures__/loaders-6.input.js | 0 .../loaders/__testfixtures__/loaders-7.input.js | 0 .../loaders/__testfixtures__/loaders-8.input.js | 0 lib/{transformations => migrate}/loaders/loaders.js | 2 +- lib/{transformations => migrate}/loaders/loaders.test.js | 2 +- .../outputPath/__snapshots__/outputPath.test.js.snap | 0 .../outputPath/__testfixtures__/outputPath-0.input.js | 0 .../outputPath/__testfixtures__/outputPath-1.input.js | 0 .../outputPath/__testfixtures__/outputPath-2.input.js | 0 lib/{transformations => migrate}/outputPath/outputPath.js | 2 +- .../outputPath/outputPath.test.js | 2 +- .../__snapshots__/removeDeprecatedPlugins.test.js.snap | 0 .../removeDeprecatedPlugins/__testfixtures__/.editorconfig | 0 .../__testfixtures__/removeDeprecatedPlugins-0.input.js | 0 .../__testfixtures__/removeDeprecatedPlugins-1.input.js | 0 .../__testfixtures__/removeDeprecatedPlugins-2.input.js | 0 .../__testfixtures__/removeDeprecatedPlugins-3.input.js | 0 .../__testfixtures__/removeDeprecatedPlugins-4.input.js | 0 .../removeDeprecatedPlugins/removeDeprecatedPlugins.js | 2 +- .../removeDeprecatedPlugins/removeDeprecatedPlugins.test.js | 2 +- .../__snapshots__/removeJsonLoader.test.js.snap | 0 .../removeJsonLoader/__testfixtures__/.editorconfig | 0 .../__testfixtures__/removeJsonLoader-0.input.js | 0 .../__testfixtures__/removeJsonLoader-1.input.js | 0 .../__testfixtures__/removeJsonLoader-2.input.js | 0 .../__testfixtures__/removeJsonLoader-3.input.js | 0 .../removeJsonLoader/removeJsonLoader.js | 2 +- .../removeJsonLoader/removeJsonLoader.test.js | 2 +- .../resolve/__snapshots__/resolve.test.js.snap | 0 .../resolve/__testfixtures__/.editorconfig | 0 .../resolve/__testfixtures__/resolve.input.js | 0 lib/{transformations => migrate}/resolve/resolve.js | 0 lib/migrate/resolve/resolve.test.js | 5 +++++ .../__snapshots__/uglifyJsPlugin.test.js.snap | 0 .../uglifyJsPlugin/__testfixtures__/.editorconfig | 0 .../__testfixtures__/uglifyJsPlugin-0.input.js | 0 .../__testfixtures__/uglifyJsPlugin-1.input.js | 0 .../__testfixtures__/uglifyJsPlugin-2.input.js | 0 .../uglifyJsPlugin/uglifyJsPlugin.js | 2 +- .../uglifyJsPlugin/uglifyJsPlugin.test.js | 2 +- lib/transformations/resolve/resolve.test.js | 5 ----- .../__snapshots__/ast-utils.test.js.snap} | 6 ------ lib/{transformations/utils.js => utils/ast-utils.js} | 0 .../utils.test.js => utils/ast-utils.test.js} | 2 +- lib/{transformations => utils}/defineTest.js | 0 lib/{creator => }/utils/run-prettier.js | 0 lib/{creator => }/utils/validate-options.js | 0 lib/{creator => }/utils/validate-options.spec.js | 2 +- 118 files changed, 63 insertions(+), 69 deletions(-) rename lib/{transformations => migrate}/__snapshots__/index.test.js.snap (100%) rename lib/{transformations => migrate}/__testfixtures__/failing.js (100%) rename lib/{transformations => migrate}/bannerPlugin/__snapshots__/bannerPlugin.test.js.snap (100%) rename lib/{transformations => migrate}/bannerPlugin/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js (100%) rename lib/{transformations => migrate}/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js (100%) rename lib/{transformations => migrate}/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js (100%) rename lib/{transformations => migrate}/bannerPlugin/bannerPlugin.js (94%) rename lib/{transformations => migrate}/bannerPlugin/bannerPlugin.test.js (77%) rename lib/{transformations => migrate}/extractTextPlugin/__snapshots__/extractTextPlugin.test.js.snap (100%) rename lib/{transformations => migrate}/extractTextPlugin/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js (100%) rename lib/{transformations => migrate}/extractTextPlugin/extractTextPlugin.js (96%) rename lib/{transformations => migrate}/extractTextPlugin/extractTextPlugin.test.js (52%) rename lib/{transformations => migrate}/index.js (100%) rename lib/{transformations => migrate}/index.test.js (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__snapshots__/loaderOptionsPlugin.test.js.snap (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js (100%) rename lib/{transformations => migrate}/loaderOptionsPlugin/loaderOptionsPlugin.js (83%) rename lib/{transformations => migrate}/loaderOptionsPlugin/loaderOptionsPlugin.test.js (84%) rename lib/{transformations => migrate}/loaders/__snapshots__/loaders.test.js.snap (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-0.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-1.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-2.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-3.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-4.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-5.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-6.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-7.input.js (100%) rename lib/{transformations => migrate}/loaders/__testfixtures__/loaders-8.input.js (100%) rename lib/{transformations => migrate}/loaders/loaders.js (99%) rename lib/{transformations => migrate}/loaders/loaders.test.js (88%) rename lib/{transformations => migrate}/outputPath/__snapshots__/outputPath.test.js.snap (100%) rename lib/{transformations => migrate}/outputPath/__testfixtures__/outputPath-0.input.js (100%) rename lib/{transformations => migrate}/outputPath/__testfixtures__/outputPath-1.input.js (100%) rename lib/{transformations => migrate}/outputPath/__testfixtures__/outputPath-2.input.js (100%) rename lib/{transformations => migrate}/outputPath/outputPath.js (97%) rename lib/{transformations => migrate}/outputPath/outputPath.test.js (76%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__snapshots__/removeDeprecatedPlugins.test.js.snap (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js (100%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/removeDeprecatedPlugins.js (97%) rename lib/{transformations => migrate}/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js (88%) rename lib/{transformations => migrate}/removeJsonLoader/__snapshots__/removeJsonLoader.test.js.snap (100%) rename lib/{transformations => migrate}/removeJsonLoader/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js (100%) rename lib/{transformations => migrate}/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js (100%) rename lib/{transformations => migrate}/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js (100%) rename lib/{transformations => migrate}/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js (100%) rename lib/{transformations => migrate}/removeJsonLoader/removeJsonLoader.js (97%) rename lib/{transformations => migrate}/removeJsonLoader/removeJsonLoader.test.js (83%) rename lib/{transformations => migrate}/resolve/__snapshots__/resolve.test.js.snap (100%) rename lib/{transformations => migrate}/resolve/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/resolve/__testfixtures__/resolve.input.js (100%) rename lib/{transformations => migrate}/resolve/resolve.js (100%) create mode 100644 lib/migrate/resolve/resolve.test.js rename lib/{transformations => migrate}/uglifyJsPlugin/__snapshots__/uglifyJsPlugin.test.js.snap (100%) rename lib/{transformations => migrate}/uglifyJsPlugin/__testfixtures__/.editorconfig (100%) rename lib/{transformations => migrate}/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js (100%) rename lib/{transformations => migrate}/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js (100%) rename lib/{transformations => migrate}/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js (100%) rename lib/{transformations => migrate}/uglifyJsPlugin/uglifyJsPlugin.js (90%) rename lib/{transformations => migrate}/uglifyJsPlugin/uglifyJsPlugin.test.js (78%) delete mode 100644 lib/transformations/resolve/resolve.test.js rename lib/{transformations/__snapshots__/utils.test.js.snap => utils/__snapshots__/ast-utils.test.js.snap} (96%) rename lib/{transformations/utils.js => utils/ast-utils.js} (100%) rename lib/{transformations/utils.test.js => utils/ast-utils.test.js} (99%) rename lib/{transformations => utils}/defineTest.js (100%) rename lib/{creator => }/utils/run-prettier.js (100%) rename lib/{creator => }/utils/validate-options.js (100%) rename lib/{creator => }/utils/validate-options.spec.js (83%) diff --git a/lib/commands/migrate.js b/lib/commands/migrate.js index e6071219548..08ddfa02ca7 100644 --- a/lib/commands/migrate.js +++ b/lib/commands/migrate.js @@ -44,7 +44,7 @@ module.exports = function transformFile( { title: "Migrating config from v1 to v2", task: ctx => { - const transformations = require("../transformations").transformations; + const transformations = require("../migrate").transformations; return new Listr( Object.keys(transformations).map(key => { const transform = transformations[key]; diff --git a/lib/creator/transformations/context/context.js b/lib/creator/transformations/context/context.js index 15926ce0aef..25d72190b88 100644 --- a/lib/creator/transformations/context/context.js +++ b/lib/creator/transformations/context/context.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/context/context.test.js b/lib/creator/transformations/context/context.test.js index d21b1d8dec5..3cdb05463d3 100644 --- a/lib/creator/transformations/context/context.test.js +++ b/lib/creator/transformations/context/context.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "context", "context-0", "path.resolve(__dirname, 'app')"); defineTest(__dirname, "context", "context-1", "'./some/fake/path'"); diff --git a/lib/creator/transformations/devServer/devServer.js b/lib/creator/transformations/devServer/devServer.js index 14d6b765b5a..9740f55be32 100644 --- a/lib/creator/transformations/devServer/devServer.js +++ b/lib/creator/transformations/devServer/devServer.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/devServer/devServer.test.js b/lib/creator/transformations/devServer/devServer.test.js index 14b3b7d11de..ba01ec89cd0 100644 --- a/lib/creator/transformations/devServer/devServer.test.js +++ b/lib/creator/transformations/devServer/devServer.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "devServer", "devServer-0", { contentBase: "path.join(__dirname, 'dist')", diff --git a/lib/creator/transformations/devtool/devtool.js b/lib/creator/transformations/devtool/devtool.js index 87cf628dc41..9086cb86cc6 100644 --- a/lib/creator/transformations/devtool/devtool.js +++ b/lib/creator/transformations/devtool/devtool.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/devtool/devtool.test.js b/lib/creator/transformations/devtool/devtool.test.js index 8702e338922..d5f291d411e 100644 --- a/lib/creator/transformations/devtool/devtool.test.js +++ b/lib/creator/transformations/devtool/devtool.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "devtool", "devtool-0", "'source-map'"); defineTest(__dirname, "devtool", "devtool-0", "myVariable"); diff --git a/lib/creator/transformations/entry/entry.js b/lib/creator/transformations/entry/entry.js index 8b0970f0eef..75a2efc7b5d 100644 --- a/lib/creator/transformations/entry/entry.js +++ b/lib/creator/transformations/entry/entry.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/entry/entry.test.js b/lib/creator/transformations/entry/entry.test.js index 1124378369a..7b65d6d873f 100644 --- a/lib/creator/transformations/entry/entry.test.js +++ b/lib/creator/transformations/entry/entry.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "entry", "entry-0", "'index.js'"); defineTest(__dirname, "entry", "entry-0", ["'index.js'", "'app.js'"]); diff --git a/lib/creator/transformations/externals/externals.js b/lib/creator/transformations/externals/externals.js index 29b394a1e37..0c26e0c2bb0 100644 --- a/lib/creator/transformations/externals/externals.js +++ b/lib/creator/transformations/externals/externals.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/externals/externals.test.js b/lib/creator/transformations/externals/externals.test.js index a64bceaef78..58e2a00a8f1 100644 --- a/lib/creator/transformations/externals/externals.test.js +++ b/lib/creator/transformations/externals/externals.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "externals", "externals-0", /react/); defineTest(__dirname, "externals", "externals-1", { diff --git a/lib/creator/transformations/index.js b/lib/creator/transformations/index.js index 5768a743ba9..dc31ef163f7 100644 --- a/lib/creator/transformations/index.js +++ b/lib/creator/transformations/index.js @@ -5,7 +5,7 @@ const j = require("jscodeshift"); const chalk = require("chalk"); const pEachSeries = require("p-each-series"); -const runPrettier = require("../utils/run-prettier"); +const runPrettier = require("../../utils/run-prettier"); const entryTransform = require("./entry/entry"); const outputTransform = require("./output/output"); diff --git a/lib/creator/transformations/module/module.js b/lib/creator/transformations/module/module.js index 991a7497e8a..d8e09eee142 100644 --- a/lib/creator/transformations/module/module.js +++ b/lib/creator/transformations/module/module.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/module/module.test.js b/lib/creator/transformations/module/module.test.js index 278f246c28f..a6f6b971bfb 100644 --- a/lib/creator/transformations/module/module.test.js +++ b/lib/creator/transformations/module/module.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "module", "module-0", { rules: [ diff --git a/lib/creator/transformations/node/node.js b/lib/creator/transformations/node/node.js index 92a3d31a271..9f504af049d 100644 --- a/lib/creator/transformations/node/node.js +++ b/lib/creator/transformations/node/node.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/node/node.test.js b/lib/creator/transformations/node/node.test.js index bfa478d9e19..ccc6e87a331 100644 --- a/lib/creator/transformations/node/node.test.js +++ b/lib/creator/transformations/node/node.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "node", "node-0", { console: false, diff --git a/lib/creator/transformations/other/amd.js b/lib/creator/transformations/other/amd.js index 24d0aa9a24e..e8aaf53e48f 100644 --- a/lib/creator/transformations/other/amd.js +++ b/lib/creator/transformations/other/amd.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/other/bail.js b/lib/creator/transformations/other/bail.js index 1fe4f3bed37..77fcc5ef222 100644 --- a/lib/creator/transformations/other/bail.js +++ b/lib/creator/transformations/other/bail.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/other/cache.js b/lib/creator/transformations/other/cache.js index ecb9eae8d72..910da49602b 100644 --- a/lib/creator/transformations/other/cache.js +++ b/lib/creator/transformations/other/cache.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/other/other.test.js b/lib/creator/transformations/other/other.test.js index a976a9ba25f..e0715ec3d81 100644 --- a/lib/creator/transformations/other/other.test.js +++ b/lib/creator/transformations/other/other.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "amd", "other-0", { jQuery: true, diff --git a/lib/creator/transformations/other/profile.js b/lib/creator/transformations/other/profile.js index 07f08bea4f7..5de5736ae82 100644 --- a/lib/creator/transformations/other/profile.js +++ b/lib/creator/transformations/other/profile.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/output/output.js b/lib/creator/transformations/output/output.js index 1c19f70d095..08e7e35b51b 100644 --- a/lib/creator/transformations/output/output.js +++ b/lib/creator/transformations/output/output.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/output/output.test.js b/lib/creator/transformations/output/output.test.js index 9b7544604b8..a6fce478961 100644 --- a/lib/creator/transformations/output/output.test.js +++ b/lib/creator/transformations/output/output.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); const jscodeshift = require("jscodeshift"); defineTest(__dirname, "output", "output-0", { diff --git a/lib/creator/transformations/performance/performance.js b/lib/creator/transformations/performance/performance.js index f00c1e21572..1caf2772181 100644 --- a/lib/creator/transformations/performance/performance.js +++ b/lib/creator/transformations/performance/performance.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/performance/performance.test.js b/lib/creator/transformations/performance/performance.test.js index 61840ca16ff..7ebe8801111 100644 --- a/lib/creator/transformations/performance/performance.test.js +++ b/lib/creator/transformations/performance/performance.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "performance", "performance-0", { hints: "'warning'", diff --git a/lib/creator/transformations/plugins/plugins.js b/lib/creator/transformations/plugins/plugins.js index 45c382501f1..c392123c599 100644 --- a/lib/creator/transformations/plugins/plugins.js +++ b/lib/creator/transformations/plugins/plugins.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/plugins/plugins.test.js b/lib/creator/transformations/plugins/plugins.test.js index 7412024992f..3f22584855c 100644 --- a/lib/creator/transformations/plugins/plugins.test.js +++ b/lib/creator/transformations/plugins/plugins.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "plugins", "plugins-0", [ "new webpack.optimize.CommonsChunkPlugin({name:" + diff --git a/lib/creator/transformations/resolve/resolve.js b/lib/creator/transformations/resolve/resolve.js index 01bba7000e3..37037038694 100644 --- a/lib/creator/transformations/resolve/resolve.js +++ b/lib/creator/transformations/resolve/resolve.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/resolve/resolve.test.js b/lib/creator/transformations/resolve/resolve.test.js index 89ecd087957..ad231f1a26d 100644 --- a/lib/creator/transformations/resolve/resolve.test.js +++ b/lib/creator/transformations/resolve/resolve.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "resolve", "resolve-0", { alias: { diff --git a/lib/creator/transformations/stats/stats.js b/lib/creator/transformations/stats/stats.js index d843caf04ee..f90f33f2087 100644 --- a/lib/creator/transformations/stats/stats.js +++ b/lib/creator/transformations/stats/stats.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/stats/stats.test.js b/lib/creator/transformations/stats/stats.test.js index c830ddb38e2..9a801831f36 100644 --- a/lib/creator/transformations/stats/stats.test.js +++ b/lib/creator/transformations/stats/stats.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "stats", "stats-0", { assets: true, diff --git a/lib/creator/transformations/target/target.js b/lib/creator/transformations/target/target.js index 7b5dca6bed1..8d352e814a6 100644 --- a/lib/creator/transformations/target/target.js +++ b/lib/creator/transformations/target/target.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/target/target.test.js b/lib/creator/transformations/target/target.test.js index e29d6ab1853..ad63f9f6bdc 100644 --- a/lib/creator/transformations/target/target.test.js +++ b/lib/creator/transformations/target/target.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "target", "target-0", "'async-node'"); defineTest(__dirname, "target", "target-1", "node"); diff --git a/lib/creator/transformations/top-scope/top-scope.test.js b/lib/creator/transformations/top-scope/top-scope.test.js index 728b777c5d3..566764c7d14 100644 --- a/lib/creator/transformations/top-scope/top-scope.test.js +++ b/lib/creator/transformations/top-scope/top-scope.test.js @@ -1,5 +1,5 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/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 index ed92c572672..b0cdd1adccf 100644 --- a/lib/creator/transformations/watch/watch.js +++ b/lib/creator/transformations/watch/watch.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/watch/watch.test.js b/lib/creator/transformations/watch/watch.test.js index ddaec086374..51fd9c82d1e 100644 --- a/lib/creator/transformations/watch/watch.test.js +++ b/lib/creator/transformations/watch/watch.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "watch", "watch-0", true); defineTest(__dirname, "watch", "watch-0", false); diff --git a/lib/creator/transformations/watch/watchOptions.js b/lib/creator/transformations/watch/watchOptions.js index c7f88cb48ab..2c9cac212df 100644 --- a/lib/creator/transformations/watch/watchOptions.js +++ b/lib/creator/transformations/watch/watchOptions.js @@ -1,6 +1,6 @@ "use strict"; -const utils = require("../../../transformations/utils"); +const utils = require("../../../utils/ast-utils"); /* * diff --git a/lib/creator/transformations/watch/watchOptions.test.js b/lib/creator/transformations/watch/watchOptions.test.js index 33a7d369fc3..bca1867c73a 100644 --- a/lib/creator/transformations/watch/watchOptions.test.js +++ b/lib/creator/transformations/watch/watchOptions.test.js @@ -1,6 +1,6 @@ "use strict"; -const defineTest = require("../../../transformations/defineTest"); +const defineTest = require("../../../utils/defineTest"); defineTest(__dirname, "watchOptions", "watch-0", { aggregateTimeout: 300, diff --git a/lib/transformations/__snapshots__/index.test.js.snap b/lib/migrate/__snapshots__/index.test.js.snap similarity index 100% rename from lib/transformations/__snapshots__/index.test.js.snap rename to lib/migrate/__snapshots__/index.test.js.snap 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 100% rename from lib/transformations/index.js rename to lib/migrate/index.js diff --git a/lib/transformations/index.test.js b/lib/migrate/index.test.js similarity index 100% rename from lib/transformations/index.test.js rename to lib/migrate/index.test.js 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 99% rename from lib/transformations/loaders/loaders.js rename to lib/migrate/loaders/loaders.js index 48509dcc653..6c30e8602f9 100644 --- a/lib/transformations/loaders/loaders.js +++ b/lib/migrate/loaders/loaders.js @@ -10,7 +10,7 @@ import type { IIdentifier } from "../../types"; -const utils = require("../utils"); +const utils = require("../../utils/ast-utils"); module.exports = function(j: Ijscodeshit, ast: IPath<*>): IPath<*> { /** 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/transformations/uglifyJsPlugin/uglifyJsPlugin.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js similarity index 90% rename from lib/transformations/uglifyJsPlugin/uglifyJsPlugin.js rename to lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js index cf0acdd6b1f..a0654b0e556 100644 --- a/lib/transformations/uglifyJsPlugin/uglifyJsPlugin.js +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js @@ -2,7 +2,7 @@ // eslint-disable-next-line node/no-unsupported-features import type { Ijscodeshit, IPath } from "../../types"; -const findPluginsByName = require("../utils").findPluginsByName; +const findPluginsByName = require("../../utils/ast-utils").findPluginsByName; module.exports = function(j: Ijscodeshit, ast: IPath<*>) { function 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/__snapshots__/utils.test.js.snap b/lib/utils/__snapshots__/ast-utils.test.js.snap similarity index 96% rename from lib/transformations/__snapshots__/utils.test.js.snap rename to lib/utils/__snapshots__/ast-utils.test.js.snap index ca7a5492783..ab678dd8aaf 100644 --- a/lib/transformations/__snapshots__/utils.test.js.snap +++ b/lib/utils/__snapshots__/ast-utils.test.js.snap @@ -76,12 +76,6 @@ exports[`utils createProperty should create properties for String 1`] = ` }" `; -exports[`utils createProperty should create properties for complex keys 1`] = ` -"{ - \\"foo-bar\\": \\"bar\\" -}" -`; - exports[`utils createProperty should create properties for non-literal keys 1`] = ` "{ 1: \\"bar\\" diff --git a/lib/transformations/utils.js b/lib/utils/ast-utils.js similarity index 100% rename from lib/transformations/utils.js rename to lib/utils/ast-utils.js diff --git a/lib/transformations/utils.test.js b/lib/utils/ast-utils.test.js similarity index 99% rename from lib/transformations/utils.test.js rename to lib/utils/ast-utils.test.js index a70091a40e2..fc0bec484a3 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", () => { diff --git a/lib/transformations/defineTest.js b/lib/utils/defineTest.js similarity index 100% rename from lib/transformations/defineTest.js rename to lib/utils/defineTest.js diff --git a/lib/creator/utils/run-prettier.js b/lib/utils/run-prettier.js similarity index 100% rename from lib/creator/utils/run-prettier.js rename to lib/utils/run-prettier.js diff --git a/lib/creator/utils/validate-options.js b/lib/utils/validate-options.js similarity index 100% rename from lib/creator/utils/validate-options.js rename to lib/utils/validate-options.js diff --git a/lib/creator/utils/validate-options.spec.js b/lib/utils/validate-options.spec.js similarity index 83% rename from lib/creator/utils/validate-options.spec.js rename to lib/utils/validate-options.spec.js index fe342e78fa1..cdb951684f5 100644 --- a/lib/creator/utils/validate-options.spec.js +++ b/lib/utils/validate-options.spec.js @@ -2,7 +2,7 @@ "use strict"; -const validateOptions = require("../../../__mocks__/creator/validate-options.mock") +const validateOptions = require("../../__mocks__/creator/validate-options.mock") .validateOptions; describe("validate-options", () => { From 832997d0ee90020e9629a94bfb77c30761d0dadc Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 9 Dec 2017 12:03:32 +0100 Subject: [PATCH 007/109] Refactor & WIP on add/remove --- dist/creator/index.js | 66 -- .../transformations/context/context.js | 32 - .../transformations/context/context.test.js | 7 - .../transformations/devServer/devServer.js | 40 -- .../devServer/devServer.test.js | 10 - .../transformations/devtool/devtool.js | 32 - .../transformations/devtool/devtool.test.js | 8 - dist/creator/transformations/entry/entry.js | 41 -- .../transformations/entry/entry.test.js | 24 - .../transformations/externals/externals.js | 54 -- .../externals/externals.test.js | 61 -- dist/creator/transformations/index.js | 118 ---- dist/creator/transformations/module/module.js | 32 - .../transformations/module/module.test.js | 108 --- dist/creator/transformations/node/node.js | 28 - .../creator/transformations/node/node.test.js | 13 - dist/creator/transformations/other/amd.js | 28 - dist/creator/transformations/other/bail.js | 32 - dist/creator/transformations/other/cache.js | 32 - .../transformations/other/other.test.js | 13 - dist/creator/transformations/other/profile.js | 32 - dist/creator/transformations/output/output.js | 27 - .../transformations/output/output.test.js | 15 - .../performance/performance.js | 28 - .../performance/performance.test.js | 11 - .../transformations/plugins/plugins.js | 33 - .../transformations/plugins/plugins.test.js | 14 - .../transformations/resolve/resolve.js | 28 - .../transformations/resolve/resolve.test.js | 29 - dist/creator/transformations/stats/stats.js | 40 -- .../transformations/stats/stats.test.js | 36 - dist/creator/transformations/target/target.js | 32 - .../transformations/target/target.test.js | 6 - .../top-scope/top-scope.test.js | 5 - dist/creator/transformations/watch/watch.js | 32 - .../transformations/watch/watch.test.js | 8 - .../transformations/watch/watchOptions.js | 28 - .../watch/watchOptions.test.js | 21 - dist/creator/utils/run-prettier.js | 38 -- dist/creator/utils/validate-options.js | 39 -- dist/creator/utils/validate-options.spec.js | 25 - dist/creator/yeoman/utils/entry.js | 81 --- dist/creator/yeoman/utils/module.js | 10 - dist/creator/yeoman/utils/plugins.js | 3 - dist/creator/yeoman/utils/tooltip.js | 47 -- dist/creator/yeoman/utils/validate.js | 9 - dist/creator/yeoman/webpack-adapter.js | 18 - dist/creator/yeoman/webpack-generator.js | 401 ----------- dist/generate-loader/index.js | 2 +- dist/generate-loader/loader-generator.js | 58 -- dist/generate-loader/loader-generator.test.js | 15 - dist/generate-plugin/index.js | 2 +- dist/generate-plugin/plugin-generator.js | 39 -- dist/initialize.js | 22 - dist/migrate.js | 114 ---- .../__testfixtures__/failing.js | 80 --- .../__testfixtures__/bannerPlugin-0.input.js | 5 - .../__testfixtures__/bannerPlugin-1.input.js | 4 - .../__testfixtures__/bannerPlugin-2.input.js | 6 - .../bannerPlugin/bannerPlugin.js | 27 - .../bannerPlugin/bannerPlugin.test.js | 7 - dist/transformations/defineTest.js | 95 --- .../extractTextPlugin.input.js | 16 - .../extractTextPlugin/extractTextPlugin.js | 58 -- .../extractTextPlugin.test.js | 5 - dist/transformations/index.js | 89 --- dist/transformations/index.test.js | 66 -- .../loaderOptionsPlugin-0.input.js | 6 - .../loaderOptionsPlugin-1.input.js | 9 - .../loaderOptionsPlugin-2.input.js | 9 - .../loaderOptionsPlugin-3.input.js | 17 - .../loaderOptionsPlugin.js | 41 -- .../loaderOptionsPlugin.test.js | 8 - .../__testfixtures__/loaders-0.input.js | 65 -- .../__testfixtures__/loaders-1.input.js | 8 - .../__testfixtures__/loaders-2.input.js | 15 - .../__testfixtures__/loaders-3.input.js | 8 - .../__testfixtures__/loaders-4.input.js | 8 - .../__testfixtures__/loaders-5.input.js | 12 - .../__testfixtures__/loaders-6.input.js | 12 - .../__testfixtures__/loaders-7.input.js | 14 - .../__testfixtures__/loaders-8.input.js | 14 - dist/transformations/loaders/loaders.js | 314 --------- dist/transformations/loaders/loaders.test.js | 13 - .../__testfixtures__/outputPath-0.input.js | 5 - .../__testfixtures__/outputPath-1.input.js | 6 - .../__testfixtures__/outputPath-2.input.js | 6 - dist/transformations/outputPath/outputPath.js | 73 -- .../outputPath/outputPath.test.js | 7 - .../removeDeprecatedPlugins-0.input.js | 6 - .../removeDeprecatedPlugins-1.input.js | 6 - .../removeDeprecatedPlugins-2.input.js | 8 - .../removeDeprecatedPlugins-3.input.js | 7 - .../removeDeprecatedPlugins-4.input.js | 8 - .../removeDeprecatedPlugins.js | 59 -- .../removeDeprecatedPlugins.test.js | 9 - .../removeJsonLoader-0.input.js | 19 - .../removeJsonLoader-1.input.js | 12 - .../removeJsonLoader-2.input.js | 10 - .../removeJsonLoader-3.input.js | 11 - .../removeJsonLoader/removeJsonLoader.js | 60 -- .../removeJsonLoader/removeJsonLoader.test.js | 8 - .../resolve/__testfixtures__/resolve.input.js | 20 - dist/transformations/resolve/resolve.js | 68 -- dist/transformations/resolve/resolve.test.js | 5 - .../uglifyJsPlugin-0.input.js | 5 - .../uglifyJsPlugin-1.input.js | 6 - .../uglifyJsPlugin-2.input.js | 8 - .../uglifyJsPlugin/uglifyJsPlugin.js | 28 - .../uglifyJsPlugin/uglifyJsPlugin.test.js | 7 - dist/transformations/utils.js | 630 ------------------ dist/transformations/utils.test.js | 358 ---------- dist/utils/resolve-packages.js | 2 +- dist/utils/webpack-generator.js | 77 --- lib/commands/add.js | 23 +- lib/commands/init.js | 2 +- lib/creator/index.test.js | 10 - .../__testfixtures__/context-0.input.js | 6 - .../__testfixtures__/context-1.input.js | 6 - .../__testfixtures__/context-2.input.js | 6 - .../__testfixtures__/devServer-0.input.js | 6 - .../__testfixtures__/devServer-1.input.js | 6 - .../__testfixtures__/devtool-0.input.js | 6 - .../__testfixtures__/devtool-1.input.js | 6 - .../entry/__testfixtures__/entry-0.input.js | 1 - .../__testfixtures__/externals-0.input.js | 6 - .../__testfixtures__/externals-1.input.js | 6 - .../module/__testfixtures__/module-0.input.js | 6 - .../module/__testfixtures__/module-1.input.js | 6 - .../node/__testfixtures__/node-0.input.js | 6 - .../other/__testfixtures__/other-0.input.js | 6 - lib/creator/transformations/other/merge.js | 46 -- .../output/__testfixtures__/output-0.input.js | 3 - .../__testfixtures__/performance-0.input.js | 6 - .../__testfixtures__/plugins-0.input.js | 6 - .../__testfixtures__/resolve-0.input.js | 6 - .../stats/__testfixtures__/stats-0.input.js | 6 - .../target/__testfixtures__/target-0.input.js | 6 - .../target/__testfixtures__/target-1.input.js | 6 - .../__testfixtures__/top-scope-0.input.js | 1 - .../transformations/top-scope/top-scope.js | 21 - .../watch/__testfixtures__/watch-0.input.js | 6 - .../watch/__testfixtures__/watch-1.input.js | 6 - .../watch/__testfixtures__/watch-2.input.js | 6 - lib/generators/init-generator.js | 3 +- lib/{creator => init}/index.js | 0 {dist/creator => lib/init}/index.test.js | 0 .../__snapshots__/context.test.js.snap | 0 .../__testfixtures__/context-0.input.js | 0 .../__testfixtures__/context-1.input.js | 0 .../__testfixtures__/context-2.input.js | 0 .../transformations/context/context.js | 0 .../transformations/context/context.test.js | 0 .../__snapshots__/devServer.test.js.snap | 0 .../__testfixtures__/devServer-0.input.js | 0 .../__testfixtures__/devServer-1.input.js | 0 .../transformations/devServer/devServer.js | 0 .../devServer/devServer.test.js | 0 .../__snapshots__/devtool.test.js.snap | 0 .../__testfixtures__/devtool-0.input.js | 0 .../__testfixtures__/devtool-1.input.js | 0 .../transformations/devtool/devtool.js | 0 .../transformations/devtool/devtool.test.js | 0 .../entry/__snapshots__/entry.test.js.snap | 0 .../entry/__testfixtures__/entry-0.input.js | 0 .../transformations/entry/entry.js | 0 .../transformations/entry/entry.test.js | 0 .../__snapshots__/externals.test.js.snap | 0 .../__testfixtures__/externals-0.input.js | 0 .../__testfixtures__/externals-1.input.js | 0 .../transformations/externals/externals.js | 0 .../externals/externals.test.js | 0 .../transformations/index.js | 34 +- .../module/__snapshots__/module.test.js.snap | 0 .../module/__testfixtures__/module-0.input.js | 0 .../module/__testfixtures__/module-1.input.js | 0 .../transformations/module/module.js | 0 .../transformations/module/module.test.js | 0 .../node/__snapshots__/node.test.js.snap | 0 .../node/__testfixtures__/node-0.input.js | 0 .../transformations/node/node.js | 0 .../transformations/node/node.test.js | 0 .../other/__snapshots__/other.test.js.snap | 0 .../other/__testfixtures__/other-0.input.js | 0 .../transformations/other/amd.js | 0 .../transformations/other/bail.js | 0 .../transformations/other/cache.js | 0 .../init}/transformations/other/merge.js | 0 .../transformations/other/other.test.js | 0 .../transformations/other/profile.js | 0 .../output/__snapshots__/output.test.js.snap | 0 .../output/__testfixtures__/output-0.input.js | 0 .../transformations/output/output.js | 0 .../transformations/output/output.test.js | 0 .../__snapshots__/performance.test.js.snap | 0 .../__testfixtures__/performance-0.input.js | 0 .../performance/performance.js | 0 .../performance/performance.test.js | 0 .../__snapshots__/plugins.test.js.snap | 0 .../__testfixtures__/plugins-0.input.js | 0 .../transformations/plugins/plugins.js | 0 .../transformations/plugins/plugins.test.js | 0 .../__snapshots__/resolve.test.js.snap | 0 .../__testfixtures__/resolve-0.input.js | 0 .../transformations/resolve/resolve.js | 0 .../transformations/resolve/resolve.test.js | 0 .../stats/__snapshots__/stats.test.js.snap | 0 .../stats/__testfixtures__/stats-0.input.js | 0 .../transformations/stats/stats.js | 0 .../transformations/stats/stats.test.js | 0 .../target/__snapshots__/target.test.js.snap | 0 .../target/__testfixtures__/target-0.input.js | 0 .../target/__testfixtures__/target-1.input.js | 0 .../transformations/target/target.js | 0 .../transformations/target/target.test.js | 0 .../__snapshots__/top-scope.test.js.snap | 0 .../__testfixtures__/top-scope-0.input.js | 0 .../transformations/top-scope/top-scope.js | 0 .../top-scope/top-scope.test.js | 0 .../watch/__snapshots__/watch.test.js.snap | 0 .../__snapshots__/watchOptions.test.js.snap | 0 .../watch/__testfixtures__/watch-0.input.js | 0 .../watch/__testfixtures__/watch-1.input.js | 0 .../watch/__testfixtures__/watch-2.input.js | 0 .../transformations/watch/watch.js | 0 .../transformations/watch/watch.test.js | 0 .../transformations/watch/watchOptions.js | 0 .../watch/watchOptions.test.js | 0 lib/utils/prop-types.js | 2 +- lib/utils/resolve-packages.js | 2 +- webpack.config.js | 2 +- 231 files changed, 54 insertions(+), 4920 deletions(-) delete mode 100644 dist/creator/index.js delete mode 100644 dist/creator/transformations/context/context.js delete mode 100644 dist/creator/transformations/context/context.test.js delete mode 100644 dist/creator/transformations/devServer/devServer.js delete mode 100644 dist/creator/transformations/devServer/devServer.test.js delete mode 100644 dist/creator/transformations/devtool/devtool.js delete mode 100644 dist/creator/transformations/devtool/devtool.test.js delete mode 100644 dist/creator/transformations/entry/entry.js delete mode 100644 dist/creator/transformations/entry/entry.test.js delete mode 100644 dist/creator/transformations/externals/externals.js delete mode 100644 dist/creator/transformations/externals/externals.test.js delete mode 100644 dist/creator/transformations/index.js delete mode 100644 dist/creator/transformations/module/module.js delete mode 100644 dist/creator/transformations/module/module.test.js delete mode 100644 dist/creator/transformations/node/node.js delete mode 100644 dist/creator/transformations/node/node.test.js delete mode 100644 dist/creator/transformations/other/amd.js delete mode 100644 dist/creator/transformations/other/bail.js delete mode 100644 dist/creator/transformations/other/cache.js delete mode 100644 dist/creator/transformations/other/other.test.js delete mode 100644 dist/creator/transformations/other/profile.js delete mode 100644 dist/creator/transformations/output/output.js delete mode 100644 dist/creator/transformations/output/output.test.js delete mode 100644 dist/creator/transformations/performance/performance.js delete mode 100644 dist/creator/transformations/performance/performance.test.js delete mode 100644 dist/creator/transformations/plugins/plugins.js delete mode 100644 dist/creator/transformations/plugins/plugins.test.js delete mode 100644 dist/creator/transformations/resolve/resolve.js delete mode 100644 dist/creator/transformations/resolve/resolve.test.js delete mode 100644 dist/creator/transformations/stats/stats.js delete mode 100644 dist/creator/transformations/stats/stats.test.js delete mode 100644 dist/creator/transformations/target/target.js delete mode 100644 dist/creator/transformations/target/target.test.js delete mode 100644 dist/creator/transformations/top-scope/top-scope.test.js delete mode 100644 dist/creator/transformations/watch/watch.js delete mode 100644 dist/creator/transformations/watch/watch.test.js delete mode 100644 dist/creator/transformations/watch/watchOptions.js delete mode 100644 dist/creator/transformations/watch/watchOptions.test.js delete mode 100644 dist/creator/utils/run-prettier.js delete mode 100644 dist/creator/utils/validate-options.js delete mode 100644 dist/creator/utils/validate-options.spec.js delete mode 100644 dist/creator/yeoman/utils/entry.js delete mode 100644 dist/creator/yeoman/utils/module.js delete mode 100644 dist/creator/yeoman/utils/plugins.js delete mode 100644 dist/creator/yeoman/utils/tooltip.js delete mode 100644 dist/creator/yeoman/utils/validate.js delete mode 100644 dist/creator/yeoman/webpack-adapter.js delete mode 100644 dist/creator/yeoman/webpack-generator.js delete mode 100644 dist/generate-loader/loader-generator.js delete mode 100644 dist/generate-loader/loader-generator.test.js delete mode 100644 dist/generate-plugin/plugin-generator.js delete mode 100644 dist/initialize.js delete mode 100644 dist/migrate.js delete mode 100644 dist/transformations/__testfixtures__/failing.js delete mode 100644 dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js delete mode 100644 dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js delete mode 100644 dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js delete mode 100644 dist/transformations/bannerPlugin/bannerPlugin.js delete mode 100644 dist/transformations/bannerPlugin/bannerPlugin.test.js delete mode 100644 dist/transformations/defineTest.js delete mode 100644 dist/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js delete mode 100644 dist/transformations/extractTextPlugin/extractTextPlugin.js delete mode 100644 dist/transformations/extractTextPlugin/extractTextPlugin.test.js delete mode 100644 dist/transformations/index.js delete mode 100644 dist/transformations/index.test.js delete mode 100644 dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js delete mode 100644 dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js delete mode 100644 dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js delete mode 100644 dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js delete mode 100644 dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js delete mode 100644 dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-0.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-1.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-2.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-3.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-4.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-5.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-6.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-7.input.js delete mode 100644 dist/transformations/loaders/__testfixtures__/loaders-8.input.js delete mode 100644 dist/transformations/loaders/loaders.js delete mode 100644 dist/transformations/loaders/loaders.test.js delete mode 100644 dist/transformations/outputPath/__testfixtures__/outputPath-0.input.js delete mode 100644 dist/transformations/outputPath/__testfixtures__/outputPath-1.input.js delete mode 100644 dist/transformations/outputPath/__testfixtures__/outputPath-2.input.js delete mode 100644 dist/transformations/outputPath/outputPath.js delete mode 100644 dist/transformations/outputPath/outputPath.test.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js delete mode 100644 dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js delete mode 100644 dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js delete mode 100644 dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js delete mode 100644 dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js delete mode 100644 dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js delete mode 100644 dist/transformations/removeJsonLoader/removeJsonLoader.js delete mode 100644 dist/transformations/removeJsonLoader/removeJsonLoader.test.js delete mode 100644 dist/transformations/resolve/__testfixtures__/resolve.input.js delete mode 100644 dist/transformations/resolve/resolve.js delete mode 100644 dist/transformations/resolve/resolve.test.js delete mode 100644 dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js delete mode 100644 dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js delete mode 100644 dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js delete mode 100644 dist/transformations/uglifyJsPlugin/uglifyJsPlugin.js delete mode 100644 dist/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js delete mode 100644 dist/transformations/utils.js delete mode 100644 dist/transformations/utils.test.js delete mode 100644 dist/utils/webpack-generator.js delete mode 100644 lib/creator/index.test.js delete mode 100644 lib/creator/transformations/context/__testfixtures__/context-0.input.js delete mode 100644 lib/creator/transformations/context/__testfixtures__/context-1.input.js delete mode 100644 lib/creator/transformations/context/__testfixtures__/context-2.input.js delete mode 100644 lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js delete mode 100644 lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js delete mode 100644 lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js delete mode 100644 lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js delete mode 100644 lib/creator/transformations/entry/__testfixtures__/entry-0.input.js delete mode 100644 lib/creator/transformations/externals/__testfixtures__/externals-0.input.js delete mode 100644 lib/creator/transformations/externals/__testfixtures__/externals-1.input.js delete mode 100644 lib/creator/transformations/module/__testfixtures__/module-0.input.js delete mode 100644 lib/creator/transformations/module/__testfixtures__/module-1.input.js delete mode 100644 lib/creator/transformations/node/__testfixtures__/node-0.input.js delete mode 100644 lib/creator/transformations/other/__testfixtures__/other-0.input.js delete mode 100644 lib/creator/transformations/other/merge.js delete mode 100644 lib/creator/transformations/output/__testfixtures__/output-0.input.js delete mode 100644 lib/creator/transformations/performance/__testfixtures__/performance-0.input.js delete mode 100644 lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js delete mode 100644 lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js delete mode 100644 lib/creator/transformations/stats/__testfixtures__/stats-0.input.js delete mode 100644 lib/creator/transformations/target/__testfixtures__/target-0.input.js delete mode 100644 lib/creator/transformations/target/__testfixtures__/target-1.input.js delete mode 100644 lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js delete mode 100644 lib/creator/transformations/top-scope/top-scope.js delete mode 100644 lib/creator/transformations/watch/__testfixtures__/watch-0.input.js delete mode 100644 lib/creator/transformations/watch/__testfixtures__/watch-1.input.js delete mode 100644 lib/creator/transformations/watch/__testfixtures__/watch-2.input.js rename lib/{creator => init}/index.js (100%) rename {dist/creator => lib/init}/index.test.js (100%) rename lib/{creator => init}/transformations/context/__snapshots__/context.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/context/__testfixtures__/context-0.input.js (100%) rename {dist/creator => lib/init}/transformations/context/__testfixtures__/context-1.input.js (100%) rename {dist/creator => lib/init}/transformations/context/__testfixtures__/context-2.input.js (100%) rename lib/{creator => init}/transformations/context/context.js (100%) rename lib/{creator => init}/transformations/context/context.test.js (100%) rename lib/{creator => init}/transformations/devServer/__snapshots__/devServer.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/devServer/__testfixtures__/devServer-0.input.js (100%) rename {dist/creator => lib/init}/transformations/devServer/__testfixtures__/devServer-1.input.js (100%) rename lib/{creator => init}/transformations/devServer/devServer.js (100%) rename lib/{creator => init}/transformations/devServer/devServer.test.js (100%) rename lib/{creator => init}/transformations/devtool/__snapshots__/devtool.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/devtool/__testfixtures__/devtool-0.input.js (100%) rename {dist/creator => lib/init}/transformations/devtool/__testfixtures__/devtool-1.input.js (100%) rename lib/{creator => init}/transformations/devtool/devtool.js (100%) rename lib/{creator => init}/transformations/devtool/devtool.test.js (100%) rename lib/{creator => init}/transformations/entry/__snapshots__/entry.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/entry/__testfixtures__/entry-0.input.js (100%) rename lib/{creator => init}/transformations/entry/entry.js (100%) rename lib/{creator => init}/transformations/entry/entry.test.js (100%) rename lib/{creator => init}/transformations/externals/__snapshots__/externals.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/externals/__testfixtures__/externals-0.input.js (100%) rename {dist/creator => lib/init}/transformations/externals/__testfixtures__/externals-1.input.js (100%) rename lib/{creator => init}/transformations/externals/externals.js (100%) rename lib/{creator => init}/transformations/externals/externals.test.js (100%) rename lib/{creator => init}/transformations/index.js (78%) rename lib/{creator => init}/transformations/module/__snapshots__/module.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/module/__testfixtures__/module-0.input.js (100%) rename {dist/creator => lib/init}/transformations/module/__testfixtures__/module-1.input.js (100%) rename lib/{creator => init}/transformations/module/module.js (100%) rename lib/{creator => init}/transformations/module/module.test.js (100%) rename lib/{creator => init}/transformations/node/__snapshots__/node.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/node/__testfixtures__/node-0.input.js (100%) rename lib/{creator => init}/transformations/node/node.js (100%) rename lib/{creator => init}/transformations/node/node.test.js (100%) rename lib/{creator => init}/transformations/other/__snapshots__/other.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/other/__testfixtures__/other-0.input.js (100%) rename lib/{creator => init}/transformations/other/amd.js (100%) rename lib/{creator => init}/transformations/other/bail.js (100%) rename lib/{creator => init}/transformations/other/cache.js (100%) rename {dist/creator => lib/init}/transformations/other/merge.js (100%) rename lib/{creator => init}/transformations/other/other.test.js (100%) rename lib/{creator => init}/transformations/other/profile.js (100%) rename lib/{creator => init}/transformations/output/__snapshots__/output.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/output/__testfixtures__/output-0.input.js (100%) rename lib/{creator => init}/transformations/output/output.js (100%) rename lib/{creator => init}/transformations/output/output.test.js (100%) rename lib/{creator => init}/transformations/performance/__snapshots__/performance.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/performance/__testfixtures__/performance-0.input.js (100%) rename lib/{creator => init}/transformations/performance/performance.js (100%) rename lib/{creator => init}/transformations/performance/performance.test.js (100%) rename lib/{creator => init}/transformations/plugins/__snapshots__/plugins.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/plugins/__testfixtures__/plugins-0.input.js (100%) rename lib/{creator => init}/transformations/plugins/plugins.js (100%) rename lib/{creator => init}/transformations/plugins/plugins.test.js (100%) rename lib/{creator => init}/transformations/resolve/__snapshots__/resolve.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/resolve/__testfixtures__/resolve-0.input.js (100%) rename lib/{creator => init}/transformations/resolve/resolve.js (100%) rename lib/{creator => init}/transformations/resolve/resolve.test.js (100%) rename lib/{creator => init}/transformations/stats/__snapshots__/stats.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/stats/__testfixtures__/stats-0.input.js (100%) rename lib/{creator => init}/transformations/stats/stats.js (100%) rename lib/{creator => init}/transformations/stats/stats.test.js (100%) rename lib/{creator => init}/transformations/target/__snapshots__/target.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/target/__testfixtures__/target-0.input.js (100%) rename {dist/creator => lib/init}/transformations/target/__testfixtures__/target-1.input.js (100%) rename lib/{creator => init}/transformations/target/target.js (100%) rename lib/{creator => init}/transformations/target/target.test.js (100%) rename lib/{creator => init}/transformations/top-scope/__snapshots__/top-scope.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/top-scope/__testfixtures__/top-scope-0.input.js (100%) rename {dist/creator => lib/init}/transformations/top-scope/top-scope.js (100%) rename lib/{creator => init}/transformations/top-scope/top-scope.test.js (100%) rename lib/{creator => init}/transformations/watch/__snapshots__/watch.test.js.snap (100%) rename lib/{creator => init}/transformations/watch/__snapshots__/watchOptions.test.js.snap (100%) rename {dist/creator => lib/init}/transformations/watch/__testfixtures__/watch-0.input.js (100%) rename {dist/creator => lib/init}/transformations/watch/__testfixtures__/watch-1.input.js (100%) rename {dist/creator => lib/init}/transformations/watch/__testfixtures__/watch-2.input.js (100%) rename lib/{creator => init}/transformations/watch/watch.js (100%) rename lib/{creator => init}/transformations/watch/watch.test.js (100%) rename lib/{creator => init}/transformations/watch/watchOptions.js (100%) rename lib/{creator => init}/transformations/watch/watchOptions.test.js (100%) diff --git a/dist/creator/index.js b/dist/creator/index.js deleted file mode 100644 index e68049c963a..00000000000 --- a/dist/creator/index.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; - -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 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 -*/ - -function creator(options) { - let env = yeoman.createEnv("webpack", null, new WebpackAdapter()); - 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 -}; diff --git a/dist/creator/transformations/context/context.js b/dist/creator/transformations/context/context.js deleted file mode 100644 index 15926ce0aef..00000000000 --- a/dist/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/dist/creator/transformations/context/context.test.js b/dist/creator/transformations/context/context.test.js deleted file mode 100644 index d21b1d8dec5..00000000000 --- a/dist/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/dist/creator/transformations/devServer/devServer.js b/dist/creator/transformations/devServer/devServer.js deleted file mode 100644 index 14d6b765b5a..00000000000 --- a/dist/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/dist/creator/transformations/devServer/devServer.test.js b/dist/creator/transformations/devServer/devServer.test.js deleted file mode 100644 index 14b3b7d11de..00000000000 --- a/dist/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/dist/creator/transformations/devtool/devtool.js b/dist/creator/transformations/devtool/devtool.js deleted file mode 100644 index 87cf628dc41..00000000000 --- a/dist/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/dist/creator/transformations/devtool/devtool.test.js b/dist/creator/transformations/devtool/devtool.test.js deleted file mode 100644 index 8702e338922..00000000000 --- a/dist/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/dist/creator/transformations/entry/entry.js b/dist/creator/transformations/entry/entry.js deleted file mode 100644 index 8b0970f0eef..00000000000 --- a/dist/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/dist/creator/transformations/entry/entry.test.js b/dist/creator/transformations/entry/entry.test.js deleted file mode 100644 index 1124378369a..00000000000 --- a/dist/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/dist/creator/transformations/externals/externals.js b/dist/creator/transformations/externals/externals.js deleted file mode 100644 index 29b394a1e37..00000000000 --- a/dist/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/dist/creator/transformations/externals/externals.test.js b/dist/creator/transformations/externals/externals.test.js deleted file mode 100644 index a64bceaef78..00000000000 --- a/dist/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/dist/creator/transformations/index.js b/dist/creator/transformations/index.js deleted file mode 100644 index 5768a743ba9..00000000000 --- a/dist/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/dist/creator/transformations/module/module.js b/dist/creator/transformations/module/module.js deleted file mode 100644 index 991a7497e8a..00000000000 --- a/dist/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/dist/creator/transformations/module/module.test.js b/dist/creator/transformations/module/module.test.js deleted file mode 100644 index 278f246c28f..00000000000 --- a/dist/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/dist/creator/transformations/node/node.js b/dist/creator/transformations/node/node.js deleted file mode 100644 index 92a3d31a271..00000000000 --- a/dist/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/dist/creator/transformations/node/node.test.js b/dist/creator/transformations/node/node.test.js deleted file mode 100644 index bfa478d9e19..00000000000 --- a/dist/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/dist/creator/transformations/other/amd.js b/dist/creator/transformations/other/amd.js deleted file mode 100644 index 24d0aa9a24e..00000000000 --- a/dist/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/dist/creator/transformations/other/bail.js b/dist/creator/transformations/other/bail.js deleted file mode 100644 index 1fe4f3bed37..00000000000 --- a/dist/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/dist/creator/transformations/other/cache.js b/dist/creator/transformations/other/cache.js deleted file mode 100644 index ecb9eae8d72..00000000000 --- a/dist/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/dist/creator/transformations/other/other.test.js b/dist/creator/transformations/other/other.test.js deleted file mode 100644 index a976a9ba25f..00000000000 --- a/dist/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/dist/creator/transformations/other/profile.js b/dist/creator/transformations/other/profile.js deleted file mode 100644 index 07f08bea4f7..00000000000 --- a/dist/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/dist/creator/transformations/output/output.js b/dist/creator/transformations/output/output.js deleted file mode 100644 index 1c19f70d095..00000000000 --- a/dist/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/dist/creator/transformations/output/output.test.js b/dist/creator/transformations/output/output.test.js deleted file mode 100644 index 9b7544604b8..00000000000 --- a/dist/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/dist/creator/transformations/performance/performance.js b/dist/creator/transformations/performance/performance.js deleted file mode 100644 index f00c1e21572..00000000000 --- a/dist/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/dist/creator/transformations/performance/performance.test.js b/dist/creator/transformations/performance/performance.test.js deleted file mode 100644 index 61840ca16ff..00000000000 --- a/dist/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/dist/creator/transformations/plugins/plugins.js b/dist/creator/transformations/plugins/plugins.js deleted file mode 100644 index 45c382501f1..00000000000 --- a/dist/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/dist/creator/transformations/plugins/plugins.test.js b/dist/creator/transformations/plugins/plugins.test.js deleted file mode 100644 index 7412024992f..00000000000 --- a/dist/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/dist/creator/transformations/resolve/resolve.js b/dist/creator/transformations/resolve/resolve.js deleted file mode 100644 index 01bba7000e3..00000000000 --- a/dist/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/dist/creator/transformations/resolve/resolve.test.js b/dist/creator/transformations/resolve/resolve.test.js deleted file mode 100644 index 89ecd087957..00000000000 --- a/dist/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/dist/creator/transformations/stats/stats.js b/dist/creator/transformations/stats/stats.js deleted file mode 100644 index d843caf04ee..00000000000 --- a/dist/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/dist/creator/transformations/stats/stats.test.js b/dist/creator/transformations/stats/stats.test.js deleted file mode 100644 index c830ddb38e2..00000000000 --- a/dist/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/dist/creator/transformations/target/target.js b/dist/creator/transformations/target/target.js deleted file mode 100644 index 7b5dca6bed1..00000000000 --- a/dist/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/dist/creator/transformations/target/target.test.js b/dist/creator/transformations/target/target.test.js deleted file mode 100644 index e29d6ab1853..00000000000 --- a/dist/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/dist/creator/transformations/top-scope/top-scope.test.js b/dist/creator/transformations/top-scope/top-scope.test.js deleted file mode 100644 index 728b777c5d3..00000000000 --- a/dist/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/dist/creator/transformations/watch/watch.js b/dist/creator/transformations/watch/watch.js deleted file mode 100644 index ed92c572672..00000000000 --- a/dist/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/dist/creator/transformations/watch/watch.test.js b/dist/creator/transformations/watch/watch.test.js deleted file mode 100644 index ddaec086374..00000000000 --- a/dist/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/dist/creator/transformations/watch/watchOptions.js b/dist/creator/transformations/watch/watchOptions.js deleted file mode 100644 index c7f88cb48ab..00000000000 --- a/dist/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/dist/creator/transformations/watch/watchOptions.test.js b/dist/creator/transformations/watch/watchOptions.test.js deleted file mode 100644 index 33a7d369fc3..00000000000 --- a/dist/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/dist/creator/utils/run-prettier.js b/dist/creator/utils/run-prettier.js deleted file mode 100644 index 5d503eedde0..00000000000 --- a/dist/creator/utils/run-prettier.js +++ /dev/null @@ -1,38 +0,0 @@ -"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 -* @returns fs - Writes a file at given location and prints messages accordingly -*/ - -module.exports = function runPrettier(outputPath, source) { - function validateConfig() { - let prettySource; - 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; - } - return fs.writeFileSync(outputPath, prettySource, "utf8"); - } - return fs.writeFile(outputPath, source, "utf8", validateConfig); -}; diff --git a/dist/creator/utils/validate-options.js b/dist/creator/utils/validate-options.js deleted file mode 100644 index 143e623f63e..00000000000 --- a/dist/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/dist/creator/utils/validate-options.spec.js b/dist/creator/utils/validate-options.spec.js deleted file mode 100644 index fe342e78fa1..00000000000 --- a/dist/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/dist/creator/yeoman/utils/entry.js b/dist/creator/yeoman/utils/entry.js deleted file mode 100644 index 027499c9610..00000000000 --- a/dist/creator/yeoman/utils/entry.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; - -const InputValidate = require("webpack-addons").InputValidate; -const validate = require("./validate"); - -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; -}; diff --git a/dist/creator/yeoman/utils/module.js b/dist/creator/yeoman/utils/module.js deleted file mode 100644 index b9b8660f606..00000000000 --- a/dist/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/dist/creator/yeoman/utils/plugins.js b/dist/creator/yeoman/utils/plugins.js deleted file mode 100644 index bcd523ad462..00000000000 --- a/dist/creator/yeoman/utils/plugins.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = () => { - return ["new UglifyJSPlugin()"]; -}; diff --git a/dist/creator/yeoman/utils/tooltip.js b/dist/creator/yeoman/utils/tooltip.js deleted file mode 100644 index 97bf748a009..00000000000 --- a/dist/creator/yeoman/utils/tooltip.js +++ /dev/null @@ -1,47 +0,0 @@ -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 - * - */`; - } -}; diff --git a/dist/creator/yeoman/utils/validate.js b/dist/creator/yeoman/utils/validate.js deleted file mode 100644 index 9f8f932f7e8..00000000000 --- a/dist/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/dist/creator/yeoman/webpack-adapter.js b/dist/creator/yeoman/webpack-adapter.js deleted file mode 100644 index 4a9262ea848..00000000000 --- a/dist/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/dist/creator/yeoman/webpack-generator.js b/dist/creator/yeoman/webpack-generator.js deleted file mode 100644 index 0c3ffc1ddcf..00000000000 --- a/dist/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/dist/generate-loader/index.js b/dist/generate-loader/index.js index ff83f5f84fa..58e582ccfff 100644 --- a/dist/generate-loader/index.js +++ b/dist/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/dist/generate-loader/loader-generator.js b/dist/generate-loader/loader-generator.js deleted file mode 100644 index 8d5720c69ab..00000000000 --- a/dist/generate-loader/loader-generator.js +++ /dev/null @@ -1,58 +0,0 @@ -var path = require("path"); -var _ = require("lodash"); -var webpackGenerator = require("../utils/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 -}; diff --git a/dist/generate-loader/loader-generator.test.js b/dist/generate-loader/loader-generator.test.js deleted file mode 100644 index 232013598ed..00000000000 --- a/dist/generate-loader/loader-generator.test.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -var makeLoaderName = require("./loader-generator").makeLoaderName; - -describe("makeLoaderName", () => { - it("should kebab-case loader name and append '-loader'", () => { - var loaderName = makeLoaderName("This is a test"); - expect(loaderName).toEqual("this-is-a-test-loader"); - }); - - it("should not modify a properly formatted loader name", () => { - var loaderName = makeLoaderName("properly-named-loader"); - expect(loaderName).toEqual("properly-named-loader"); - }); -}); diff --git a/dist/generate-plugin/index.js b/dist/generate-plugin/index.js index 82fe7dd386d..35f9483138e 100644 --- a/dist/generate-plugin/index.js +++ b/dist/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/dist/generate-plugin/plugin-generator.js b/dist/generate-plugin/plugin-generator.js deleted file mode 100644 index ffc4022119a..00000000000 --- a/dist/generate-plugin/plugin-generator.js +++ /dev/null @@ -1,39 +0,0 @@ -var path = require("path"); -var _ = require("lodash"); -var webpackGenerator = require("../utils/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 -}; diff --git a/dist/initialize.js b/dist/initialize.js deleted file mode 100644 index 732d36ac525..00000000000 --- a/dist/initialize.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/dist/migrate.js b/dist/migrate.js deleted file mode 100644 index eda61c3ab62..00000000000 --- a/dist/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/dist/transformations/__testfixtures__/failing.js b/dist/transformations/__testfixtures__/failing.js deleted file mode 100644 index a52f3ffe703..00000000000 --- a/dist/transformations/__testfixtures__/failing.js +++ /dev/null @@ -1,80 +0,0 @@ -var webpack = require("webpack"); -var nodeEnvironment = process.env.NODE_ENV; -var _ = require("lodash"); - -var config = { - entry: { - lib: "./app/index.js", - email: "./app/email.js" - }, - plugins: [ - new webpack.DefinePlugin({ - INCLUDE_ALL_MODULES: function includeAllModulesGlobalFn(modulesArray, application) { - modulesArray.forEach(function executeModuleIncludesFn(moduleFn) { - moduleFn(application); - }); - }, - ENVIRONMENT: JSON.stringify(nodeEnvironment) - }) - ], - output: { - path: __dirname + "/app", - filename: "bundle.js" - }, - resolve: { - root: __dirname + "/app" - }, - module: { - // preLoaders: [ - // { test: /\.js?$/, loader: 'eslint', exclude: /node_modules/ } - // ], - loaders: [ - { test: /\.js$/, exclude: /(node_modules)/, loader: "babel" }, - { test: /\.html/, exclude: [/(node_modules)/, /src\/index\.html/], loader: "html-loader" }, - { test: /\.s?css$/, loader: "style!css!sass" }, - { test: /\.(png|jpg)$/, loader: "url-loader?mimetype=image/png" } - ] - }, - // extra configuration options. - // eslint: { - // configFile: '.eslintrc.js' - // } -}; - -switch (nodeEnvironment) { - case "production": - config.plugins.push(new webpack.optimize.UglifyJsPlugin()); - case "preproduction": - config.output.path = __dirname + "/dist"; - config.plugins.push(new webpack.optimize.DedupePlugin()); - config.plugins.push(new webpack.optimize.OccurenceOrderPlugin()); - - config.output.filename = "[name].js"; - - config.entry = { - lib: ["./app/index.js", "angular", "lodash"], - email: ["./app/email.js", "angular"] - }; - - config.devtool = "source-map"; - config.output.libraryTarget = "commonjs2"; - break; - - case "test": - config.entry = "./index.js"; - break; - - case "development": - config.entry = { - lib: ["./app/index.js", "webpack/hot/dev-server"], - email: ["./app/email.js", "webpack/hot/dev-server"] - }; - config.output.filename = "[name].js"; - config.devtool = "source-map"; - break; - - default: - console.warn("Unknown or Undefined Node Environment. Please refer to package.json for available build commands."); -} - -module.exports = config; diff --git a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js b/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js deleted file mode 100644 index 56c89e72d84..00000000000 --- a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-0.input.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - new webpack.BannerPlugin('Banner', { raw: true, entryOnly: true }) - ] -} diff --git a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js b/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js deleted file mode 100644 index 0d66b9de1ac..00000000000 --- a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-1.input.js +++ /dev/null @@ -1,4 +0,0 @@ -// Should do nothing if there is no banner plugin -module.exports = { - plugins: [] -} diff --git a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js b/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js deleted file mode 100644 index 90ecde8f0de..00000000000 --- a/dist/transformations/bannerPlugin/__testfixtures__/bannerPlugin-2.input.js +++ /dev/null @@ -1,6 +0,0 @@ -// Only transform if it uses the old format -module.exports = { - plugins: [ - new webpack.BannerPlugin({}) - ] -} diff --git a/dist/transformations/bannerPlugin/bannerPlugin.js b/dist/transformations/bannerPlugin/bannerPlugin.js deleted file mode 100644 index ca38235686c..00000000000 --- a/dist/transformations/bannerPlugin/bannerPlugin.js +++ /dev/null @@ -1,27 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const utils = require("../utils"); - -module.exports = function(j , ast ) { - return utils - .findPluginsByName(j, ast, ["webpack.BannerPlugin"]) - .forEach((path ) => { - const args = path.value.arguments; // any node - // If the first argument is a literal replace it with object notation - // See https://webpack.js.org/guides/migrating/#bannerplugin-breaking-change - if (args && args.length > 1 && args[0].type === j.Literal.name) { - // and remove the first argument - path.value.arguments = [path.value.arguments[1]]; - utils.createOrUpdatePluginByName( - j, - path.parent, - "webpack.BannerPlugin", - { - banner: args[0].value - } - ); - } - }); -}; diff --git a/dist/transformations/bannerPlugin/bannerPlugin.test.js b/dist/transformations/bannerPlugin/bannerPlugin.test.js deleted file mode 100644 index 004d08b6635..00000000000 --- a/dist/transformations/bannerPlugin/bannerPlugin.test.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "bannerPlugin", "bannerPlugin-0"); -defineTest(__dirname, "bannerPlugin", "bannerPlugin-1"); -defineTest(__dirname, "bannerPlugin", "bannerPlugin-2"); diff --git a/dist/transformations/defineTest.js b/dist/transformations/defineTest.js deleted file mode 100644 index b2417c2213e..00000000000 --- a/dist/transformations/defineTest.js +++ /dev/null @@ -1,95 +0,0 @@ -"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 - * @return {TBD} TBD - */ -function runSingleTansform( - dirName, - transformName, - testFilePrefix, - initOptions -) { - 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).toSource({ - quote: "single" - }); - } - return transform(jscodeshift, ast, source).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 {TBD} type TBD - * @return {TBD} TBD - */ -function defineTest(dirName, transformName, testFilePrefix, type) { - const testName = testFilePrefix - ? `transforms correctly using "${testFilePrefix}" data` - : "transforms correctly"; - describe(transformName, () => { - it(testName, () => { - const output = runSingleTansform( - dirName, - transformName, - testFilePrefix, - type - ); - expect(output).toMatchSnapshot(); - }); - }); -} -module.exports = defineTest; diff --git a/dist/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js b/dist/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js deleted file mode 100644 index f578bb4342d..00000000000 --- a/dist/transformations/extractTextPlugin/__testfixtures__/extractTextPlugin.input.js +++ /dev/null @@ -1,16 +0,0 @@ -let ExtractTextPlugin = require('extract-text-webpack-plugin'); -let HTMLWebpackPlugin = require('html-webpack-plugin'); - -module.export = { - module: { - rules: [ - { - test: /\.css$/, - use: ExtractTextPlugin.extract('style-loader', 'css-loader') - } - ] - }, - plugins: [ - new ExtractTextPlugin("styles.css"), - ] -} diff --git a/dist/transformations/extractTextPlugin/extractTextPlugin.js b/dist/transformations/extractTextPlugin/extractTextPlugin.js deleted file mode 100644 index 05807e2ed7f..00000000000 --- a/dist/transformations/extractTextPlugin/extractTextPlugin.js +++ /dev/null @@ -1,58 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - - - - - - - - -const utils = require("../utils"); - -function findInvocation( - j , - node , - pluginName -) { - let found = false; - found = - j(node) - .find(j.MemberExpression) - .filter(p => p.get("object").value.name === pluginName) - .size() > 0; - return found; -} - -module.exports = function(j , ast ) { - const changeArguments = function(p ) { - const args = p.value.arguments; - // if(args.length === 1) { - // return p; - // } else - const literalArgs = args.filter(p => - utils.isType(p, "Literal") - ); - if (literalArgs && literalArgs.length > 1) { - const newArgs = j.objectExpression( - literalArgs.map((p , index ) => - utils.createProperty(j, index === 0 ? "fallback" : "use", p.value) - ) - ); - p.value.arguments = [newArgs]; - } - return p; - }; - const name = utils.findVariableToPlugin( - j, - ast, - "extract-text-webpack-plugin" - ); - if (!name) return ast; - - return ast - .find(j.CallExpression) - .filter((p ) => findInvocation(j, p, name)) - .forEach(changeArguments); -}; diff --git a/dist/transformations/extractTextPlugin/extractTextPlugin.test.js b/dist/transformations/extractTextPlugin/extractTextPlugin.test.js deleted file mode 100644 index 199067becf3..00000000000 --- a/dist/transformations/extractTextPlugin/extractTextPlugin.test.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "extractTextPlugin"); diff --git a/dist/transformations/index.js b/dist/transformations/index.js deleted file mode 100644 index 4af20b33eff..00000000000 --- a/dist/transformations/index.js +++ /dev/null @@ -1,89 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const jscodeshift = require("jscodeshift"); -const pEachSeries = require("p-each-series"); -const PLazy = require("p-lazy"); - -const loadersTransform = require("./loaders/loaders"); -const resolveTransform = require("./resolve/resolve"); -const removeJsonLoaderTransform = require("./removeJsonLoader/removeJsonLoader"); -const uglifyJsPluginTransform = require("./uglifyJsPlugin/uglifyJsPlugin"); -const loaderOptionsPluginTransform = require("./loaderOptionsPlugin/loaderOptionsPlugin"); -const bannerPluginTransform = require("./bannerPlugin/bannerPlugin"); -const extractTextPluginTransform = require("./extractTextPlugin/extractTextPlugin"); -const removeDeprecatedPluginsTransform = require("./removeDeprecatedPlugins/removeDeprecatedPlugins"); - -const transformsObject = { - loadersTransform, - resolveTransform, - removeJsonLoaderTransform, - uglifyJsPluginTransform, - loaderOptionsPluginTransform, - bannerPluginTransform, - extractTextPluginTransform, - removeDeprecatedPluginsTransform -}; - -const transformations = Object.keys(transformsObject).reduce((res, key) => { - res[key] = (ast, source) => - transformSingleAST(ast, source, transformsObject[key]); - return res; -}, {}); - -function transformSingleAST( - ast , - source , - transformFunction -) { - return new PLazy((resolve, reject) => { - setTimeout(() => { - try { - resolve(transformFunction(jscodeshift, ast, source)); - } catch (err) { - reject(err); - } - }, 0); - }); -} - -/* - * @function transform - * - * Tranforms a given source code by applying selected transformations to the AST - * - * @param { String } source - Source file contents - * @param { Array } transformations - List of trnasformation functions in defined the - * order to apply. By default all defined transfomations. - * @param { Object } options - Reacst formatting options - * @returns { String } Transformed source code - * */ -function transform( - source , - transforms , - options -) { - const ast = jscodeshift(source); - const recastOptions = Object.assign( - { - quote: "single" - }, - options - ); - transforms = - transforms || Object.keys(transformations).map(k => transformations[k]); - return pEachSeries(transforms, f => f(ast, source)) - .then(() => { - return ast.toSource(recastOptions); - }) - .catch(err => { - console.error(err); - }); -} - -module.exports = { - transform, - transformSingleAST, - transformations -}; diff --git a/dist/transformations/index.test.js b/dist/transformations/index.test.js deleted file mode 100644 index d1a47393a81..00000000000 --- a/dist/transformations/index.test.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; - -const transform = require("./index").transform; -const transformations = require("./index").transformations; - -const input = ` -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 -}; -`; - -describe("transform", () => { - it("should not transform if no transformations defined", done => { - transform(input, []).then(output => { - expect(output).toEqual(input); - done(); - }); - }); - - it("should transform using all transformations", done => { - transform(input).then(output => { - expect(output).toMatchSnapshot(); - done(); - }); - }); - - it("should transform only using specified transformations", done => { - transform(input, [transformations.loadersTransform]).then(output => { - expect(output).toMatchSnapshot(); - done(); - }); - }); - - it("should respect recast options", done => { - transform(input, undefined, { - quote: "double", - trailingComma: true - }).then(output => { - expect(output).toMatchSnapshot(); - done(); - }); - }); -}); diff --git a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js b/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js deleted file mode 100644 index e809d6a36a9..00000000000 --- a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -// Do not create LoaderOptionsPlugin is not necessary -module.exports = { - plugins: [ - new SomePlugin() - ] -} diff --git a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js b/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js deleted file mode 100644 index 3b8ac854d12..00000000000 --- a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-1.input.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - debug: true, - plugins: [ - new webpack.optimize.UglifyJsPlugin(), - new webpack.LoaderOptionsPlugin({ - foo: 'bar' - }) - ] -} diff --git a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js b/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js deleted file mode 100644 index eea1c515164..00000000000 --- a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-2.input.js +++ /dev/null @@ -1,9 +0,0 @@ -// Don't modify LoaderOptionsPlugin -module.exports = { - plugins: [ - new SomePlugin(), - new webpack.LoaderOptionsPlugin({ - foo: 'bar' - }) - ] -} diff --git a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js b/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js deleted file mode 100644 index 2a3baa56d23..00000000000 --- a/dist/transformations/loaderOptionsPlugin/__testfixtures__/loaderOptionsPlugin-3.input.js +++ /dev/null @@ -1,17 +0,0 @@ -// Don't modify LoaderOptionsPlugin - -const ExtractTextPlugin = require('extract-text-webpack-plugin'); -module.exports = { - entry: ['./index.js'], - output: { - filename: 'bundle.js' - }, - module: { - rules: [{ - test: /\.css$/, - use: ExtractTextPlugin.extract([ - 'css-loader' - ]) - }] - }, -} diff --git a/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js b/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js deleted file mode 100644 index fff3f28a4a7..00000000000 --- a/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.js +++ /dev/null @@ -1,41 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const isEmpty = require("lodash/isEmpty"); -const findPluginsByName = require("../utils").findPluginsByName; -const createOrUpdatePluginByName = require("../utils") - .createOrUpdatePluginByName; -const safeTraverse = require("../utils").safeTraverse; - -module.exports = function(j , ast ) { - const loaderOptions = {}; - - // If there is debug: true, set debug: true in the plugin - // TODO: remove global debug setting - // TODO: I can't figure out how to find the topmost `debug: true`. help! - if (ast.find(j.Identifier, { name: "debug" }).size()) { - loaderOptions.debug = true; - } - - // If there is UglifyJsPlugin, set minimize: true - if (findPluginsByName(j, ast, ["webpack.optimize.UglifyJsPlugin"]).size()) { - loaderOptions.minimize = true; - } - - return ast - .find(j.ArrayExpression) - .filter( - (path ) => - safeTraverse(path, ["parent", "value", "key", "name"]) === "plugins" - ) - .forEach((path ) => { - !isEmpty(loaderOptions) && - createOrUpdatePluginByName( - j, - path, - "webpack.LoaderOptionsPlugin", - loaderOptions - ); - }); -}; diff --git a/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js b/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js deleted file mode 100644 index bb3c78de07c..00000000000 --- a/dist/transformations/loaderOptionsPlugin/loaderOptionsPlugin.test.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-0"); -defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-1"); -defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-2"); -defineTest(__dirname, "loaderOptionsPlugin", "loaderOptionsPlugin-3"); diff --git a/dist/transformations/loaders/__testfixtures__/loaders-0.input.js b/dist/transformations/loaders/__testfixtures__/loaders-0.input.js deleted file mode 100644 index e0d498f6506..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-0.input.js +++ /dev/null @@ -1,65 +0,0 @@ -export default [{ - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel' - }] - } -}, { - module: { - loaders: [{ - test: /\.css$/, - loader: 'style!css?modules&importLoaders=1&string=test123' - }] - } -}, { - module: { - loaders: [{ - test: /\.css$/, - loaders: [{ - loader: 'style' - }, { - loader: 'css', - query: { - modules: true - } - }] - }] - } -}, { - module: { - preLoaders:[{ - test: /\.js$/, - loader: 'eslint' - }] - } -}, { - module: { - postLoaders:[{ - test: /\.js$/, - loader: 'my-post' - }] - } -}, { - module: { - preLoaders:[{ - test: /\.js$/, - loader: 'eslint-loader' - }], - loaders: [{ - test: /\.js$/, - loader: 'babel-loader' - }] - } -}, { - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel-loader' - }], - postLoaders:[{ - test: /\.js$/, - loader: 'my-post-loader' - }] - } -}]; diff --git a/dist/transformations/loaders/__testfixtures__/loaders-1.input.js b/dist/transformations/loaders/__testfixtures__/loaders-1.input.js deleted file mode 100644 index eae75024e61..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-1.input.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - module: { - loaders: [{ - test: /\.css$/, - loader: 'style!css?modules&importLoaders=1&string=test123' - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-2.input.js b/dist/transformations/loaders/__testfixtures__/loaders-2.input.js deleted file mode 100644 index 771404a300c..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-2.input.js +++ /dev/null @@ -1,15 +0,0 @@ -export default { - module: { - loaders: [{ - test: /\.css$/, - loaders: [{ - loader: 'style' - }, { - loader: 'css', - query: { - modules: true - } - }] - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-3.input.js b/dist/transformations/loaders/__testfixtures__/loaders-3.input.js deleted file mode 100644 index 4d49e89a89b..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-3.input.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - module: { - preLoaders:[{ - test: /\.js$/, - loader: 'eslint' - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-4.input.js b/dist/transformations/loaders/__testfixtures__/loaders-4.input.js deleted file mode 100644 index cc3e076bed9..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-4.input.js +++ /dev/null @@ -1,8 +0,0 @@ -export default { - module: { - postLoaders:[{ - test: /\.js$/, - loader: 'my-post' - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-5.input.js b/dist/transformations/loaders/__testfixtures__/loaders-5.input.js deleted file mode 100644 index 6fd315e4d08..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-5.input.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - module: { - preLoaders:[{ - test: /\.js$/, - loader: 'eslint-loader' - }], - loaders: [{ - test: /\.js$/, - loader: 'babel-loader' - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-6.input.js b/dist/transformations/loaders/__testfixtures__/loaders-6.input.js deleted file mode 100644 index 184e4e1ad08..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-6.input.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel-loader' - }], - postLoaders:[{ - test: /\.js$/, - loader: 'my-post-loader' - }] - } -} diff --git a/dist/transformations/loaders/__testfixtures__/loaders-7.input.js b/dist/transformations/loaders/__testfixtures__/loaders-7.input.js deleted file mode 100644 index f3c2915e2f8..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-7.input.js +++ /dev/null @@ -1,14 +0,0 @@ -export default { - module: { - loaders: [ - { - test: /\.js$/, - exclude: /(node_modules)/, - loader: 'babel-loader', - query: { - presets: ['env'] - } - } - ] - } -}; diff --git a/dist/transformations/loaders/__testfixtures__/loaders-8.input.js b/dist/transformations/loaders/__testfixtures__/loaders-8.input.js deleted file mode 100644 index 737e4515fca..00000000000 --- a/dist/transformations/loaders/__testfixtures__/loaders-8.input.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - module: { - loaders: [ - { - test: /\.js$/, - loaders: [ - 'style', - 'css?modules&importLoaders=1&string=test123' - ], - include: path.join(__dirname, 'src') - } - ] - } -} diff --git a/dist/transformations/loaders/loaders.js b/dist/transformations/loaders/loaders.js deleted file mode 100644 index f8175344562..00000000000 --- a/dist/transformations/loaders/loaders.js +++ /dev/null @@ -1,314 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - - - - - - - - - -const utils = require("../utils"); - -module.exports = function(j , ast ) { - /** - * 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' - * }] - * } - * @param {Node} path Must be an ObjectExpression - * @return {Node} [] - */ - const createArrayExpressionFromArray = function( - path - ) { - const value = path.value; - // Find paths with `loaders` keys in the given Object - const paths = value.properties.filter((prop ) => - prop.key.name.startsWith("loader") - ); - // For each pair of key and value - paths.forEach((pair ) => { - // Replace 'loaders' Identifier with 'use' - pair.key.name = "use"; - // If the value is an Array - if (pair.value.type === j.ArrayExpression.name) { - // replace its elements - const pairValue = pair.value; - pair.value = j.arrayExpression( - pairValue.elements.map(arrElement => { - // If items of the array are Strings - if (arrElement.type === j.Literal.name) { - // Replace with `{ loader: LOADER }` Object - return j.objectExpression([ - utils.createProperty(j, "loader", arrElement.value) - ]); - } - // otherwise keep the existing element - return arrElement; - }) - ); - // If the value is String of loaders like 'style!css' - } else if (pair.value.type === j.Literal.name) { - // Replace it with Array expression of loaders - const literalValue = pair.value; - pair.value = j.arrayExpression( - literalValue.value.split("!").map(loader => { - return j.objectExpression([ - utils.createProperty(j, "loader", loader) - ]); - }) - ); - } - }); - return path; - }; - - const createLoaderWithQuery = ( - p - ) => { - let properties = p.value.properties; - let loaderValue = properties.reduce( - (val, prop) => (prop.key.name === "loader" ? prop.value.value : val), - "" - ); - let loader = loaderValue.split("?")[0]; - let query = loaderValue.split("?")[1]; - let options = query.split("&").map(option => { - const param = option.split("="); - const key = param[0]; - const val = param[1] || true; // No value in query string means it is truthy value - return j.objectProperty(j.identifier(key), utils.createLiteral(j, val)); - }); - let loaderProp = utils.createProperty(j, "loader", loader); - let queryProp = j.property( - "init", - j.identifier("options"), - j.objectExpression(options) - ); - return j.objectExpression([loaderProp, queryProp]); - }; - - const findLoaderWithQueryString = (p ) => { - return p.value.properties.reduce((predicate, prop) => { - return ( - (utils.safeTraverse(prop, ["value", "value", "indexOf"]) && - prop.value.value.indexOf("?") > -1) || - predicate - ); - }, false); - }; - - /** - * If the path value is `loaders` and it's located in `module` object - * we assume it's the loader's section - * - * @param {Node} path [description] - * @return {Node} [description] - */ - const checkForLoader = path => - path.value.name === "loaders" && - utils.safeTraverse(path, [ - "parent", - "parent", - "parent", - "node", - "key", - "name" - ]) === "module"; - - /** - * Puts node path that is pre- or postLoader into `enforce` key - * - * @param {Node} p [] - * @returns {*} [] - */ - const fitIntoLoaders = ( - p - ) => { - let loaders; - p.value.properties.map(prop => { - const keyName = prop.key.name; - if (keyName === "loaders") { - loaders = prop.value; - } - }); - p.value.properties.map(prop => { - const keyName = prop.key.name; - if (keyName !== "loaders") { - const enforceVal = keyName === "preLoaders" ? "pre" : "post"; - prop.value.elements.map(elem => { - elem.properties.push(utils.createProperty(j, "enforce", enforceVal)); - if (loaders && loaders.type === "ArrayExpression") { - loaders.elements.push(elem); - } else { - prop.key.name = "loaders"; - } - }); - } - }); - if (loaders) { - p.value.properties = p.value.properties.filter( - prop => prop.key.name === "loaders" - ); - } - return p; - }; - - /** - * Find pre and postLoaders - * - * @param {[type]} IPath [description] - * @return {[type]} [description] - */ - const prepostLoaders = () => - ast - .find(j.ObjectExpression) - .filter(p => utils.findObjWithOneOfKeys(p, ["preLoaders", "postLoaders"])) - .forEach(fitIntoLoaders); - - /** - * Convert top level `loaders` to `rules` - * See https://webpack.js.org/configuration/module/#module-rules - * @param {[type]} IPath [description] - * @return {[type]} [description] - */ - const loadersToRules = () => - ast - .find(j.Identifier) - .filter(checkForLoader) - .forEach((p ) => (p.value.name = "rules")); - - /** - * Converts 'loader' and 'loaders' to Array of {Rule.Use} - * - * @returns {Node} [] - */ - const loadersToArrayExpression = () => - ast - .find(j.ObjectExpression) - .filter(path => utils.findObjWithOneOfKeys(path, ["loader", "loaders"])) - .filter( - path => - utils.safeTraverse(path, [ - "parent", - "parent", - "node", - "key", - "name" - ]) === "rules" - ) - .forEach(createArrayExpressionFromArray); - - /** - * Finds loaders with options encoded as query string and replaces it with options obejct - * - * i.e. for loader like - * - * { - * loader: 'css?modules&importLoaders=1&string=test123' - * } - * - * it should generate - * { - * loader: 'css-loader', - * options: { - * modules: true, - * importLoaders: 1, - * string: 'test123' - * } - * } - * - * @type {[type]} - * @returns {Node} [] - */ - const loaderWithQueryParam = () => - ast - .find(j.ObjectExpression) - .filter(p => utils.findObjWithOneOfKeys(p, ["loader"])) - .filter(findLoaderWithQueryString) - .replaceWith(createLoaderWithQuery); - - /** - * Finds nodes with `query` key and replaces it with `options` - * - * i.e. for - * { - * query: { ... } - * } - * - * it should generate - * - * { - * options: { ... } - * } - * @returns {Node} [] - */ - const loaderWithQueryProp = () => - ast - .find(j.Identifier) - .filter(p => p.value.name === "query") - .replaceWith(j.identifier("options")); - - /** - * Adds required `-loader` suffix to loader with missing suffix - * i.e. for `babel` it should generate `babel-loader` - * @returns {Node} [] - */ - const addLoaderSuffix = () => - ast.find(j.ObjectExpression).forEach(path => { - path.value.properties.forEach(prop => { - if ( - prop.key.name === "loader" && - utils.safeTraverse(prop, ["value", "value"]) && - !prop.value.value.endsWith("-loader") - ) { - prop.value = j.literal(prop.value.value + "-loader"); - } - }); - }); - - const transforms = [ - prepostLoaders, - loadersToRules, - loadersToArrayExpression, - loaderWithQueryParam, - loaderWithQueryProp, - addLoaderSuffix - ]; - transforms.forEach(t => t()); - - return ast; -}; diff --git a/dist/transformations/loaders/loaders.test.js b/dist/transformations/loaders/loaders.test.js deleted file mode 100644 index 90d36acda2a..00000000000 --- a/dist/transformations/loaders/loaders.test.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "loaders", "loaders-0"); -defineTest(__dirname, "loaders", "loaders-1"); -defineTest(__dirname, "loaders", "loaders-2"); -defineTest(__dirname, "loaders", "loaders-3"); -defineTest(__dirname, "loaders", "loaders-4"); -defineTest(__dirname, "loaders", "loaders-5"); -defineTest(__dirname, "loaders", "loaders-6"); -defineTest(__dirname, "loaders", "loaders-7"); -defineTest(__dirname, "loaders", "loaders-8"); diff --git a/dist/transformations/outputPath/__testfixtures__/outputPath-0.input.js b/dist/transformations/outputPath/__testfixtures__/outputPath-0.input.js deleted file mode 100644 index 085268fadbe..00000000000 --- a/dist/transformations/outputPath/__testfixtures__/outputPath-0.input.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - output: { - path: 'dist' - } -} diff --git a/dist/transformations/outputPath/__testfixtures__/outputPath-1.input.js b/dist/transformations/outputPath/__testfixtures__/outputPath-1.input.js deleted file mode 100644 index c7a0ed58e7a..00000000000 --- a/dist/transformations/outputPath/__testfixtures__/outputPath-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -const path = require('path'); -module.exports = { - output: { - path: path.join(__dirname, 'dist') - } -} diff --git a/dist/transformations/outputPath/__testfixtures__/outputPath-2.input.js b/dist/transformations/outputPath/__testfixtures__/outputPath-2.input.js deleted file mode 100644 index de8436ae6c3..00000000000 --- a/dist/transformations/outputPath/__testfixtures__/outputPath-2.input.js +++ /dev/null @@ -1,6 +0,0 @@ -const p = require('path'); -module.exports = { - output: { - path: 'dist' - } -} diff --git a/dist/transformations/outputPath/outputPath.js b/dist/transformations/outputPath/outputPath.js deleted file mode 100644 index 0f08c6694c4..00000000000 --- a/dist/transformations/outputPath/outputPath.js +++ /dev/null @@ -1,73 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const utils = require("../utils"); - -module.exports = function(j , ast ) { - const literalOutputPath = ast - .find(j.ObjectExpression) - .filter( - (p ) => - utils.safeTraverse(p, ["parentPath", "value", "key", "name"]) === - "output" - ) - .find(j.Property) - .filter( - (p ) => - utils.safeTraverse(p, ["value", "key", "name"]) === "path" && - utils.safeTraverse(p, ["value", "value", "type"]) === "Literal" - ); - - if (literalOutputPath) { - let pathVarName = "path"; - let isPathPresent = false; - const pathDecalaration = ast - .find(j.VariableDeclarator) - .filter( - (p ) => - utils.safeTraverse(p, ["value", "init", "callee", "name"]) === - "require" - ) - .filter( - (p ) => - utils.safeTraverse(p, ["value", "init", "arguments"]) && - p.value.init.arguments.reduce((isPresent, a) => { - return (a.type === "Literal" && a.value === "path") || isPresent; - }, false) - ); - - if (pathDecalaration) { - isPathPresent = true; - pathDecalaration.forEach(p => { - pathVarName = utils.safeTraverse(p, ["value", "id", "name"]); - }); - } - const finalPathName = (pathVarName ); - literalOutputPath - .find(j.Literal) - .replaceWith((p ) => replaceWithPath(j, p, finalPathName)); - - if (!isPathPresent) { - const pathRequire = (utils.getRequire(j, "path", "path") ); - return ast - .find(j.Program) - .replaceWith(p => - j.program([].concat(pathRequire).concat(p.value.body)) - ); - } - } - return ast; -}; - -function replaceWithPath( - j , - p , - pathVarName -) { - const convertedPath = j.callExpression( - j.memberExpression(j.identifier(pathVarName), j.identifier("join"), false), - [j.identifier("__dirname"), p.value] - ); - return convertedPath; -} diff --git a/dist/transformations/outputPath/outputPath.test.js b/dist/transformations/outputPath/outputPath.test.js deleted file mode 100644 index 1312905c074..00000000000 --- a/dist/transformations/outputPath/outputPath.test.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "outputPath", "outputPath-0"); -defineTest(__dirname, "outputPath", "outputPath-1"); -defineTest(__dirname, "outputPath", "outputPath-2"); diff --git a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js b/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js deleted file mode 100644 index 133c4984bfd..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -// Works for OccurrenceOrderPlugin -module.exports = { - plugins: [ - new webpack.optimize.OccurrenceOrderPlugin(), - ] -} diff --git a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js b/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js deleted file mode 100644 index a64dab79b37..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -// Works for DedupePlugin -module.exports = { - plugins: [ - new webpack.optimize.DedupePlugin(), - ] -} diff --git a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js b/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js deleted file mode 100644 index 26150117db4..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-2.input.js +++ /dev/null @@ -1,8 +0,0 @@ -// Doesn't remove unmatched plugins -module.exports = { - plugins: [ - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.optimize.UglifyJsPlugin(), - new webpack.optimize.DedupePlugin() - ] -} diff --git a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js b/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js deleted file mode 100644 index 1d5194460e3..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-3.input.js +++ /dev/null @@ -1,7 +0,0 @@ -// This should throw -export default (config) => { - config.plugins.push(new webpack.optimize.UglifyJsPlugin()); - config.plugins.push(new webpack.optimize.DedupePlugin()); - config.plugins.push(new webpack.optimize.OccurrenceOrderPlugin()); - return config -} diff --git a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js b/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js deleted file mode 100644 index fab47caf971..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/__testfixtures__/removeDeprecatedPlugins-4.input.js +++ /dev/null @@ -1,8 +0,0 @@ -// This should throw -const inst = new webpack.optimize.OccurrenceOrderPlugin() -export default (config) => { - config.plugins = [ - inst - ] - return config -} diff --git a/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js b/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js deleted file mode 100644 index 97d101bfa44..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.js +++ /dev/null @@ -1,59 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const codeFrame = require("babel-code-frame"); -const chalk = require("chalk"); -const utils = require("../utils"); - -const example = `plugins: [ - new webpack.optimize.OccurrenceOrderPlugin(), - new webpack.optimize.UglifyJsPlugin(), - new webpack.optimize.DedupePlugin() -]`; - -module.exports = function(j , ast , source ) { - // List of deprecated plugins to remove - // each item refers to webpack.optimize.[NAME] construct - const deprecatedPlugingsList = [ - "webpack.optimize.OccurrenceOrderPlugin", - "webpack.optimize.DedupePlugin" - ]; - - return utils - .findPluginsByName(j, ast, deprecatedPlugingsList) - .forEach((path ) => { - // For now we only support the case there plugins are defined in an Array - const arrayPath = utils.safeTraverse(path, [ - "parent", - "value" - ]); - if (arrayPath && utils.isType(arrayPath, "ArrayExpression")) { - // Check how many plugins are defined and - // if there is only last plugin left remove `plugins: []` node - const arrayElementsPath = utils.safeTraverse(arrayPath, ["elements"]); - if (arrayElementsPath && arrayElementsPath.length === 1) { - j(path.parent.parent).remove(); - } else { - j(path).remove(); - } - } else { - const startLoc = path.value.loc.start; - console.log(` -${chalk.red( - "Only plugins instantiated in the array can be automatically removed i.e.:" - )} - -${codeFrame(example, null, null, { highlightCode: true })} - -${chalk.red("but you use it like this:")} - -${codeFrame(source, startLoc.line, startLoc.column, { highlightCode: true })} - -${chalk.red("Please remove deprecated plugins manually. ")} -See ${chalk.underline( - "https://webpack.js.org/guides/migrating/" - )} for more information.`); - } - }); -}; diff --git a/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js b/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js deleted file mode 100644 index e029dff487d..00000000000 --- a/dist/transformations/removeDeprecatedPlugins/removeDeprecatedPlugins.test.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-0"); -defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-1"); -defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-2"); -defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-3"); -defineTest(__dirname, "removeDeprecatedPlugins", "removeDeprecatedPlugins-4"); diff --git a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js b/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js deleted file mode 100644 index 48517948142..00000000000 --- a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-0.input.js +++ /dev/null @@ -1,19 +0,0 @@ -export default { - module: { - rules: [{ - test: /\.yml/, - use: [ - { - loader: 'json-loader' - }, - { - loader: 'another-loader' - }, - { - loader: 'yml-loader' - } - ] - }] - } -} - diff --git a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js b/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js deleted file mode 100644 index 1040b5ff919..00000000000 --- a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-1.input.js +++ /dev/null @@ -1,12 +0,0 @@ -export default { - module: { - rules: [{ - test: /\.yml/, - use: [{ - loader: 'json-loader' - }, { - loader: 'yml-loader' - }] - }] - } -} diff --git a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js b/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js deleted file mode 100644 index 39b473705d0..00000000000 --- a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-2.input.js +++ /dev/null @@ -1,10 +0,0 @@ -export default { - module: { - rules: [ - { - test: /\.json/, - loader: 'json-loader' - } - ] - } -} diff --git a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js b/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js deleted file mode 100644 index be47fd92ee2..00000000000 --- a/dist/transformations/removeJsonLoader/__testfixtures__/removeJsonLoader-3.input.js +++ /dev/null @@ -1,11 +0,0 @@ -export default { - module: { - rules: [{ - test: /\.json/, - use: [{ - loader: 'json-loader' - }] - }] - } -} - diff --git a/dist/transformations/removeJsonLoader/removeJsonLoader.js b/dist/transformations/removeJsonLoader/removeJsonLoader.js deleted file mode 100644 index 0867bae9fa5..00000000000 --- a/dist/transformations/removeJsonLoader/removeJsonLoader.js +++ /dev/null @@ -1,60 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - - - - - - -const utils = require("../utils"); - -module.exports = function(j , ast ) { - function removeLoaderByName(path , name ) { - const loadersNode = path.value.value; - switch (loadersNode.type) { - case j.ArrayExpression.name: { - let loaders = (loadersNode ).elements.map(p => { - return utils.safeTraverse(p, ["properties", "0", "value", "value"]); - }); - const loaderIndex = loaders.indexOf(name); - if (loaders.length && loaderIndex > -1) { - // Remove loader from the array - loaders.splice(loaderIndex, 1); - // and from AST - loadersNode.elements.splice(loaderIndex, 1); - } - - // If there are no loaders left, remove the whole Rule object - if (loaders.length === 0) { - j(path.parent).remove(); - } - break; - } - case j.Literal.name: { - // If only the loader with the matching name was used - // we can remove the whole Property node completely - if ((loadersNode ).value === name) { - j(path.parent).remove(); - } - break; - } - } - } - - function removeLoaders(ast ) { - ast - .find(j.Property, { key: { name: "use" } }) - .forEach((path ) => removeLoaderByName(path, "json-loader")); - - ast - .find(j.Property, { key: { name: "loader" } }) - .forEach((path ) => removeLoaderByName(path, "json-loader")); - } - - const transforms = [removeLoaders]; - - transforms.forEach(t => t(ast)); - - return ast; -}; diff --git a/dist/transformations/removeJsonLoader/removeJsonLoader.test.js b/dist/transformations/removeJsonLoader/removeJsonLoader.test.js deleted file mode 100644 index a448e68bf02..00000000000 --- a/dist/transformations/removeJsonLoader/removeJsonLoader.test.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-0"); -defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-1"); -defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-2"); -defineTest(__dirname, "removeJsonLoader", "removeJsonLoader-3"); diff --git a/dist/transformations/resolve/__testfixtures__/resolve.input.js b/dist/transformations/resolve/__testfixtures__/resolve.input.js deleted file mode 100644 index 2b83fcf26ce..00000000000 --- a/dist/transformations/resolve/__testfixtures__/resolve.input.js +++ /dev/null @@ -1,20 +0,0 @@ -import path from 'path'; - -export default [{ - resolve: { - root: path.resolve('/src') - } -}, { - resolve: { - root: [path.resolve('/src')] - } -}, { - resolve: { - root: [path.resolve('/src'), 'node_modules'] - } -}, { - resolve: { - root: path.resolve('/src'), - modules: ['node_modules'] - } -}]; diff --git a/dist/transformations/resolve/resolve.js b/dist/transformations/resolve/resolve.js deleted file mode 100644 index 797671e83ec..00000000000 --- a/dist/transformations/resolve/resolve.js +++ /dev/null @@ -1,68 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - - - - - - - -module.exports = function transformer(j , ast ) { - const getRootVal = ( - p - ) => { - return p.node.value.properties.filter(prop => prop.key.name === "root")[0]; - }; - - const getRootIndex = p => { - return p.node.value.properties.reduce((rootIndex, prop, index) => { - return prop.key.name === "root" ? index : rootIndex; - }, -1); - }; - - const isModulePresent = (p ) => { - const modules = p.node.value.properties.filter( - prop => prop.key.name === "modules" - ); - return modules.length > 0 && modules[0]; - }; - - const createModuleArray = ( - p - ) => { - const rootVal = getRootVal(p); - let modulesVal = null; - if (rootVal.value.type === "ArrayExpression") { - modulesVal = rootVal.value.elements; - } else { - modulesVal = [rootVal.value]; - } - let module = isModulePresent(p); - - if (!module) { - module = j.property( - "init", - j.identifier("modules"), - j.arrayExpression(modulesVal) - ); - p.node.value.properties = p.node.value.properties.concat([module]); - } else { - module.value.elements = module.value.elements.concat(modulesVal); - } - const rootIndex = getRootIndex(p); - p.node.value.properties.splice(rootIndex, 1); - return p; - }; - - return ast - .find(j.Property) - .filter((p ) => { - return ( - p.node.key.name === "resolve" && - p.node.value.properties.filter(prop => prop.key.name === "root") - .length === 1 - ); - }) - .forEach(createModuleArray); -}; diff --git a/dist/transformations/resolve/resolve.test.js b/dist/transformations/resolve/resolve.test.js deleted file mode 100644 index 9cbd9d22957..00000000000 --- a/dist/transformations/resolve/resolve.test.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "resolve"); diff --git a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js b/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js deleted file mode 100644 index 900f7042075..00000000000 --- a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-0.input.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: [ - new webpack.optimize.UglifyJsPlugin() - ] -} diff --git a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js b/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js deleted file mode 100644 index 57d7eb1c192..00000000000 --- a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - devtool: "source-map", - plugins: [ - new webpack.optimize.UglifyJsPlugin({}) - ] -} diff --git a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js b/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js deleted file mode 100644 index 3c13f02b203..00000000000 --- a/dist/transformations/uglifyJsPlugin/__testfixtures__/uglifyJsPlugin-2.input.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - devtool: "cheap-source-map", - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - compress: {} - }) - ] -} diff --git a/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.js b/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.js deleted file mode 100644 index cadddba29f8..00000000000 --- a/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.js +++ /dev/null @@ -1,28 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - -const findPluginsByName = require("../utils").findPluginsByName; - -module.exports = function(j , ast ) { - 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/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js b/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js deleted file mode 100644 index 4b43262cbdc..00000000000 --- a/dist/transformations/uglifyJsPlugin/uglifyJsPlugin.test.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -const defineTest = require("../defineTest"); - -defineTest(__dirname, "uglifyJsPlugin", "uglifyJsPlugin-0"); -defineTest(__dirname, "uglifyJsPlugin", "uglifyJsPlugin-1"); -defineTest(__dirname, "uglifyJsPlugin", "uglifyJsPlugin-2"); diff --git a/dist/transformations/utils.js b/dist/transformations/utils.js deleted file mode 100644 index 61115bba5ae..00000000000 --- a/dist/transformations/utils.js +++ /dev/null @@ -1,630 +0,0 @@ -// -// eslint-disable-next-line node/no-unsupported-features - - - - - - - - - - - -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 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) - ); - } -} - -/* -* @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 - * */ -function findPluginsByName( - j , - node , - pluginNamesArray -) { - return node.find(j.NewExpression).filter(path => { - return pluginNamesArray.some( - plugin => - memberExpressionToPathString(path.get("callee").value) === plugin - ); - }); -} - -/* - * @function findPluginsRootNodes - * - * Finds the path to the `plugins: []` node - * - * @param j — jscodeshift API - * @param { Node } node - Node to start search from - * @returns Path - * */ -function findPluginsRootNodes( - j , - node -) { - return node.find(j.Property, { key: { name: "plugins" } }); -} - -/* - * @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 - * */ -function createProperty( - j , - key , - value -) { - return j.property( - "init", - createIdentifierOrLiteral(j, key), - createLiteral(j, value) - ); -} - -/* - * @function createLiteral - * - * Creates an appropriate literal property - * - * @param 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); -} - -/* - * @function createIdentifierOrLiteral - * - * Creates an appropriate identifier or literal property - * - * @param j — jscodeshift API - * @param { string | boolean | number } val - * @returns { Node } - * */ - -function createIdentifierOrLiteral(j , val ) { - // IPath | IPath 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); -} -/* - * @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 - * */ -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); - } -} - -/* - * @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"` - * */ - -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; -} - -/* -* @function isType -* -* 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); -} - -/* -* @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 -*/ - -function getRequire( - j , - constName , - packagePath -) { - return j.variableDeclaration("const", [ - j.variableDeclarator( - j.identifier(constName), - j.callExpression(j.identifier("require"), [j.literal(packagePath)]) - ) - ]); -} - -/* -* @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 -*/ - -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); - } -} - -/* -* @function createEmptyArrayProperty -* -* Creates an empty array -* @param j — jscodeshift API -* @param { String } key - st name -* @returns - { Array } arr - An empty array -*/ -function createEmptyArrayProperty( - j , - key -) { - 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 -*/ - -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; -} - -/* -* @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 -*/ - -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); - } - }); -} - -/* -* @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 -*/ - -function createObjectWithSuppliedProperty( - j , - key , - prop -) { - 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 -*/ - -function createExternalRegExp(j , prop ) { - 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 -*/ - -function pushCreateProperty( - j , - p , - key , - val -) { - let property ; - if (val.hasOwnProperty("type")) { - property = val; - } else { - property = createIdentifierOrLiteral(j, val); - } - 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 -*/ - -function pushObjectKeys( - j , - p , - webpackProperties , - name -) { - 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]) - ); - } else if (Array.isArray(webpackProperties[webpackProp])) { - 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 { - pushCreateProperty(j, prop, webpackProp, j.objectExpression([])); - return pushObjectKeys( - j, - prop, - webpackProperties[webpackProp], - webpackProp - ); - } - }); - }); -} - -/* -* @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 -*/ - -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); - } - } -} - -module.exports = { - safeTraverse, - createProperty, - findPluginsByName, - findPluginsRootNodes, - createOrUpdatePluginByName, - findVariableToPlugin, - isType, - createLiteral, - createIdentifierOrLiteral, - findObjWithOneOfKeys, - getRequire, - checkIfExistsAndAddValue, - createArrayWithChildren, - createEmptyArrayProperty, - createObjectWithSuppliedProperty, - createExternalRegExp, - pushCreateProperty, - pushObjectKeys, - isAssignment, - loopThroughObjects -}; diff --git a/dist/transformations/utils.test.js b/dist/transformations/utils.test.js deleted file mode 100644 index a70091a40e2..00000000000 --- a/dist/transformations/utils.test.js +++ /dev/null @@ -1,358 +0,0 @@ -"use strict"; - -const j = require("jscodeshift/dist/core"); -const utils = require("./utils"); - -describe("utils", () => { - describe("createProperty", () => { - it("should create properties for Boolean", () => { - const res = utils.createProperty(j, "foo", true); - expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); - }); - - it("should create properties for Number", () => { - const res = utils.createProperty(j, "foo", -1); - expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); - }); - - it("should create properties for String", () => { - const res = utils.createProperty(j, "foo", "bar"); - expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); - }); - - xit("should create properties for complex keys", () => { - const res = utils.createProperty(j, "foo-bar", "bar"); - expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); - }); - - it("should create properties for non-literal keys", () => { - const res = utils.createProperty(j, 1, "bar"); - expect(j(j.objectExpression([res])).toSource()).toMatchSnapshot(); - }); - }); - - describe("findPluginsByName", () => { - it("should find plugins in AST", () => { - const ast = j(` -{ foo: new webpack.optimize.UglifyJsPlugin() } -`); - const res = utils.findPluginsByName(j, ast, [ - "webpack.optimize.UglifyJsPlugin" - ]); - expect(res.size()).toEqual(1); - }); - - it("should find all plugins in AST", () => { - const ast = j(` -[ - new UglifyJsPlugin(), - new TestPlugin() -] -`); - const res = utils.findPluginsByName(j, ast, [ - "UglifyJsPlugin", - "TestPlugin" - ]); - expect(res.size()).toEqual(2); - }); - - it("should not find false positives", () => { - const ast = j(` -{ foo: new UglifyJsPlugin() } -`); - const res = utils.findPluginsByName(j, ast, [ - "webpack.optimize.UglifyJsPlugin" - ]); - expect(res.size()).toEqual(0); - }); - }); - - describe("findPluginsRootNodes", () => { - it("should find plugins: [] nodes", () => { - const ast = j(` -var a = { plugins: [], foo: { plugins: [] } } -`); - const res = utils.findPluginsRootNodes(j, ast); - expect(res.size()).toEqual(2); - }); - - it("should not find plugins: [] nodes", () => { - const ast = j(` -var a = { plugs: [] } -`); - const res = utils.findPluginsRootNodes(j, ast); - expect(res.size()).toEqual(0); - }); - }); - - describe("createOrUpdatePluginByName", () => { - it("should create a new plugin without arguments", () => { - const ast = j("{ plugins: [] }"); - ast.find(j.ArrayExpression).forEach(node => { - utils.createOrUpdatePluginByName(j, node, "Plugin"); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - - it("should create a new plugin with arguments", () => { - const ast = j("{ plugins: [] }"); - ast.find(j.ArrayExpression).forEach(node => { - utils.createOrUpdatePluginByName(j, node, "Plugin", { - foo: "bar" - }); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - - it("should add an object as an argument", () => { - const ast = j("[new Plugin()]"); - ast.find(j.ArrayExpression).forEach(node => { - utils.createOrUpdatePluginByName(j, node, "Plugin", { - foo: true - }); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - - it("should merge options objects", () => { - const ast = j("[new Plugin({ foo: true })]"); - ast.find(j.ArrayExpression).forEach(node => { - utils.createOrUpdatePluginByName(j, node, "Plugin", { - bar: "baz", - foo: false - }); - utils.createOrUpdatePluginByName(j, node, "Plugin", { - "baz-long": true - }); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - - describe("findVariableToPlugin", () => { - it("should find the variable name of a plugin", () => { - const ast = j(` - var packageName = require('package-name'); - var someOtherVar = somethingElse; - var otherPackage = require('other-package'); - `); - const foundVar = utils.findVariableToPlugin(j, ast, "other-package"); - expect(foundVar).toEqual("otherPackage"); - }); - }); - - describe("createLiteral", () => { - it("should create basic literal", () => { - const literal = utils.createLiteral(j, "stringLiteral"); - expect(j(literal).toSource()).toMatchSnapshot(); - }); - it("should create boolean", () => { - const literal = utils.createLiteral(j, "true"); - expect(j(literal).toSource()).toMatchSnapshot(); - }); - }); - - describe("createIdentifierOrLiteral", () => { - it("should create basic literal", () => { - const literal = utils.createIdentifierOrLiteral(j, "'stringLiteral'"); - expect(j(literal).toSource()).toMatchSnapshot(); - }); - it("should create boolean", () => { - const literal = utils.createIdentifierOrLiteral(j, "true"); - expect(j(literal).toSource()).toMatchSnapshot(); - }); - }); - - describe("findObjWithOneOfKeys", () => { - it("should find keys", () => { - const ast = j(` - var ab = { - a: 1, - b: 2 - } - `); - expect( - ast - .find(j.ObjectExpression) - .filter(p => utils.findObjWithOneOfKeys(p, ["a"])) - .size() - ).toEqual(1); - }); - }); - - describe("getRequire", () => { - it("should create a require statement", () => { - const require = utils.getRequire(j, "filesys", "fs"); - expect(j(require).toSource()).toMatchSnapshot(); - }); - }); - - describe("checkIfExistsAndAddValue", () => { - it("should create new prop if none exist", () => { - const ast = j(` - module.exports = { - entry: 'index.js' - } - `); - ast - .find(j.ObjectExpression) - .forEach(node => - utils.checkIfExistsAndAddValue( - j, - node, - "externals", - j.literal("React") - ) - ); - expect(ast.toSource()).toMatchSnapshot(); - }); - it("should override prop if it exists", () => { - const ast = j(` - module.exports = { - entry: 'index.js' - } - `); - ast - .find(j.ObjectExpression) - .forEach(node => - utils.checkIfExistsAndAddValue(j, node, "entry", j.literal("app.js")) - ); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("createArrayWithChildren", () => { - it("should find an prop that matches key and create an array with it", () => { - const ast = j("{}"); - let key = "react"; - let reactArr = { - react: ["'bo'"] - }; - const arr = utils.createArrayWithChildren(j, key, reactArr, false); - ast.find(j.Program).forEach(node => j(node).replaceWith(arr)); - expect(ast.toSource()).toMatchSnapshot(); - }); - it("should add all children of an array to a new one with a supplied key", () => { - const ast = j("{}"); - let key = "myVeryOwnKey"; - let helloWorldArray = ["'hello'", "world"]; - const arr = utils.createArrayWithChildren(j, key, helloWorldArray, true); - ast.find(j.Program).forEach(node => j(node).replaceWith(arr)); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("createEmptyArrayProperty", () => { - it("should create an array with no properties", () => { - const ast = j("{}"); - const arr = utils.createEmptyArrayProperty(j, "its-lit"); - ast.find(j.Program).forEach(node => j(node).replaceWith(arr)); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - - describe("createObjectWithSuppliedProperty", () => { - it("should create an object with a property supplied by us", () => { - const ast = j("{}"); - const prop = utils.createObjectWithSuppliedProperty( - j, - "its-lit", - j.objectExpression([]) - ); - ast.find(j.Program).forEach(node => j(node).replaceWith(prop)); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("createExternalRegExp", () => { - it("should create an regExp property that has been parsed by jscodeshift", () => { - const ast = j("{}"); - const reg = j("'\t'"); - const prop = utils.createExternalRegExp(j, reg); - ast.find(j.Program).forEach(node => j(node).replaceWith(prop)); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("pushCreateProperty", () => { - it("should create an object or property and push the value to a node", () => { - const ast = j(`module.exports = { - pushMe: {} - }`); - ast - .find(j.Identifier) - .filter(n => n.value.name === "pushMe") - .forEach(node => { - const heavyNodeNoSafeTraverse = node.parentPath.value; - utils.pushCreateProperty( - j, - heavyNodeNoSafeTraverse, - "just", - "pushed" - ); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("pushObjectKeys", () => { - it("should push object to an node using Object.keys", () => { - const ast = j(`module.exports = { - pushMe: {} - }`); - const webpackProperties = { - hello: { - world: { - its: "'great'" - } - } - }; - ast.find(j.ObjectExpression).forEach(node => { - utils.pushObjectKeys(j, node, webpackProperties, "pushMe"); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("loopThroughObjects", () => { - it("Use recursion and add elements to an node", () => { - const ast = j("module.exports = {}"); - const webpackProperties = { - hello: { - webpack: "cli" - } - }; - ast.find(j.ObjectExpression).forEach(node => { - return utils.loopThroughObjects(j, node.value, webpackProperties); - }); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); - describe("isAssignment", () => { - it("should invoke a callback if parent type is AssignmentExpression", () => { - const ast = j("module.exports = {}"); - const myObj = "Heyho"; - const myKey = "context"; - - ast - .find(j.ObjectExpression) - .filter(n => - utils.isAssignment(j, n, utils.pushCreateProperty, myKey, myObj) - ); - expect(ast.toSource()).toMatchSnapshot(); - }); - it("should allow custom transform functions instead of singularProperty", () => { - const ast = j("module.exports = {}"); - - function createPluginsProperty(p) { - const webpackProperties = { - plugins: ["one", "two", "three"] - }; - const pluginArray = utils.createArrayWithChildren( - j, - "plugins", - webpackProperties - ); - return p.value.properties.push(pluginArray); - } - ast - .find(j.ObjectExpression) - .filter(n => utils.isAssignment(null, n, createPluginsProperty)); - expect(ast.toSource()).toMatchSnapshot(); - }); - }); -}); diff --git a/dist/utils/resolve-packages.js b/dist/utils/resolve-packages.js index 00f88bf35ed..35bd2f564c1 100644 --- a/dist/utils/resolve-packages.js +++ b/dist/utils/resolve-packages.js @@ -4,7 +4,7 @@ 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; diff --git a/dist/utils/webpack-generator.js b/dist/utils/webpack-generator.js deleted file mode 100644 index 561f10931f7..00000000000 --- a/dist/utils/webpack-generator.js +++ /dev/null @@ -1,77 +0,0 @@ -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; diff --git a/lib/commands/add.js b/lib/commands/add.js index 29193d257ca..449beec4276 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,22 +1,27 @@ const fs = require("fs"); const path = require("path"); const PROP_TYPES = require("../utils/prop-types"); +const runTransform = require("../init/transformations/index"); module.exports = function(type, args) { if (!PROP_TYPES.has(type)) { - throw new Error(`${type} isn't a valid property in webpack`); + console.error(type + " isn't a valid property in webpack"); + process.exit(0); } const configPath = path.resolve(process.cwd(), "webpack.config.js"); const webpackConfigExists = fs.existsSync(configPath); if (webpackConfigExists) { - const configFile = fs.readFileSync(configPath, "utf8"); - console.log(configFile); + return runTransform( + args, + { + config: fs.readFileSync(configPath, "utf8"), + configPath: configPath + }, + "add" + ); } else { - throw new Error("Couldn't find a webpack configuration in your project path"); + throw new Error( + "Couldn't find a webpack configuration in your project path" + ); } - // TODO: - // 1.read file - // ask user what he/she wants to perform ( i.e ask for names etc) - // write and output - // console.log("hey", type, args, "Ho"); }; diff --git a/lib/commands/init.js b/lib/commands/init.js index daec4808083..7e63644d510 100644 --- a/lib/commands/init.js +++ b/lib/commands/init.js @@ -1,7 +1,7 @@ "use strict"; const npmPackagesExists = require("../utils/npm-packages-exists"); -const creator = require("../creator/index").creator; +const creator = require("../init/index").creator; /* * @function initializeInquirer diff --git a/lib/creator/index.test.js b/lib/creator/index.test.js deleted file mode 100644 index a02620e312a..00000000000 --- a/lib/creator/index.test.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -const replaceGeneratorName = require("./index").replaceGeneratorName; - -describe("replaceGeneratorName", () => { - it("should replace a pattern of an addon", () => { - const generatorName = replaceGeneratorName("webpack-addons-thefox"); - expect(generatorName).toEqual("generator-thefox"); - }); -}); diff --git a/lib/creator/transformations/context/__testfixtures__/context-0.input.js b/lib/creator/transformations/context/__testfixtures__/context-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/context/__testfixtures__/context-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/context/__testfixtures__/context-1.input.js b/lib/creator/transformations/context/__testfixtures__/context-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/context/__testfixtures__/context-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/context/__testfixtures__/context-2.input.js b/lib/creator/transformations/context/__testfixtures__/context-2.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/context/__testfixtures__/context-2.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js b/lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js deleted file mode 100644 index 080e440f373..00000000000 --- a/lib/creator/transformations/devServer/__testfixtures__/devServer-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - }, -} diff --git a/lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js b/lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/devServer/__testfixtures__/devServer-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js b/lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/devtool/__testfixtures__/devtool-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js b/lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/devtool/__testfixtures__/devtool-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/entry/__testfixtures__/entry-0.input.js b/lib/creator/transformations/entry/__testfixtures__/entry-0.input.js deleted file mode 100644 index 4ba52ba2c8d..00000000000 --- a/lib/creator/transformations/entry/__testfixtures__/entry-0.input.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {} diff --git a/lib/creator/transformations/externals/__testfixtures__/externals-0.input.js b/lib/creator/transformations/externals/__testfixtures__/externals-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/externals/__testfixtures__/externals-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/externals/__testfixtures__/externals-1.input.js b/lib/creator/transformations/externals/__testfixtures__/externals-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/externals/__testfixtures__/externals-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/module/__testfixtures__/module-0.input.js b/lib/creator/transformations/module/__testfixtures__/module-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/module/__testfixtures__/module-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/module/__testfixtures__/module-1.input.js b/lib/creator/transformations/module/__testfixtures__/module-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/module/__testfixtures__/module-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/node/__testfixtures__/node-0.input.js b/lib/creator/transformations/node/__testfixtures__/node-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/node/__testfixtures__/node-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/other/__testfixtures__/other-0.input.js b/lib/creator/transformations/other/__testfixtures__/other-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/other/__testfixtures__/other-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/other/merge.js b/lib/creator/transformations/other/merge.js deleted file mode 100644 index 5a80331de5d..00000000000 --- a/lib/creator/transformations/other/merge.js +++ /dev/null @@ -1,46 +0,0 @@ -"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 -*/ - -module.exports = function(j, ast, webpackProperties) { - 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; - } -}; diff --git a/lib/creator/transformations/output/__testfixtures__/output-0.input.js b/lib/creator/transformations/output/__testfixtures__/output-0.input.js deleted file mode 100644 index a9899df14fa..00000000000 --- a/lib/creator/transformations/output/__testfixtures__/output-0.input.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - entry: 'index.js' -} diff --git a/lib/creator/transformations/performance/__testfixtures__/performance-0.input.js b/lib/creator/transformations/performance/__testfixtures__/performance-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/performance/__testfixtures__/performance-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js b/lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/plugins/__testfixtures__/plugins-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js b/lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/resolve/__testfixtures__/resolve-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/stats/__testfixtures__/stats-0.input.js b/lib/creator/transformations/stats/__testfixtures__/stats-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/stats/__testfixtures__/stats-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/target/__testfixtures__/target-0.input.js b/lib/creator/transformations/target/__testfixtures__/target-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/target/__testfixtures__/target-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/target/__testfixtures__/target-1.input.js b/lib/creator/transformations/target/__testfixtures__/target-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/target/__testfixtures__/target-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js b/lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js deleted file mode 100644 index 4ba52ba2c8d..00000000000 --- a/lib/creator/transformations/top-scope/__testfixtures__/top-scope-0.input.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {} 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/watch/__testfixtures__/watch-0.input.js b/lib/creator/transformations/watch/__testfixtures__/watch-0.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/watch/__testfixtures__/watch-0.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/watch/__testfixtures__/watch-1.input.js b/lib/creator/transformations/watch/__testfixtures__/watch-1.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/watch/__testfixtures__/watch-1.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/creator/transformations/watch/__testfixtures__/watch-2.input.js b/lib/creator/transformations/watch/__testfixtures__/watch-2.input.js deleted file mode 100644 index ea0822c2484..00000000000 --- a/lib/creator/transformations/watch/__testfixtures__/watch-2.input.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - entry: 'index.js', - output: { - filename: 'bundle.js' - } -} diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index 31104912aee..1c40b20e418 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -10,8 +10,7 @@ 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 getPackageManager = require("../utils/package-manager").getPackageManager; const entryQuestions = require("./utils/entry"); const getBabelPlugin = require("./utils/module"); diff --git a/lib/creator/index.js b/lib/init/index.js similarity index 100% rename from lib/creator/index.js rename to lib/init/index.js diff --git a/dist/creator/index.test.js b/lib/init/index.test.js similarity index 100% rename from dist/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 100% rename from lib/creator/transformations/context/__snapshots__/context.test.js.snap rename to lib/init/transformations/context/__snapshots__/context.test.js.snap diff --git a/dist/creator/transformations/context/__testfixtures__/context-0.input.js b/lib/init/transformations/context/__testfixtures__/context-0.input.js similarity index 100% rename from dist/creator/transformations/context/__testfixtures__/context-0.input.js rename to lib/init/transformations/context/__testfixtures__/context-0.input.js diff --git a/dist/creator/transformations/context/__testfixtures__/context-1.input.js b/lib/init/transformations/context/__testfixtures__/context-1.input.js similarity index 100% rename from dist/creator/transformations/context/__testfixtures__/context-1.input.js rename to lib/init/transformations/context/__testfixtures__/context-1.input.js diff --git a/dist/creator/transformations/context/__testfixtures__/context-2.input.js b/lib/init/transformations/context/__testfixtures__/context-2.input.js similarity index 100% rename from dist/creator/transformations/context/__testfixtures__/context-2.input.js rename to lib/init/transformations/context/__testfixtures__/context-2.input.js diff --git a/lib/creator/transformations/context/context.js b/lib/init/transformations/context/context.js similarity index 100% rename from lib/creator/transformations/context/context.js rename to lib/init/transformations/context/context.js diff --git a/lib/creator/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js similarity index 100% rename from lib/creator/transformations/context/context.test.js rename to lib/init/transformations/context/context.test.js diff --git a/lib/creator/transformations/devServer/__snapshots__/devServer.test.js.snap b/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap similarity index 100% rename from lib/creator/transformations/devServer/__snapshots__/devServer.test.js.snap rename to lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap diff --git a/dist/creator/transformations/devServer/__testfixtures__/devServer-0.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-0.input.js similarity index 100% rename from dist/creator/transformations/devServer/__testfixtures__/devServer-0.input.js rename to lib/init/transformations/devServer/__testfixtures__/devServer-0.input.js diff --git a/dist/creator/transformations/devServer/__testfixtures__/devServer-1.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-1.input.js similarity index 100% rename from dist/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/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js similarity index 100% rename from lib/creator/transformations/devServer/devServer.js rename to lib/init/transformations/devServer/devServer.js diff --git a/lib/creator/transformations/devServer/devServer.test.js b/lib/init/transformations/devServer/devServer.test.js similarity index 100% rename from lib/creator/transformations/devServer/devServer.test.js rename to lib/init/transformations/devServer/devServer.test.js diff --git a/lib/creator/transformations/devtool/__snapshots__/devtool.test.js.snap b/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap similarity index 100% rename from lib/creator/transformations/devtool/__snapshots__/devtool.test.js.snap rename to lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap diff --git a/dist/creator/transformations/devtool/__testfixtures__/devtool-0.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-0.input.js similarity index 100% rename from dist/creator/transformations/devtool/__testfixtures__/devtool-0.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-0.input.js diff --git a/dist/creator/transformations/devtool/__testfixtures__/devtool-1.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-1.input.js similarity index 100% rename from dist/creator/transformations/devtool/__testfixtures__/devtool-1.input.js rename to lib/init/transformations/devtool/__testfixtures__/devtool-1.input.js diff --git a/lib/creator/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js similarity index 100% rename from lib/creator/transformations/devtool/devtool.js rename to lib/init/transformations/devtool/devtool.js diff --git a/lib/creator/transformations/devtool/devtool.test.js b/lib/init/transformations/devtool/devtool.test.js similarity index 100% rename from lib/creator/transformations/devtool/devtool.test.js rename to lib/init/transformations/devtool/devtool.test.js diff --git a/lib/creator/transformations/entry/__snapshots__/entry.test.js.snap b/lib/init/transformations/entry/__snapshots__/entry.test.js.snap similarity index 100% rename from lib/creator/transformations/entry/__snapshots__/entry.test.js.snap rename to lib/init/transformations/entry/__snapshots__/entry.test.js.snap diff --git a/dist/creator/transformations/entry/__testfixtures__/entry-0.input.js b/lib/init/transformations/entry/__testfixtures__/entry-0.input.js similarity index 100% rename from dist/creator/transformations/entry/__testfixtures__/entry-0.input.js rename to lib/init/transformations/entry/__testfixtures__/entry-0.input.js diff --git a/lib/creator/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js similarity index 100% rename from lib/creator/transformations/entry/entry.js rename to lib/init/transformations/entry/entry.js diff --git a/lib/creator/transformations/entry/entry.test.js b/lib/init/transformations/entry/entry.test.js similarity index 100% rename from lib/creator/transformations/entry/entry.test.js rename to lib/init/transformations/entry/entry.test.js 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/dist/creator/transformations/externals/__testfixtures__/externals-0.input.js b/lib/init/transformations/externals/__testfixtures__/externals-0.input.js similarity index 100% rename from dist/creator/transformations/externals/__testfixtures__/externals-0.input.js rename to lib/init/transformations/externals/__testfixtures__/externals-0.input.js diff --git a/dist/creator/transformations/externals/__testfixtures__/externals-1.input.js b/lib/init/transformations/externals/__testfixtures__/externals-1.input.js similarity index 100% rename from dist/creator/transformations/externals/__testfixtures__/externals-1.input.js rename to lib/init/transformations/externals/__testfixtures__/externals-1.input.js diff --git a/lib/creator/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js similarity index 100% rename from lib/creator/transformations/externals/externals.js rename to lib/init/transformations/externals/externals.js diff --git a/lib/creator/transformations/externals/externals.test.js b/lib/init/transformations/externals/externals.test.js similarity index 100% rename from lib/creator/transformations/externals/externals.test.js rename to lib/init/transformations/externals/externals.test.js diff --git a/lib/creator/transformations/index.js b/lib/init/transformations/index.js similarity index 78% rename from lib/creator/transformations/index.js rename to lib/init/transformations/index.js index dc31ef163f7..f5c4f928046 100644 --- a/lib/creator/transformations/index.js +++ b/lib/init/transformations/index.js @@ -63,13 +63,42 @@ const transformsObject = { devServerTransform }; -module.exports = function runTransform(webpackProperties) { +module.exports = function runTransform(webpackProperties, options, action) { + // Todo: Generalize, extract into multiple functions and reuse + if (action === "add" || action === "remove") { + let transformAction = webpackProperties.shift(); + let item = webpackProperties.pop(); + + const transformations = Object.keys(transformsObject) + .map(k => { + const stringVal = k.substr(0, k.indexOf("Transform")); + if (transformAction === stringVal) { + return [transformsObject[k]]; + } + }) + .filter(e => e); + const ast = j(options.config); + return pEachSeries(transformations, f => f[0](j, ast, item)) + .then(() => { + const source = ast.toSource({ + quote: "single" + }); + + runPrettier(options.configPath, source); + process.stdout.write( + "\n" + chalk.green(`Congratulations! ${item} has been ${action}ed!\n`) + ); + }) + .catch(err => { + console.error(err.message ? err.message : err); + }); + } // 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]]; @@ -109,6 +138,7 @@ module.exports = function runTransform(webpackProperties) { console.error(err.message ? err.message : err); }); }); + process.stdout.write( "\n" + chalk.green( diff --git a/lib/creator/transformations/module/__snapshots__/module.test.js.snap b/lib/init/transformations/module/__snapshots__/module.test.js.snap similarity index 100% rename from lib/creator/transformations/module/__snapshots__/module.test.js.snap rename to lib/init/transformations/module/__snapshots__/module.test.js.snap diff --git a/dist/creator/transformations/module/__testfixtures__/module-0.input.js b/lib/init/transformations/module/__testfixtures__/module-0.input.js similarity index 100% rename from dist/creator/transformations/module/__testfixtures__/module-0.input.js rename to lib/init/transformations/module/__testfixtures__/module-0.input.js diff --git a/dist/creator/transformations/module/__testfixtures__/module-1.input.js b/lib/init/transformations/module/__testfixtures__/module-1.input.js similarity index 100% rename from dist/creator/transformations/module/__testfixtures__/module-1.input.js rename to lib/init/transformations/module/__testfixtures__/module-1.input.js diff --git a/lib/creator/transformations/module/module.js b/lib/init/transformations/module/module.js similarity index 100% rename from lib/creator/transformations/module/module.js rename to lib/init/transformations/module/module.js diff --git a/lib/creator/transformations/module/module.test.js b/lib/init/transformations/module/module.test.js similarity index 100% rename from lib/creator/transformations/module/module.test.js rename to lib/init/transformations/module/module.test.js 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/dist/creator/transformations/node/__testfixtures__/node-0.input.js b/lib/init/transformations/node/__testfixtures__/node-0.input.js similarity index 100% rename from dist/creator/transformations/node/__testfixtures__/node-0.input.js rename to lib/init/transformations/node/__testfixtures__/node-0.input.js diff --git a/lib/creator/transformations/node/node.js b/lib/init/transformations/node/node.js similarity index 100% rename from lib/creator/transformations/node/node.js rename to lib/init/transformations/node/node.js diff --git a/lib/creator/transformations/node/node.test.js b/lib/init/transformations/node/node.test.js similarity index 100% rename from lib/creator/transformations/node/node.test.js rename to lib/init/transformations/node/node.test.js diff --git a/lib/creator/transformations/other/__snapshots__/other.test.js.snap b/lib/init/transformations/other/__snapshots__/other.test.js.snap similarity index 100% rename from lib/creator/transformations/other/__snapshots__/other.test.js.snap rename to lib/init/transformations/other/__snapshots__/other.test.js.snap diff --git a/dist/creator/transformations/other/__testfixtures__/other-0.input.js b/lib/init/transformations/other/__testfixtures__/other-0.input.js similarity index 100% rename from dist/creator/transformations/other/__testfixtures__/other-0.input.js rename to lib/init/transformations/other/__testfixtures__/other-0.input.js diff --git a/lib/creator/transformations/other/amd.js b/lib/init/transformations/other/amd.js similarity index 100% rename from lib/creator/transformations/other/amd.js rename to lib/init/transformations/other/amd.js diff --git a/lib/creator/transformations/other/bail.js b/lib/init/transformations/other/bail.js similarity index 100% rename from lib/creator/transformations/other/bail.js rename to lib/init/transformations/other/bail.js diff --git a/lib/creator/transformations/other/cache.js b/lib/init/transformations/other/cache.js similarity index 100% rename from lib/creator/transformations/other/cache.js rename to lib/init/transformations/other/cache.js diff --git a/dist/creator/transformations/other/merge.js b/lib/init/transformations/other/merge.js similarity index 100% rename from dist/creator/transformations/other/merge.js rename to lib/init/transformations/other/merge.js diff --git a/lib/creator/transformations/other/other.test.js b/lib/init/transformations/other/other.test.js similarity index 100% rename from lib/creator/transformations/other/other.test.js rename to lib/init/transformations/other/other.test.js diff --git a/lib/creator/transformations/other/profile.js b/lib/init/transformations/other/profile.js similarity index 100% rename from lib/creator/transformations/other/profile.js rename to lib/init/transformations/other/profile.js diff --git a/lib/creator/transformations/output/__snapshots__/output.test.js.snap b/lib/init/transformations/output/__snapshots__/output.test.js.snap similarity index 100% rename from lib/creator/transformations/output/__snapshots__/output.test.js.snap rename to lib/init/transformations/output/__snapshots__/output.test.js.snap diff --git a/dist/creator/transformations/output/__testfixtures__/output-0.input.js b/lib/init/transformations/output/__testfixtures__/output-0.input.js similarity index 100% rename from dist/creator/transformations/output/__testfixtures__/output-0.input.js rename to lib/init/transformations/output/__testfixtures__/output-0.input.js diff --git a/lib/creator/transformations/output/output.js b/lib/init/transformations/output/output.js similarity index 100% rename from lib/creator/transformations/output/output.js rename to lib/init/transformations/output/output.js diff --git a/lib/creator/transformations/output/output.test.js b/lib/init/transformations/output/output.test.js similarity index 100% rename from lib/creator/transformations/output/output.test.js rename to lib/init/transformations/output/output.test.js diff --git a/lib/creator/transformations/performance/__snapshots__/performance.test.js.snap b/lib/init/transformations/performance/__snapshots__/performance.test.js.snap similarity index 100% rename from lib/creator/transformations/performance/__snapshots__/performance.test.js.snap rename to lib/init/transformations/performance/__snapshots__/performance.test.js.snap diff --git a/dist/creator/transformations/performance/__testfixtures__/performance-0.input.js b/lib/init/transformations/performance/__testfixtures__/performance-0.input.js similarity index 100% rename from dist/creator/transformations/performance/__testfixtures__/performance-0.input.js rename to lib/init/transformations/performance/__testfixtures__/performance-0.input.js diff --git a/lib/creator/transformations/performance/performance.js b/lib/init/transformations/performance/performance.js similarity index 100% rename from lib/creator/transformations/performance/performance.js rename to lib/init/transformations/performance/performance.js diff --git a/lib/creator/transformations/performance/performance.test.js b/lib/init/transformations/performance/performance.test.js similarity index 100% rename from lib/creator/transformations/performance/performance.test.js rename to lib/init/transformations/performance/performance.test.js diff --git a/lib/creator/transformations/plugins/__snapshots__/plugins.test.js.snap b/lib/init/transformations/plugins/__snapshots__/plugins.test.js.snap similarity index 100% rename from lib/creator/transformations/plugins/__snapshots__/plugins.test.js.snap rename to lib/init/transformations/plugins/__snapshots__/plugins.test.js.snap diff --git a/dist/creator/transformations/plugins/__testfixtures__/plugins-0.input.js b/lib/init/transformations/plugins/__testfixtures__/plugins-0.input.js similarity index 100% rename from dist/creator/transformations/plugins/__testfixtures__/plugins-0.input.js rename to lib/init/transformations/plugins/__testfixtures__/plugins-0.input.js diff --git a/lib/creator/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js similarity index 100% rename from lib/creator/transformations/plugins/plugins.js rename to lib/init/transformations/plugins/plugins.js diff --git a/lib/creator/transformations/plugins/plugins.test.js b/lib/init/transformations/plugins/plugins.test.js similarity index 100% rename from lib/creator/transformations/plugins/plugins.test.js rename to lib/init/transformations/plugins/plugins.test.js diff --git a/lib/creator/transformations/resolve/__snapshots__/resolve.test.js.snap b/lib/init/transformations/resolve/__snapshots__/resolve.test.js.snap similarity index 100% rename from lib/creator/transformations/resolve/__snapshots__/resolve.test.js.snap rename to lib/init/transformations/resolve/__snapshots__/resolve.test.js.snap diff --git a/dist/creator/transformations/resolve/__testfixtures__/resolve-0.input.js b/lib/init/transformations/resolve/__testfixtures__/resolve-0.input.js similarity index 100% rename from dist/creator/transformations/resolve/__testfixtures__/resolve-0.input.js rename to lib/init/transformations/resolve/__testfixtures__/resolve-0.input.js diff --git a/lib/creator/transformations/resolve/resolve.js b/lib/init/transformations/resolve/resolve.js similarity index 100% rename from lib/creator/transformations/resolve/resolve.js rename to lib/init/transformations/resolve/resolve.js diff --git a/lib/creator/transformations/resolve/resolve.test.js b/lib/init/transformations/resolve/resolve.test.js similarity index 100% rename from lib/creator/transformations/resolve/resolve.test.js rename to lib/init/transformations/resolve/resolve.test.js diff --git a/lib/creator/transformations/stats/__snapshots__/stats.test.js.snap b/lib/init/transformations/stats/__snapshots__/stats.test.js.snap similarity index 100% rename from lib/creator/transformations/stats/__snapshots__/stats.test.js.snap rename to lib/init/transformations/stats/__snapshots__/stats.test.js.snap diff --git a/dist/creator/transformations/stats/__testfixtures__/stats-0.input.js b/lib/init/transformations/stats/__testfixtures__/stats-0.input.js similarity index 100% rename from dist/creator/transformations/stats/__testfixtures__/stats-0.input.js rename to lib/init/transformations/stats/__testfixtures__/stats-0.input.js diff --git a/lib/creator/transformations/stats/stats.js b/lib/init/transformations/stats/stats.js similarity index 100% rename from lib/creator/transformations/stats/stats.js rename to lib/init/transformations/stats/stats.js diff --git a/lib/creator/transformations/stats/stats.test.js b/lib/init/transformations/stats/stats.test.js similarity index 100% rename from lib/creator/transformations/stats/stats.test.js rename to lib/init/transformations/stats/stats.test.js diff --git a/lib/creator/transformations/target/__snapshots__/target.test.js.snap b/lib/init/transformations/target/__snapshots__/target.test.js.snap similarity index 100% rename from lib/creator/transformations/target/__snapshots__/target.test.js.snap rename to lib/init/transformations/target/__snapshots__/target.test.js.snap diff --git a/dist/creator/transformations/target/__testfixtures__/target-0.input.js b/lib/init/transformations/target/__testfixtures__/target-0.input.js similarity index 100% rename from dist/creator/transformations/target/__testfixtures__/target-0.input.js rename to lib/init/transformations/target/__testfixtures__/target-0.input.js diff --git a/dist/creator/transformations/target/__testfixtures__/target-1.input.js b/lib/init/transformations/target/__testfixtures__/target-1.input.js similarity index 100% rename from dist/creator/transformations/target/__testfixtures__/target-1.input.js rename to lib/init/transformations/target/__testfixtures__/target-1.input.js diff --git a/lib/creator/transformations/target/target.js b/lib/init/transformations/target/target.js similarity index 100% rename from lib/creator/transformations/target/target.js rename to lib/init/transformations/target/target.js diff --git a/lib/creator/transformations/target/target.test.js b/lib/init/transformations/target/target.test.js similarity index 100% rename from lib/creator/transformations/target/target.test.js rename to lib/init/transformations/target/target.test.js 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 100% 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 diff --git a/dist/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 dist/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/dist/creator/transformations/top-scope/top-scope.js b/lib/init/transformations/top-scope/top-scope.js similarity index 100% rename from dist/creator/transformations/top-scope/top-scope.js rename to lib/init/transformations/top-scope/top-scope.js diff --git a/lib/creator/transformations/top-scope/top-scope.test.js b/lib/init/transformations/top-scope/top-scope.test.js similarity index 100% rename from lib/creator/transformations/top-scope/top-scope.test.js rename to lib/init/transformations/top-scope/top-scope.test.js diff --git a/lib/creator/transformations/watch/__snapshots__/watch.test.js.snap b/lib/init/transformations/watch/__snapshots__/watch.test.js.snap similarity index 100% rename from lib/creator/transformations/watch/__snapshots__/watch.test.js.snap rename to lib/init/transformations/watch/__snapshots__/watch.test.js.snap diff --git a/lib/creator/transformations/watch/__snapshots__/watchOptions.test.js.snap b/lib/init/transformations/watch/__snapshots__/watchOptions.test.js.snap similarity index 100% rename from lib/creator/transformations/watch/__snapshots__/watchOptions.test.js.snap rename to lib/init/transformations/watch/__snapshots__/watchOptions.test.js.snap diff --git a/dist/creator/transformations/watch/__testfixtures__/watch-0.input.js b/lib/init/transformations/watch/__testfixtures__/watch-0.input.js similarity index 100% rename from dist/creator/transformations/watch/__testfixtures__/watch-0.input.js rename to lib/init/transformations/watch/__testfixtures__/watch-0.input.js diff --git a/dist/creator/transformations/watch/__testfixtures__/watch-1.input.js b/lib/init/transformations/watch/__testfixtures__/watch-1.input.js similarity index 100% rename from dist/creator/transformations/watch/__testfixtures__/watch-1.input.js rename to lib/init/transformations/watch/__testfixtures__/watch-1.input.js diff --git a/dist/creator/transformations/watch/__testfixtures__/watch-2.input.js b/lib/init/transformations/watch/__testfixtures__/watch-2.input.js similarity index 100% rename from dist/creator/transformations/watch/__testfixtures__/watch-2.input.js rename to lib/init/transformations/watch/__testfixtures__/watch-2.input.js diff --git a/lib/creator/transformations/watch/watch.js b/lib/init/transformations/watch/watch.js similarity index 100% rename from lib/creator/transformations/watch/watch.js rename to lib/init/transformations/watch/watch.js diff --git a/lib/creator/transformations/watch/watch.test.js b/lib/init/transformations/watch/watch.test.js similarity index 100% rename from lib/creator/transformations/watch/watch.test.js rename to lib/init/transformations/watch/watch.test.js diff --git a/lib/creator/transformations/watch/watchOptions.js b/lib/init/transformations/watch/watchOptions.js similarity index 100% rename from lib/creator/transformations/watch/watchOptions.js rename to lib/init/transformations/watch/watchOptions.js diff --git a/lib/creator/transformations/watch/watchOptions.test.js b/lib/init/transformations/watch/watchOptions.test.js similarity index 100% rename from lib/creator/transformations/watch/watchOptions.test.js rename to lib/init/transformations/watch/watchOptions.test.js diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 5a64d44d330..4e689207847 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -8,7 +8,7 @@ module.exports = new Set([ "node", "output", "performance", - "plugin", + "plugins", "resolve", "target", "watch" diff --git a/lib/utils/resolve-packages.js b/lib/utils/resolve-packages.js index 00f88bf35ed..35bd2f564c1 100644 --- a/lib/utils/resolve-packages.js +++ b/lib/utils/resolve-packages.js @@ -4,7 +4,7 @@ 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; diff --git a/webpack.config.js b/webpack.config.js index e92a7180190..7043cc9539c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - entry: "shit" + plugins: [] }; From 1f5e978c41fcd020a33df7d8554e8a28b51e95cd Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 10 Dec 2017 04:56:29 +0100 Subject: [PATCH 008/109] [WIP] add plugin --- lib/commands/add.js | 2 +- lib/init/transformations/index.js | 3 +-- lib/init/transformations/plugins/plugins.js | 26 +++++++++++++++++---- lib/utils/ast-utils.js | 18 ++++++++++++++ lib/utils/prop-types.js | 4 ++-- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/lib/commands/add.js b/lib/commands/add.js index 449beec4276..7ef3952c412 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -4,7 +4,7 @@ const PROP_TYPES = require("../utils/prop-types"); const runTransform = require("../init/transformations/index"); module.exports = function(type, args) { - if (!PROP_TYPES.has(type)) { + if (!PROP_TYPES[type]) { console.error(type + " isn't a valid property in webpack"); process.exit(0); } diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index f5c4f928046..6579816c17e 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -78,12 +78,11 @@ module.exports = function runTransform(webpackProperties, options, action) { }) .filter(e => e); const ast = j(options.config); - return pEachSeries(transformations, f => f[0](j, ast, item)) + return pEachSeries(transformations, f => f[0](j, ast, item, action)) .then(() => { const source = ast.toSource({ quote: "single" }); - runPrettier(options.configPath, source); process.stdout.write( "\n" + chalk.green(`Congratulations! ${item} has been ${action}ed!\n`) diff --git a/lib/init/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js index c392123c599..2a5d5588ee6 100644 --- a/lib/init/transformations/plugins/plugins.js +++ b/lib/init/transformations/plugins/plugins.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createPluginsProperty(p) { const pluginArray = utils.createArrayWithChildren( j, @@ -23,10 +23,26 @@ module.exports = function(j, ast, webpackProperties) { ); return p.value.properties.push(pluginArray); } - if (webpackProperties && Array.isArray(webpackProperties)) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createPluginsProperty)); + if (webpackProperties) { + if (Array.isArray(webpackProperties)) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createPluginsProperty)); + } else if (action === "add") { + return utils + .findPluginsRootNodes(j, ast) + .filter(p => + p.value.value.elements.push( + utils.createEmptyCallableFunctionWithArguments(j, webpackProperties) + ) + ); + } else if (action === "remove") { + return utils + .findPluginsRootNodes(j, ast) + .filter(p => + p.value.value.elements.filter(name => name !== webpackProperties) + ); + } } else { return ast; } diff --git a/lib/utils/ast-utils.js b/lib/utils/ast-utils.js index d9d46240f50..372132233c0 100644 --- a/lib/utils/ast-utils.js +++ b/lib/utils/ast-utils.js @@ -606,6 +606,23 @@ function isAssignment( } } +/* +* @function createEmptyCallableFunctionWithArguments +* +* Creates a function call with arguments +* @param j — jscodeshift API +* @param name: Name for the given function +* @returns - { Function } Node - Returns the node for the created +* function +*/ + +function createEmptyCallableFunctionWithArguments( + j: Ijscodeshit, + name: String +): any { + return j.callExpression(j.identifier(name), [j.literal("/* heyo */")]); +} + module.exports = { safeTraverse, createProperty, @@ -623,6 +640,7 @@ module.exports = { createEmptyArrayProperty, createObjectWithSuppliedProperty, createExternalRegExp, + createEmptyCallableFunctionWithArguments, pushCreateProperty, pushObjectKeys, isAssignment, diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 4e689207847..21ef5bf8f0c 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,4 +1,4 @@ -module.exports = new Set([ +module.exports = [ "context", "devServer", "devtool", @@ -12,4 +12,4 @@ module.exports = new Set([ "resolve", "target", "watch" -]); +]; From bb12ecb577fe86de4c03e3ccf83aa8eaa3b971c5 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 10 Dec 2017 06:38:20 +0100 Subject: [PATCH 009/109] [WIP] refactoring --- lib/commands/add.js | 36 +++++++++++++----------- lib/generators/add-generator.js | 46 +++++++++++++++++++++++++++++++ lib/index.js | 8 +----- lib/init/transformations/index.js | 17 ++++++------ lib/utils/prop-types.js | 30 ++++++++++---------- 5 files changed, 91 insertions(+), 46 deletions(-) create mode 100644 lib/generators/add-generator.js diff --git a/lib/commands/add.js b/lib/commands/add.js index 7ef3952c412..3ce5aac7b91 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,27 +1,31 @@ +"use strict"; + const fs = require("fs"); const path = require("path"); -const PROP_TYPES = require("../utils/prop-types"); +const yeoman = require("yeoman-environment"); +const defaultGenerator = require("../generators/add-generator"); const runTransform = require("../init/transformations/index"); -module.exports = function(type, args) { - if (!PROP_TYPES[type]) { - console.error(type + " isn't a valid property in webpack"); - process.exit(0); - } +module.exports = function() { const configPath = path.resolve(process.cwd(), "webpack.config.js"); const webpackConfigExists = fs.existsSync(configPath); - if (webpackConfigExists) { - return runTransform( - args, - { - config: fs.readFileSync(configPath, "utf8"), - configPath: configPath - }, - "add" - ); - } else { + if (!webpackConfigExists) { throw new Error( "Couldn't find a webpack configuration in your project path" ); } + const env = yeoman.createEnv("webpack", null); + const generatorName = "webpack-add-generator"; + env.registerStub(defaultGenerator, generatorName); + + env.run(generatorName).on("end", () => { + const config = Object.assign( + { + configFile: fs.readFileSync(configPath, "utf8"), + configPath: configPath + }, + env.getArgument("configuration") + ); + return runTransform(config, "add"); + }); }; diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js new file mode 100644 index 00000000000..60d6a0392b4 --- /dev/null +++ b/lib/generators/add-generator.js @@ -0,0 +1,46 @@ +const Generator = require("yeoman-generator"); +const PROP_TYPES = require("../utils/prop-types"); +const RawList = require("webpack-addons").RawList; + +module.exports = class AddGenerator extends Generator { + constructor(args, opts) { + super(args, opts); + this.dependencies = []; + this.configuration = { + config: { + webpackOptions: {}, + topScope: [] + } + }; + } + + prompting() { + let done = this.async(); + let action; + this.prompt([ + RawList( + "actionType", + "What property do you want to add to?", + Array.from(PROP_TYPES.keys()) + ) + ]) + .then(actionTypeAnswer => { + done(); + this.configuration.config.webpackOptions[ + actionTypeAnswer.actionType + ] = null; + action = actionTypeAnswer.actionType; + }) + .then(() => { + this.prompt([ + RawList( + "actionAnswer", + `what do you want to add in ${action}?` + /*types*/ + ) + ]).then(answerToAction => { + console.log(answerToAction); + }); + }); + } +}; diff --git a/lib/index.js b/lib/index.js index 87b96096f92..f1a6dea8906 100644 --- a/lib/index.js +++ b/lib/index.js @@ -32,14 +32,8 @@ module.exports = function initialize(command, args) { return require("./commands/migrate.js")(inputConfigPath, inputConfigPath); } case "add": { - // [action, argument] i.e : [plugin, commonschunk] - const action = args.slice(2).length === 1 ? [] : args.slice(3); - const actionType = action.shift(); - if (!action.length) { - throw new Error("Please specify what action you want to do"); - } //eslint-disable-next-line - return require("./commands/add.js")(actionType, action); + return require("./commands/add.js")(); } case "remove": { const actionType = args.slice(2).length === 1 ? [] : [popArgs]; diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 6579816c17e..add519dea87 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -63,29 +63,30 @@ const transformsObject = { devServerTransform }; -module.exports = function runTransform(webpackProperties, options, action) { +module.exports = function runTransform(webpackProperties, action) { // Todo: Generalize, extract into multiple functions and reuse if (action === "add" || action === "remove") { - let transformAction = webpackProperties.shift(); - let item = webpackProperties.pop(); const transformations = Object.keys(transformsObject) .map(k => { const stringVal = k.substr(0, k.indexOf("Transform")); - if (transformAction === stringVal) { + // Todo: change + if (stringVal === "something") { return [transformsObject[k]]; } }) .filter(e => e); - const ast = j(options.config); - return pEachSeries(transformations, f => f[0](j, ast, item, action)) + const ast = j(webpackProperties.configFile); + // TODO: add args to transform + return pEachSeries(transformations, f => f[0](j, ast)) .then(() => { const source = ast.toSource({ quote: "single" }); - runPrettier(options.configPath, source); + runPrettier(webpackProperties.configPath, source); + //TODO: update in literal process.stdout.write( - "\n" + chalk.green(`Congratulations! ${item} has been ${action}ed!\n`) + "\n" + chalk.green(`Congratulations! ${"something"} has been ${action}ed!\n`) ); }) .catch(err => { diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 21ef5bf8f0c..ae2e5960b2d 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,15 +1,15 @@ -module.exports = [ - "context", - "devServer", - "devtool", - "entry", - "external", - "module", - "node", - "output", - "performance", - "plugins", - "resolve", - "target", - "watch" -]; +module.exports = new Map([ + ["context", "Hi"], + ["devServer"], + ["devtool"], + ["entry"], + ["external"], + ["module"], + ["node"], + ["output"], + ["performance"], + ["plugins"], + ["resolve"], + ["target"], + ["watch"] +]); From 77c399de922f61956cbbeb0b9441708abedd332e Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 10 Dec 2017 07:19:28 +0100 Subject: [PATCH 010/109] add update and its relative generators --- bin/webpack.js | 1 + lib/commands/add.js | 27 ++---------------- lib/commands/remove.js | 7 ++++- lib/commands/update.js | 8 ++++++ lib/generators/remove-generator.js | 46 ++++++++++++++++++++++++++++++ lib/generators/update-generator.js | 46 ++++++++++++++++++++++++++++++ lib/index.js | 11 ++++--- lib/init/transformations/index.js | 6 ++-- lib/utils/modify-config-helper.js | 30 +++++++++++++++++++ lib/utils/prop-types.js | 2 +- 10 files changed, 149 insertions(+), 35 deletions(-) create mode 100644 lib/commands/update.js create mode 100644 lib/generators/remove-generator.js create mode 100644 lib/generators/update-generator.js create mode 100644 lib/utils/modify-config-helper.js diff --git a/bin/webpack.js b/bin/webpack.js index 34c34a18296..4f9b3a3fce0 100755 --- a/bin/webpack.js +++ b/bin/webpack.js @@ -15,6 +15,7 @@ const NON_COMPILATION_ARGS = [ "migrate", "add", "remove", + "update", "generate-loader", "generate-plugin" ]; diff --git a/lib/commands/add.js b/lib/commands/add.js index 3ce5aac7b91..6f7a73109c7 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -1,31 +1,8 @@ "use strict"; -const fs = require("fs"); -const path = require("path"); -const yeoman = require("yeoman-environment"); const defaultGenerator = require("../generators/add-generator"); -const runTransform = require("../init/transformations/index"); +const modifyHelper = require("../utils/modify-config-helper"); module.exports = function() { - 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-add-generator"; - env.registerStub(defaultGenerator, generatorName); - - env.run(generatorName).on("end", () => { - const config = Object.assign( - { - configFile: fs.readFileSync(configPath, "utf8"), - configPath: configPath - }, - env.getArgument("configuration") - ); - return runTransform(config, "add"); - }); + return modifyHelper("add", defaultGenerator); }; diff --git a/lib/commands/remove.js b/lib/commands/remove.js index 42049803553..858869dffff 100644 --- a/lib/commands/remove.js +++ b/lib/commands/remove.js @@ -1,3 +1,8 @@ +"use strict"; + +const defaultGenerator = require("../generators/remove-generator"); +const modifyHelper = require("../utils/modify-config-helper"); + module.exports = function() { - console.log("hey"); + return modifyHelper("remove", defaultGenerator); }; diff --git a/lib/commands/update.js b/lib/commands/update.js new file mode 100644 index 00000000000..a45b4b3893a --- /dev/null +++ b/lib/commands/update.js @@ -0,0 +1,8 @@ +"use strict"; + +const defaultGenerator = require("../generators/update-generator"); +const modifyHelper = require("../utils/modify-config-helper"); + +module.exports = function() { + return modifyHelper("update", defaultGenerator); +}; diff --git a/lib/generators/remove-generator.js b/lib/generators/remove-generator.js new file mode 100644 index 00000000000..116134f0263 --- /dev/null +++ b/lib/generators/remove-generator.js @@ -0,0 +1,46 @@ +const Generator = require("yeoman-generator"); +const PROP_TYPES = require("../utils/prop-types"); +const RawList = require("webpack-addons").RawList; + +module.exports = class RemoveGenerator extends Generator { + constructor(args, opts) { + super(args, opts); + this.dependencies = []; + this.configuration = { + config: { + webpackOptions: {}, + topScope: [] + } + }; + } + + prompting() { + let done = this.async(); + let action; + this.prompt([ + RawList( + "actionType", + "What property do you want to remove?", + Array.from(PROP_TYPES.keys()) + ) + ]) + .then(actionTypeAnswer => { + done(); + this.configuration.config.webpackOptions[ + actionTypeAnswer.actionType + ] = null; + action = actionTypeAnswer.actionType; + }) + .then(() => { + this.prompt([ + RawList( + "actionAnswer", + `what do you want to remove on ${action}?` + /*types*/ + ) + ]).then(answerToAction => { + console.log(answerToAction); + }); + }); + } +}; diff --git a/lib/generators/update-generator.js b/lib/generators/update-generator.js new file mode 100644 index 00000000000..074f5011a80 --- /dev/null +++ b/lib/generators/update-generator.js @@ -0,0 +1,46 @@ +const Generator = require("yeoman-generator"); +const PROP_TYPES = require("../utils/prop-types"); +const RawList = require("webpack-addons").RawList; + +module.exports = class UpdateGenerator extends Generator { + constructor(args, opts) { + super(args, opts); + this.dependencies = []; + this.configuration = { + config: { + webpackOptions: {}, + topScope: [] + } + }; + } + + prompting() { + let done = this.async(); + let action; + this.prompt([ + RawList( + "actionType", + "What property do you want to update?", + Array.from(PROP_TYPES.keys()) + ) + ]) + .then(actionTypeAnswer => { + done(); + this.configuration.config.webpackOptions[ + actionTypeAnswer.actionType + ] = null; + action = actionTypeAnswer.actionType; + }) + .then(() => { + this.prompt([ + RawList( + "actionAnswer", + `what do you want to update to ${action}?` + /*types*/ + ) + ]).then(answerToAction => { + console.log(answerToAction); + }); + }); + } +}; diff --git a/lib/index.js b/lib/index.js index f1a6dea8906..2a64f867bcc 100644 --- a/lib/index.js +++ b/lib/index.js @@ -33,15 +33,14 @@ module.exports = function initialize(command, args) { } case "add": { //eslint-disable-next-line - return require("./commands/add.js")(); + return require("./commands/add")(); } case "remove": { - const actionType = args.slice(2).length === 1 ? [] : [popArgs]; - if (!actionType.length) { - throw new Error("Please specify what action you want to do"); - } //eslint-disable-next-line - return require("./commands/remove.js")(actionType, popArgs); + return require("./commands/remove")(); + } + case "update": { + return require("./commands/update")(); } case "generate-loader": { return require("./generate-loader/index.js")(); diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index add519dea87..92fc2068ad8 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -66,7 +66,6 @@ const transformsObject = { module.exports = function runTransform(webpackProperties, action) { // Todo: Generalize, extract into multiple functions and reuse if (action === "add" || action === "remove") { - const transformations = Object.keys(transformsObject) .map(k => { const stringVal = k.substr(0, k.indexOf("Transform")); @@ -86,7 +85,10 @@ module.exports = function runTransform(webpackProperties, action) { runPrettier(webpackProperties.configPath, source); //TODO: update in literal process.stdout.write( - "\n" + chalk.green(`Congratulations! ${"something"} has been ${action}ed!\n`) + "\n" + + chalk.green( + `Congratulations! ${"something"} has been ${action}ed!\n` + ) ); }) .catch(err => { diff --git a/lib/utils/modify-config-helper.js b/lib/utils/modify-config-helper.js new file mode 100644 index 00000000000..4804c4284f2 --- /dev/null +++ b/lib/utils/modify-config-helper.js @@ -0,0 +1,30 @@ +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const yeoman = require("yeoman-environment"); +const runTransform = require("../init/transformations/index"); + +module.exports = function(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/prop-types.js b/lib/utils/prop-types.js index ae2e5960b2d..f7c43cbfccc 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,5 +1,5 @@ module.exports = new Map([ - ["context", "Hi"], + ["context"], ["devServer"], ["devtool"], ["entry"], From cf098523ca0fd6b6ab901f3b65546b36e81e76f5 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 11 Dec 2017 07:24:56 +0100 Subject: [PATCH 011/109] [WIP] add api --- dist/utils/npm-exists.js | 9 ------- dist/utils/npm-packages-exists.js | 9 +++++++ lib/generators/add-generator.js | 45 ++++++++++++++++++++++++++----- lib/utils/npm-exists.js | 10 ------- lib/utils/npm-packages-exists.js | 11 +++++++- 5 files changed, 57 insertions(+), 27 deletions(-) diff --git a/dist/utils/npm-exists.js b/dist/utils/npm-exists.js index f8a11b8d9d4..99960a8a060 100644 --- a/dist/utils/npm-exists.js +++ b/dist/utils/npm-exists.js @@ -15,15 +15,6 @@ const constant = value => () => value; */ 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/dist/utils/npm-packages-exists.js b/dist/utils/npm-packages-exists.js index d8999771023..e529465174b 100644 --- a/dist/utils/npm-packages-exists.js +++ b/dist/utils/npm-packages-exists.js @@ -16,6 +16,15 @@ const resolvePackages = require("./resolve-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) { diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 60d6a0392b4..5082cb105bc 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -1,6 +1,10 @@ const Generator = require("yeoman-generator"); const PROP_TYPES = require("../utils/prop-types"); const RawList = require("webpack-addons").RawList; +const Input = require("webpack-addons").Input; + +const getPackageManager = require("../utils/package-manager").getPackageManager; +const npmExists = require("../utils/npm-exists"); module.exports = class AddGenerator extends Generator { constructor(args, opts) { @@ -25,7 +29,6 @@ module.exports = class AddGenerator extends Generator { ) ]) .then(actionTypeAnswer => { - done(); this.configuration.config.webpackOptions[ actionTypeAnswer.actionType ] = null; @@ -33,13 +36,41 @@ module.exports = class AddGenerator extends Generator { }) .then(() => { this.prompt([ - RawList( - "actionAnswer", - `what do you want to add in ${action}?` - /*types*/ - ) + Input("actionAnswer", `what do you want to add to ${action}?`) ]).then(answerToAction => { - console.log(answerToAction); + if (action === ("plugins" || "loader")) { + // + const pluginExist = Object.keys(require("webpack/lib/webpack")) + .filter(p => p.indexOf("Plugin") >= 0) + .find( + p => p.toLowerCase().indexOf(answerToAction.actionAnswer) >= 0 + ); + if (pluginExist) { + this.configuration.config.webpackOptions[action] = pluginExist; + } else { + // check at npm or throw + + npmExists(answerToAction.actionAnswer).then(p => { + if (p) { + this.dependencies.push(answerToAction.actionAnswer); + this.configuration.config.webpackOptions[action] = + 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 { + // prompt for properties + } }); }); } diff --git a/lib/utils/npm-exists.js b/lib/utils/npm-exists.js index f8a11b8d9d4..96bc56bf665 100644 --- a/lib/utils/npm-exists.js +++ b/lib/utils/npm-exists.js @@ -1,7 +1,6 @@ "use strict"; const got = require("got"); -const chalk = require("chalk"); const constant = value => () => value; /* @@ -15,15 +14,6 @@ const constant = value => () => value; */ 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..0307ec63784 100644 --- a/lib/utils/npm-packages-exists.js +++ b/lib/utils/npm-packages-exists.js @@ -1,5 +1,5 @@ "use strict"; - +const chalk = require("chalk"); const npmExists = require("./npm-exists"); const resolvePackages = require("./resolve-packages"); @@ -16,6 +16,15 @@ const resolvePackages = require("./resolve-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) { From b265fbeb8538462aacd300782deee2b64257845d Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 11 Dec 2017 10:37:43 +0100 Subject: [PATCH 012/109] add glob for multiple path searches --- dist/utils/npm-exists.js | 1 - dist/utils/npm-packages-exists.js | 18 +++++++-------- lib/generators/add-generator.js | 15 ++++++++++--- package-lock.json | 37 +++++++++++++++++++++++++++++++ package.json | 1 + 5 files changed, 59 insertions(+), 13 deletions(-) diff --git a/dist/utils/npm-exists.js b/dist/utils/npm-exists.js index 99960a8a060..96bc56bf665 100644 --- a/dist/utils/npm-exists.js +++ b/dist/utils/npm-exists.js @@ -1,7 +1,6 @@ "use strict"; const got = require("got"); -const chalk = require("chalk"); const constant = value => () => value; /* diff --git a/dist/utils/npm-packages-exists.js b/dist/utils/npm-packages-exists.js index e529465174b..0307ec63784 100644 --- a/dist/utils/npm-packages-exists.js +++ b/dist/utils/npm-packages-exists.js @@ -1,5 +1,5 @@ "use strict"; - +const chalk = require("chalk"); const npmExists = require("./npm-exists"); const resolvePackages = require("./resolve-packages"); @@ -17,14 +17,14 @@ 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" - ) - ); - } + 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) { diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 5082cb105bc..d544b0aa50f 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -1,4 +1,5 @@ const Generator = require("yeoman-generator"); +const glob = require("glob-all"); const PROP_TYPES = require("../utils/prop-types"); const RawList = require("webpack-addons").RawList; const Input = require("webpack-addons").Input; @@ -40,8 +41,17 @@ module.exports = class AddGenerator extends Generator { ]).then(answerToAction => { if (action === ("plugins" || "loader")) { // - const pluginExist = Object.keys(require("webpack/lib/webpack")) - .filter(p => p.indexOf("Plugin") >= 0) + 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 ); @@ -49,7 +59,6 @@ module.exports = class AddGenerator extends Generator { this.configuration.config.webpackOptions[action] = pluginExist; } else { // check at npm or throw - npmExists(answerToAction.actionAnswer).then(p => { if (p) { this.dependencies.push(answerToAction.actionAnswer); diff --git a/package-lock.json b/package-lock.json index 07232c09f65..13aa2f868b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3444,6 +3444,43 @@ "gh-got": "6.0.0" } }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-all": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", + "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", + "requires": { + "glob": "7.1.2", + "yargs": "1.2.6" + }, + "dependencies": { + "minimist": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", + "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" + }, + "yargs": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", + "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", + "requires": { + "minimist": "0.1.0" + } + } + } + }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", diff --git a/package.json b/package.json index 8ba7c7757e4..a82604025c9 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "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", From ea19c6678bb8798e6b32a673a02210a34c121482 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 04:41:37 +0100 Subject: [PATCH 013/109] [WIP] plugins API --- lib/generators/add-generator.js | 5 ++++- lib/init/transformations/index.js | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index d544b0aa50f..22af9d2a277 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -4,7 +4,7 @@ const PROP_TYPES = require("../utils/prop-types"); const RawList = require("webpack-addons").RawList; const Input = require("webpack-addons").Input; -const getPackageManager = require("../utils/package-manager").getPackageManager; +//const getPackageManager = require("../utils/package-manager").getPackageManager; const npmExists = require("../utils/npm-exists"); module.exports = class AddGenerator extends Generator { @@ -57,6 +57,7 @@ module.exports = class AddGenerator extends Generator { ); if (pluginExist) { this.configuration.config.webpackOptions[action] = pluginExist; + done(); } else { // check at npm or throw npmExists(answerToAction.actionAnswer).then(p => { @@ -65,9 +66,11 @@ module.exports = class AddGenerator extends Generator { this.configuration.config.webpackOptions[action] = answerToAction.actionAnswer; done(); + /* this.runInstall(getPackageManager(), this.dependencies, { "save-dev": true }); + */ } else { console.error( answerToAction.actionAnswer, diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 92fc2068ad8..43846ceb5b0 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -64,6 +64,7 @@ const transformsObject = { }; module.exports = function runTransform(webpackProperties, action) { + //console.log(webpackProperties) // Todo: Generalize, extract into multiple functions and reuse if (action === "add" || action === "remove") { const transformations = Object.keys(transformsObject) From 9a72bebf0031cd8f796a0634269a3ef167f1e0ff Mon Sep 17 00:00:00 2001 From: kingdaro Date: Tue, 12 Dec 2017 00:21:16 -0500 Subject: [PATCH 014/109] Use env preset (#197) * use env preset * uninstall preset es2015, add preset env * update relevant docs / config --- .babelrc | 2 +- MIGRATE.md | 8 +- lib/generators/init-generator.js | 2 +- lib/generators/utils/module.js | 2 +- package-lock.json | 962 ++----------------------------- package.json | 2 +- 6 files changed, 64 insertions(+), 914 deletions(-) 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/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/lib/generators/init-generator.js b/lib/generators/init-generator.js index 1c40b20e418..d14c599e926 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -114,7 +114,7 @@ module.exports = class WebpackGenerator extends Generator { this.dependencies.push( "babel-loader", "babel-core", - "babel-preset-es2015" + "babel-preset-env" ); } }) diff --git a/lib/generators/utils/module.js b/lib/generators/utils/module.js index b9b8660f606..7b44b7e156b 100644 --- a/lib/generators/utils/module.js +++ b/lib/generators/utils/module.js @@ -4,7 +4,7 @@ module.exports = () => { exclude: "/node_modules/", loader: "'babel-loader'", options: { - presets: ["'es2015'"] + presets: ["'env'"] } }; }; diff --git a/package-lock.json b/package-lock.json index 13aa2f868b2..8d7e7bd33df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -961,6 +961,43 @@ } } }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.10.0", + "invariant": "2.2.2", + "semver": "5.4.1" + } + }, "babel-preset-es2015": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", @@ -1270,6 +1307,15 @@ "pako": "1.0.6" } }, + "browserslist": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", + "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", + "requires": { + "caniuse-lite": "1.0.30000782", + "electron-to-chromium": "1.3.28" + } + }, "bser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", @@ -1343,6 +1389,11 @@ } } }, + "caniuse-lite": { + "version": "1.0.30000782", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000782.tgz", + "integrity": "sha1-W4K4w4XyU0h0XEccpRMgr7G38lQ=" + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1385,7 +1436,6 @@ "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", @@ -1953,6 +2003,11 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" }, + "electron-to-chromium": { + "version": "1.3.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", + "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=" + }, "elegant-spinner": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", @@ -2498,904 +2553,6 @@ "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==", - "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=", - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "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=" - }, - "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "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=", - "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=", - "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=", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "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=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "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=", - "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=", - "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=", - "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=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "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=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "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=" - }, - "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=" - }, - "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=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "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=", - "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=", - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "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=", - "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=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "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=", - "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=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.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=", - "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=", - "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=", - "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=", - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "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=", - "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=", - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "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=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "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=", - "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=", - "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=", - "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=", - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "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=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "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=", - "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=", - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "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=", - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "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==", - "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=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "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=", - "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=", - "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==", - "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=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "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=", - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "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=", - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "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=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "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=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "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=", - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "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=", - "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=", - "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=" - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "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=", - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "optional": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "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=", - "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=", - "optional": true - } - } - }, - "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" - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "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=", - "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=", - "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=", - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "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=", - "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=", - "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=", - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "optional": 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.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "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==", - "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=" - } - } - }, "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", @@ -5557,12 +4714,6 @@ "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=", - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6744,7 +5895,6 @@ "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", diff --git a/package.json b/package.json index a82604025c9..77818dd4fc9 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "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", From a5abdfe143cda60a33b8d3e8b64554bfdbc537df Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 06:34:31 +0100 Subject: [PATCH 015/109] wip --- lib/init/transformations/index.js | 62 +++++++-------------- lib/init/transformations/plugins/plugins.js | 2 +- 2 files changed, 22 insertions(+), 42 deletions(-) diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 43846ceb5b0..23009a4251a 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -64,39 +64,8 @@ const transformsObject = { }; module.exports = function runTransform(webpackProperties, action) { - //console.log(webpackProperties) - // Todo: Generalize, extract into multiple functions and reuse - if (action === "add" || action === "remove") { - const transformations = Object.keys(transformsObject) - .map(k => { - const stringVal = k.substr(0, k.indexOf("Transform")); - // Todo: change - if (stringVal === "something") { - return [transformsObject[k]]; - } - }) - .filter(e => e); - const ast = j(webpackProperties.configFile); - // TODO: add args to transform - return pEachSeries(transformations, f => f[0](j, ast)) - .then(() => { - const source = ast.toSource({ - quote: "single" - }); - runPrettier(webpackProperties.configPath, source); - //TODO: update in literal - process.stdout.write( - "\n" + - chalk.green( - `Congratulations! ${"something"} has been ${action}ed!\n` - ) - ); - }) - .catch(err => { - console.error(err.message ? err.message : err); - }); - } // webpackOptions.name sent to nameTransform if match + console.log(webpackProperties); Object.keys(webpackProperties).forEach(scaffoldPiece => { const config = webpackProperties[scaffoldPiece]; const transformations = Object.keys(transformsObject).map(k => { @@ -113,13 +82,15 @@ module.exports = function runTransform(webpackProperties, action) { } }); - const ast = j("module.exports = {}"); + const ast = j((action ? webpackProperties.configFile : "module.exports = {}")); + const transformAction = action || "init"; return pEachSeries(transformations, f => { + if (!f[1]) { - return f[0](j, ast); + return f[0](j, ast, transformAction); } else { - return f[0](j, ast, f[1]); + return f[0](j, ast, transformAction, f[1]); } }) .then(() => { @@ -130,7 +101,7 @@ module.exports = function runTransform(webpackProperties, action) { configurationName = "webpack." + config.configName + ".js"; } - const outputPath = path.join(process.cwd(), configurationName); + const outputPath = action ? webpackProperties.configPath : path.join(process.cwd(), configurationName); const source = ast.toSource({ quote: "single" }); @@ -141,11 +112,20 @@ module.exports = function runTransform(webpackProperties, action) { console.error(err.message ? err.message : err); }); }); - - process.stdout.write( - "\n" + + if (action) { + //TODO: update in literal + process.stdout.write( + "\n" + chalk.green( - "Congratulations! Your new webpack configuration file has been created!\n" + `Congratulations! ${"something"} 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/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js index 2a5d5588ee6..bc19e41f7a2 100644 --- a/lib/init/transformations/plugins/plugins.js +++ b/lib/init/transformations/plugins/plugins.js @@ -23,7 +23,7 @@ module.exports = function(j, ast, webpackProperties, action) { ); return p.value.properties.push(pluginArray); } - if (webpackProperties) { + if (webpackProperties && action === "init") { if (Array.isArray(webpackProperties)) { return ast .find(j.ObjectExpression) From c8f661fc05f96e35d773d4c74dfb9dfa61453c4b Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 06:40:18 +0100 Subject: [PATCH 016/109] update package.lock --- package-lock.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d7e7bd33df..dfc3674ff5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7330,7 +7330,7 @@ "yeoman-generator": { "version": "git://github.com/ev1stensberg/generator.git#9e24fa31c85302ca1145ae34fc68b4f133251ca0", "requires": { - "async": "2.5.0", + "async": "2.6.0", "chalk": "1.1.3", "cli-table": "0.3.1", "cross-spawn": "5.1.0", @@ -7363,9 +7363,9 @@ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" }, "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "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" } From 495e274beceb5d1401fb337e63381adbd7145c04 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 07:26:08 +0100 Subject: [PATCH 017/109] [WIP] ast modification API --- lib/generators/add-generator.js | 4 +- lib/init/transformations/context/context.js | 4 +- .../transformations/context/context.test.js | 6 +-- .../transformations/devServer/devServer.js | 14 ++++-- .../devServer/devServer.test.js | 4 +- lib/init/transformations/devtool/devtool.js | 4 +- .../transformations/devtool/devtool.test.js | 8 ++-- lib/init/transformations/entry/entry.js | 4 +- lib/init/transformations/entry/entry.test.js | 14 +++--- .../transformations/externals/externals.js | 4 +- .../externals/externals.test.js | 18 +++---- lib/init/transformations/index.js | 48 ++++++++++--------- lib/init/transformations/module/module.js | 8 ++-- .../transformations/module/module.test.js | 6 +-- lib/init/transformations/node/node.js | 4 +- lib/init/transformations/node/node.test.js | 2 +- lib/init/transformations/other/amd.js | 8 +++- lib/init/transformations/other/bail.js | 4 +- lib/init/transformations/other/cache.js | 4 +- lib/init/transformations/other/merge.js | 4 +- lib/init/transformations/other/other.test.js | 12 ++--- lib/init/transformations/other/profile.js | 4 +- lib/init/transformations/output/output.js | 4 +- .../transformations/output/output.test.js | 2 +- .../performance/performance.js | 8 +++- .../performance/performance.test.js | 2 +- lib/init/transformations/plugins/plugins.js | 4 +- .../transformations/plugins/plugins.test.js | 2 +- lib/init/transformations/resolve/resolve.js | 4 +- .../transformations/resolve/resolve.test.js | 2 +- lib/init/transformations/stats/stats.js | 14 ++++-- lib/init/transformations/stats/stats.test.js | 4 +- lib/init/transformations/target/target.js | 4 +- .../transformations/target/target.test.js | 4 +- .../transformations/top-scope/top-scope.js | 4 +- .../top-scope/top-scope.test.js | 2 +- lib/init/transformations/watch/watch.js | 4 +- lib/init/transformations/watch/watch.test.js | 8 ++-- .../transformations/watch/watchOptions.js | 4 +- .../watch/watchOptions.test.js | 6 +-- lib/utils/defineTest.js | 14 ++++-- 41 files changed, 159 insertions(+), 125 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 22af9d2a277..18af0556d67 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -13,8 +13,8 @@ module.exports = class AddGenerator extends Generator { this.dependencies = []; this.configuration = { config: { - webpackOptions: {}, - topScope: [] + webpackOptions: {} + // topScope: [] } }; } diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index 25d72190b88..dcb4c7e9069 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js index 3cdb05463d3..fd4dbbca08f 100644 --- a/lib/init/transformations/context/context.test.js +++ b/lib/init/transformations/context/context.test.js @@ -2,6 +2,6 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "context", "context-0", "path.resolve(__dirname, 'app')"); -defineTest(__dirname, "context", "context-1", "'./some/fake/path'"); -defineTest(__dirname, "context", "context-2", "contextVariable"); +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"); diff --git a/lib/init/transformations/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js index 9740f55be32..975580c5e78 100644 --- a/lib/init/transformations/devServer/devServer.js +++ b/lib/init/transformations/devServer/devServer.js @@ -13,16 +13,24 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createDevServerProperty(p) { utils.pushCreateProperty(j, p, "devServer", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "devServer"); } - if (webpackProperties && typeof webpackProperties === "object") { + if ( + webpackProperties && + action === "init" && + typeof webpackProperties === "object" + ) { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createDevServerProperty)); - } else if (webpackProperties && webpackProperties.length) { + } else if ( + webpackProperties && + action === "init" && + webpackProperties.length + ) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/devServer/devServer.test.js b/lib/init/transformations/devServer/devServer.test.js index ba01ec89cd0..c6e78904fa0 100644 --- a/lib/init/transformations/devServer/devServer.test.js +++ b/lib/init/transformations/devServer/devServer.test.js @@ -6,5 +6,5 @@ defineTest(__dirname, "devServer", "devServer-0", { contentBase: "path.join(__dirname, 'dist')", compress: true, port: 9000 -}); -defineTest(__dirname, "devServer", "devServer-1", "someVar"); +}, "init"); +defineTest(__dirname, "devServer", "devServer-1", "someVar", "init"); diff --git a/lib/init/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js index 9086cb86cc6..9c9b01b0683 100644 --- a/lib/init/transformations/devtool/devtool.js +++ b/lib/init/transformations/devtool/devtool.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/devtool/devtool.test.js b/lib/init/transformations/devtool/devtool.test.js index d5f291d411e..4c9dd10c747 100644 --- a/lib/init/transformations/devtool/devtool.test.js +++ b/lib/init/transformations/devtool/devtool.test.js @@ -2,7 +2,7 @@ const defineTest = require("../../../utils/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"); +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"); diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index 75a2efc7b5d..b1307d7067a 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createEntryProperty(p) { if (typeof webpackProperties === "string") { return utils.pushCreateProperty(j, p, "entry", webpackProperties); @@ -31,7 +31,7 @@ module.exports = function(j, ast, webpackProperties) { return utils.pushObjectKeys(j, p, webpackProperties, "entry"); } } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createEntryProperty)); diff --git a/lib/init/transformations/entry/entry.test.js b/lib/init/transformations/entry/entry.test.js index 7b65d6d873f..8bcbc94048c 100644 --- a/lib/init/transformations/entry/entry.test.js +++ b/lib/init/transformations/entry/entry.test.js @@ -2,23 +2,23 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "entry", "entry-0", "'index.js'"); -defineTest(__dirname, "entry", "entry-0", ["'index.js'", "'app.js'"]); +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" -}); -defineTest(__dirname, "entry", "entry-0", "() => 'index.js'"); +}, "init"); +defineTest(__dirname, "entry", "entry-0", "() => 'index.js'", "init"); defineTest( __dirname, "entry", "entry-0", - "() => new Promise((resolve) => resolve(['./app', './router']))" + "() => new Promise((resolve) => resolve(['./app', './router']))", "init" ); -defineTest(__dirname, "entry", "entry-0", "entryStringVariable"); +defineTest(__dirname, "entry", "entry-0", "entryStringVariable", "init"); diff --git a/lib/init/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js index 0c26e0c2bb0..b6a62fe66a7 100644 --- a/lib/init/transformations/externals/externals.js +++ b/lib/init/transformations/externals/externals.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createExternalProperty(p) { if ( webpackProperties instanceof RegExp || @@ -34,7 +34,7 @@ module.exports = function(j, ast, webpackProperties) { return utils.pushObjectKeys(j, p, webpackProperties, "externals"); } } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter( diff --git a/lib/init/transformations/externals/externals.test.js b/lib/init/transformations/externals/externals.test.js index 58e2a00a8f1..37e073e7721 100644 --- a/lib/init/transformations/externals/externals.test.js +++ b/lib/init/transformations/externals/externals.test.js @@ -2,23 +2,23 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "externals", "externals-0", /react/); +defineTest(__dirname, "externals", "externals-0", /react/, "init"); defineTest(__dirname, "externals", "externals-1", { jquery: "'jQuery'", react: "'react'" -}); +}, "init"); -defineTest(__dirname, "externals", "externals-1", "myObj"); +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: { @@ -26,7 +26,7 @@ defineTest(__dirname, "externals", "externals-1", { amd: "'lodash'", root: "'_'" } -}); +}, "init"); defineTest(__dirname, "externals", "externals-1", { lodash: { @@ -34,7 +34,7 @@ defineTest(__dirname, "externals", "externals-1", { amd: "hidash", root: "_" } -}); +}, "init"); defineTest(__dirname, "externals", "externals-1", [ { @@ -48,7 +48,7 @@ defineTest(__dirname, "externals", "externals-1", [ "}" + "callback();" + "}" -]); +], "init"); defineTest(__dirname, "externals", "externals-1", [ "myObj", @@ -58,4 +58,4 @@ defineTest(__dirname, "externals", "externals-1", [ "}" + "callback();" + "}" -]); +], "init"); diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 23009a4251a..120ce72ea6a 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -65,32 +65,36 @@ const transformsObject = { module.exports = function runTransform(webpackProperties, action) { // webpackOptions.name sent to nameTransform if match - console.log(webpackProperties); - 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]]; + 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], config[stringVal]]; + return [transformsObject[k]]; } - } else { - return [transformsObject[k]]; - } - }); + }) + .filter(e => e[1]); - const ast = j((action ? webpackProperties.configFile : "module.exports = {}")); - const transformAction = action || "init"; + 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, transformAction, f[1]); + return f[0](j, ast, f[1], transformAction); } }) .then(() => { @@ -101,7 +105,9 @@ module.exports = function runTransform(webpackProperties, action) { configurationName = "webpack." + config.configName + ".js"; } - const outputPath = action ? webpackProperties.configPath : path.join(process.cwd(), configurationName); + const outputPath = action + ? webpackProperties.configPath + : path.join(process.cwd(), configurationName); const source = ast.toSource({ quote: "single" }); @@ -116,9 +122,7 @@ module.exports = function runTransform(webpackProperties, action) { //TODO: update in literal process.stdout.write( "\n" + - chalk.green( - `Congratulations! ${"something"} has been ${action}ed!\n` - ) + chalk.green(`Congratulations! ${"something"} has been ${action}ed!\n`) ); } else { process.stdout.write( diff --git a/lib/init/transformations/module/module.js b/lib/init/transformations/module/module.js index d8e09eee142..0e311908208 100644 --- a/lib/init/transformations/module/module.js +++ b/lib/init/transformations/module/module.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createModuleProperties(p) { utils.pushCreateProperty(j, p, "module", j.objectExpression([])); return utils.safeTraverse(p, ["key", "name"] === "module"); @@ -21,12 +21,12 @@ module.exports = function(j, ast, webpackProperties) { function createRules(p) { return utils.pushObjectKeys(j, p, webpackProperties, "module"); } - if (!webpackProperties) { - return ast; - } else { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createModuleProperties)) .forEach(p => createRules(p)); + } else { + return ast; } }; diff --git a/lib/init/transformations/module/module.test.js b/lib/init/transformations/module/module.test.js index a6f6b971bfb..16b33594fdf 100644 --- a/lib/init/transformations/module/module.test.js +++ b/lib/init/transformations/module/module.test.js @@ -41,7 +41,7 @@ defineTest(__dirname, "module", "module-0", { } } ] -}); +}, "init"); defineTest(__dirname, "module", "module-1", { noParse: /jquery|lodash/, @@ -62,7 +62,7 @@ defineTest(__dirname, "module", "module-1", { ] } ] -}); +}, "init"); defineTest(__dirname, "module", "module-0", { rules: [ @@ -105,4 +105,4 @@ defineTest(__dirname, "module", "module-0", { } } ] -}); +}, "init"); diff --git a/lib/init/transformations/node/node.js b/lib/init/transformations/node/node.js index 9f504af049d..5d42397342e 100644 --- a/lib/init/transformations/node/node.js +++ b/lib/init/transformations/node/node.js @@ -13,12 +13,12 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createNodeProperty(p) { utils.pushCreateProperty(j, p, "node", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "node"); } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createNodeProperty)); diff --git a/lib/init/transformations/node/node.test.js b/lib/init/transformations/node/node.test.js index ccc6e87a331..83d0b9c9046 100644 --- a/lib/init/transformations/node/node.test.js +++ b/lib/init/transformations/node/node.test.js @@ -10,4 +10,4 @@ defineTest(__dirname, "node", "node-0", { __filename: "mock", __dirname: "mock", setImmediate: true -}); +}, "init"); diff --git a/lib/init/transformations/other/amd.js b/lib/init/transformations/other/amd.js index e8aaf53e48f..0983b5af858 100644 --- a/lib/init/transformations/other/amd.js +++ b/lib/init/transformations/other/amd.js @@ -13,12 +13,16 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createAMDProperty(p) { utils.pushCreateProperty(j, p, "amd", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "amd"); } - if (webpackProperties && typeof webpackProperties === "object") { + if ( + webpackProperties && + action === "init" && + typeof webpackProperties === "object" + ) { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createAMDProperty)); diff --git a/lib/init/transformations/other/bail.js b/lib/init/transformations/other/bail.js index 77fcc5ef222..5f4c8b8c8ab 100644 --- a/lib/init/transformations/other/bail.js +++ b/lib/init/transformations/other/bail.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/other/cache.js b/lib/init/transformations/other/cache.js index 910da49602b..6c1a79b89eb 100644 --- a/lib/init/transformations/other/cache.js +++ b/lib/init/transformations/other/cache.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/other/merge.js b/lib/init/transformations/other/merge.js index 5a80331de5d..7bde4fae7bb 100644 --- a/lib/init/transformations/other/merge.js +++ b/lib/init/transformations/other/merge.js @@ -11,7 +11,7 @@ * @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 => { @@ -38,7 +38,7 @@ module.exports = function(j, ast, webpackProperties) { }; p.value.body[bodyLength - 1] = newVal; } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast.find(j.Program).filter(p => createMergeProperty(p)); } else { return ast; diff --git a/lib/init/transformations/other/other.test.js b/lib/init/transformations/other/other.test.js index e0715ec3d81..e192b855a77 100644 --- a/lib/init/transformations/other/other.test.js +++ b/lib/init/transformations/other/other.test.js @@ -5,9 +5,9 @@ const defineTest = require("../../../utils/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"); +}, "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"); diff --git a/lib/init/transformations/other/profile.js b/lib/init/transformations/other/profile.js index 5de5736ae82..cae8d3a51dc 100644 --- a/lib/init/transformations/other/profile.js +++ b/lib/init/transformations/other/profile.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/output/output.js b/lib/init/transformations/output/output.js index 08e7e35b51b..913ed144228 100644 --- a/lib/init/transformations/output/output.js +++ b/lib/init/transformations/output/output.js @@ -12,12 +12,12 @@ const utils = require("../../../utils/ast-utils"); * @param { Object } webpackProperties - Object containing transformation rules * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createOutputProperties(p) { utils.pushCreateProperty(j, p, "output", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "output"); } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createOutputProperties)); diff --git a/lib/init/transformations/output/output.test.js b/lib/init/transformations/output/output.test.js index a6fce478961..54b85951282 100644 --- a/lib/init/transformations/output/output.test.js +++ b/lib/init/transformations/output/output.test.js @@ -12,4 +12,4 @@ defineTest(__dirname, "output", "output-0", { sourcePrefix: jscodeshift("'\t'"), umdNamedDefine: true, strictModuleExceptionHandling: true -}); +}, "init"); diff --git a/lib/init/transformations/performance/performance.js b/lib/init/transformations/performance/performance.js index 1caf2772181..9e2864928e7 100644 --- a/lib/init/transformations/performance/performance.js +++ b/lib/init/transformations/performance/performance.js @@ -13,12 +13,16 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createPerformanceProperty(p) { utils.pushCreateProperty(j, p, "performance", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "performance"); } - if (webpackProperties && typeof webpackProperties === "object") { + if ( + webpackProperties && + action === "init" && + typeof webpackProperties === "object" + ) { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createPerformanceProperty)); diff --git a/lib/init/transformations/performance/performance.test.js b/lib/init/transformations/performance/performance.test.js index 7ebe8801111..9b8068ee6ca 100644 --- a/lib/init/transformations/performance/performance.test.js +++ b/lib/init/transformations/performance/performance.test.js @@ -8,4 +8,4 @@ defineTest(__dirname, "performance", "performance-0", { maxAssetSize: 100000, assetFilter: "function(assetFilename) {" + "return assetFilename.endsWith('.js');" + "}" -}); +}, "init"); diff --git a/lib/init/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js index bc19e41f7a2..8f9f6f6dbe6 100644 --- a/lib/init/transformations/plugins/plugins.js +++ b/lib/init/transformations/plugins/plugins.js @@ -23,8 +23,8 @@ module.exports = function(j, ast, webpackProperties, action) { ); return p.value.properties.push(pluginArray); } - if (webpackProperties && action === "init") { - if (Array.isArray(webpackProperties)) { + if (webpackProperties) { + if (Array.isArray(webpackProperties) && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createPluginsProperty)); diff --git a/lib/init/transformations/plugins/plugins.test.js b/lib/init/transformations/plugins/plugins.test.js index 3f22584855c..c1c782036a6 100644 --- a/lib/init/transformations/plugins/plugins.test.js +++ b/lib/init/transformations/plugins/plugins.test.js @@ -11,4 +11,4 @@ defineTest(__dirname, "plugins", "plugins-0", [ "'" + "vendor" + "-[hash].min.js'})" -]); +], "init"); diff --git a/lib/init/transformations/resolve/resolve.js b/lib/init/transformations/resolve/resolve.js index 37037038694..461b8530848 100644 --- a/lib/init/transformations/resolve/resolve.js +++ b/lib/init/transformations/resolve/resolve.js @@ -13,12 +13,12 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createResolveProperties(p) { utils.pushCreateProperty(j, p, "resolve", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "resolve"); } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createResolveProperties)); diff --git a/lib/init/transformations/resolve/resolve.test.js b/lib/init/transformations/resolve/resolve.test.js index ad231f1a26d..8c945a6438b 100644 --- a/lib/init/transformations/resolve/resolve.test.js +++ b/lib/init/transformations/resolve/resolve.test.js @@ -26,4 +26,4 @@ defineTest(__dirname, "resolve", "resolve-0", { }, plugins: ["somePlugin", "'stringVal'"], symlinks: true -}); +}, "init"); diff --git a/lib/init/transformations/stats/stats.js b/lib/init/transformations/stats/stats.js index f90f33f2087..cd2a55d78ca 100644 --- a/lib/init/transformations/stats/stats.js +++ b/lib/init/transformations/stats/stats.js @@ -13,16 +13,24 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createStatsProperty(p) { utils.pushCreateProperty(j, p, "stats", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "stats"); } - if (webpackProperties && typeof webpackProperties === "object") { + if ( + webpackProperties && + action === "init" && + typeof webpackProperties === "object" + ) { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createStatsProperty)); - } else if (webpackProperties && webpackProperties.length) { + } else if ( + webpackProperties && + action === "init" && + webpackProperties.length + ) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/stats/stats.test.js b/lib/init/transformations/stats/stats.test.js index 9a801831f36..5f398d42c82 100644 --- a/lib/init/transformations/stats/stats.test.js +++ b/lib/init/transformations/stats/stats.test.js @@ -32,5 +32,5 @@ defineTest(__dirname, "stats", "stats-0", { usedExports: false, version: true, warnings: true -}); -defineTest(__dirname, "stats", "stats-0", "'errors-only'"); +}, "init"); +defineTest(__dirname, "stats", "stats-0", "'errors-only'", "init"); diff --git a/lib/init/transformations/target/target.js b/lib/init/transformations/target/target.js index 8d352e814a6..631b727f801 100644 --- a/lib/init/transformations/target/target.js +++ b/lib/init/transformations/target/target.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (webpackProperties && webpackProperties.length) { +module.exports = function(j, ast, webpackProperties, action) { + if (webpackProperties && action === "init" && webpackProperties.length) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/target/target.test.js b/lib/init/transformations/target/target.test.js index ad63f9f6bdc..b844b5bdc1e 100644 --- a/lib/init/transformations/target/target.test.js +++ b/lib/init/transformations/target/target.test.js @@ -2,5 +2,5 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "target", "target-0", "'async-node'"); -defineTest(__dirname, "target", "target-1", "node"); +defineTest(__dirname, "target", "target-0", "'async-node'", "init"); +defineTest(__dirname, "target", "target-1", "node", "init"); diff --git a/lib/init/transformations/top-scope/top-scope.js b/lib/init/transformations/top-scope/top-scope.js index daa92a75642..3352dbfd3bb 100644 --- a/lib/init/transformations/top-scope/top-scope.js +++ b/lib/init/transformations/top-scope/top-scope.js @@ -9,7 +9,7 @@ * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createTopScopeProperty(p) { webpackProperties.forEach(n => { p.value.body.splice(-1, 0, n); @@ -17,5 +17,7 @@ module.exports = function(j, ast, webpackProperties) { } 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 index 566764c7d14..c73813b1434 100644 --- a/lib/init/transformations/top-scope/top-scope.test.js +++ b/lib/init/transformations/top-scope/top-scope.test.js @@ -2,4 +2,4 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "top-scope", "top-scope-0", ["var test = 'me';"]); +defineTest(__dirname, "top-scope", "top-scope-0", ["var test = 'me';"], "init"); diff --git a/lib/init/transformations/watch/watch.js b/lib/init/transformations/watch/watch.js index b0cdd1adccf..ba0e66d2c21 100644 --- a/lib/init/transformations/watch/watch.js +++ b/lib/init/transformations/watch/watch.js @@ -13,8 +13,8 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { - if (typeof webpackProperties === "boolean") { +module.exports = function(j, ast, webpackProperties, action) { + if (typeof webpackProperties === "boolean" && action === "init") { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/watch/watch.test.js b/lib/init/transformations/watch/watch.test.js index 51fd9c82d1e..3ecbedb3fe6 100644 --- a/lib/init/transformations/watch/watch.test.js +++ b/lib/init/transformations/watch/watch.test.js @@ -2,7 +2,7 @@ const defineTest = require("../../../utils/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); +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"); diff --git a/lib/init/transformations/watch/watchOptions.js b/lib/init/transformations/watch/watchOptions.js index 2c9cac212df..96d42e4d1af 100644 --- a/lib/init/transformations/watch/watchOptions.js +++ b/lib/init/transformations/watch/watchOptions.js @@ -13,12 +13,12 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties) { +module.exports = function(j, ast, webpackProperties, action) { function createWatchOptionsProperty(p) { utils.pushCreateProperty(j, p, "watchOptions", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "watchOptions"); } - if (webpackProperties) { + if (webpackProperties && action === "init") { return ast .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createWatchOptionsProperty)); diff --git a/lib/init/transformations/watch/watchOptions.test.js b/lib/init/transformations/watch/watchOptions.test.js index bca1867c73a..04e48ad9d2b 100644 --- a/lib/init/transformations/watch/watchOptions.test.js +++ b/lib/init/transformations/watch/watchOptions.test.js @@ -6,16 +6,16 @@ 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"); diff --git a/lib/utils/defineTest.js b/lib/utils/defineTest.js index b2417c2213e..39796961b1f 100644 --- a/lib/utils/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 + * @param {String} action init, update or remove, decides how to format the AST * @return {TBD} TBD */ 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" }); } @@ -74,9 +76,10 @@ function runSingleTansform( * "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 + * @param {String} action init, update or remove, decides how to format the AST * @return {TBD} TBD */ -function defineTest(dirName, transformName, testFilePrefix, type) { +function defineTest(dirName, transformName, testFilePrefix, type, action) { const testName = testFilePrefix ? `transforms correctly using "${testFilePrefix}" data` : "transforms correctly"; @@ -86,7 +89,8 @@ function defineTest(dirName, transformName, testFilePrefix, type) { dirName, transformName, testFilePrefix, - type + type, + action ); expect(output).toMatchSnapshot(); }); From 2865b40d7c91a98c982017f208d4ec3ebf23d830 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 07:37:53 +0100 Subject: [PATCH 018/109] [WIP] AST modification API --- lib/generators/add-generator.js | 15 +- .../transformations/context/context.test.js | 8 +- .../devServer/devServer.test.js | 16 +- .../transformations/devtool/devtool.test.js | 8 +- lib/init/transformations/entry/entry.test.js | 33 ++- .../externals/externals.test.js | 144 +++++++----- lib/init/transformations/index.js | 6 +- .../transformations/module/module.test.js | 214 ++++++++++-------- lib/init/transformations/node/node.test.js | 24 +- lib/init/transformations/other/other.test.js | 14 +- .../transformations/output/output.test.js | 26 ++- .../performance/performance.test.js | 22 +- .../transformations/plugins/plugins.test.js | 26 ++- .../transformations/resolve/resolve.test.js | 54 +++-- lib/init/transformations/stats/stats.test.js | 68 +++--- .../watch/watchOptions.test.js | 48 ++-- 16 files changed, 441 insertions(+), 285 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 18af0556d67..c7851e70d71 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -4,7 +4,7 @@ const PROP_TYPES = require("../utils/prop-types"); const RawList = require("webpack-addons").RawList; const Input = require("webpack-addons").Input; -//const getPackageManager = require("../utils/package-manager").getPackageManager; +const getPackageManager = require("../utils/package-manager").getPackageManager; const npmExists = require("../utils/npm-exists"); module.exports = class AddGenerator extends Generator { @@ -13,8 +13,8 @@ module.exports = class AddGenerator extends Generator { this.dependencies = []; this.configuration = { config: { - webpackOptions: {} - // topScope: [] + webpackOptions: {}, + topScope: [] } }; } @@ -56,21 +56,22 @@ module.exports = class AddGenerator extends Generator { p => p.toLowerCase().indexOf(answerToAction.actionAnswer) >= 0 ); if (pluginExist) { - this.configuration.config.webpackOptions[action] = pluginExist; + this.configuration.config.item = pluginExist; + this.configuration.config.webpackOptions[ + action + ] = `new webpack.${pluginExist}`; done(); } else { - // check at npm or throw npmExists(answerToAction.actionAnswer).then(p => { if (p) { this.dependencies.push(answerToAction.actionAnswer); this.configuration.config.webpackOptions[action] = answerToAction.actionAnswer; done(); - /* + this.runInstall(getPackageManager(), this.dependencies, { "save-dev": true }); - */ } else { console.error( answerToAction.actionAnswer, diff --git a/lib/init/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js index fd4dbbca08f..a11d212931e 100644 --- a/lib/init/transformations/context/context.test.js +++ b/lib/init/transformations/context/context.test.js @@ -2,6 +2,12 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "context", "context-0", "path.resolve(__dirname, 'app')", "init"); +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"); diff --git a/lib/init/transformations/devServer/devServer.test.js b/lib/init/transformations/devServer/devServer.test.js index c6e78904fa0..f0bc3dd07d2 100644 --- a/lib/init/transformations/devServer/devServer.test.js +++ b/lib/init/transformations/devServer/devServer.test.js @@ -2,9 +2,15 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "devServer", "devServer-0", { - contentBase: "path.join(__dirname, 'dist')", - compress: true, - port: 9000 -}, "init"); +defineTest( + __dirname, + "devServer", + "devServer-0", + { + contentBase: "path.join(__dirname, 'dist')", + compress: true, + port: 9000 + }, + "init" +); defineTest(__dirname, "devServer", "devServer-1", "someVar", "init"); diff --git a/lib/init/transformations/devtool/devtool.test.js b/lib/init/transformations/devtool/devtool.test.js index 4c9dd10c747..0bbceb8b5c3 100644 --- a/lib/init/transformations/devtool/devtool.test.js +++ b/lib/init/transformations/devtool/devtool.test.js @@ -4,5 +4,11 @@ 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", + "'cheap-module-source-map'", + "init" +); defineTest(__dirname, "devtool", "devtool-1", "false", "init"); diff --git a/lib/init/transformations/entry/entry.test.js b/lib/init/transformations/entry/entry.test.js index 8bcbc94048c..eb1a51eab10 100644 --- a/lib/init/transformations/entry/entry.test.js +++ b/lib/init/transformations/entry/entry.test.js @@ -4,21 +4,34 @@ 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", + { + 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", + { + 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" + "() => new Promise((resolve) => resolve(['./app', './router']))", + "init" ); defineTest(__dirname, "entry", "entry-0", "entryStringVariable", "init"); diff --git a/lib/init/transformations/externals/externals.test.js b/lib/init/transformations/externals/externals.test.js index 37e073e7721..099bed1e3c0 100644 --- a/lib/init/transformations/externals/externals.test.js +++ b/lib/init/transformations/externals/externals.test.js @@ -3,59 +3,101 @@ 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", + { + 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", [ +defineTest( + __dirname, + "externals", + "externals-1", { - a: "false", - b: "true", - "'./ext'": "./hey" + jquery: "'jQuery'", + react: "reactObj" }, - "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"); + "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" +); diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 120ce72ea6a..1f157754a4d 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -119,10 +119,12 @@ module.exports = function runTransform(webpackProperties, action) { }); }); if (action) { - //TODO: update in literal process.stdout.write( "\n" + - chalk.green(`Congratulations! ${"something"} has been ${action}ed!\n`) + chalk.green( + `Congratulations! ${webpackProperties.config + .item} has been ${action}ed!\n` + ) ); } else { process.stdout.write( diff --git a/lib/init/transformations/module/module.test.js b/lib/init/transformations/module/module.test.js index 16b33594fdf..8ce97e3e102 100644 --- a/lib/init/transformations/module/module.test.js +++ b/lib/init/transformations/module/module.test.js @@ -2,107 +2,125 @@ 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]')" +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"] + } } - }, - { - 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"); + ] + }, + "init" +); -defineTest(__dirname, "module", "module-1", { - noParse: /jquery|lodash/, - rules: [ - { - test: new RegExp(/\.js$/), - parser: { - amd: false +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'" + } }, - use: [ - "'htmllint-loader'", - { - loader: "'html-loader'", - options: { - hello: "'world'" - } + { + 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: [ - "{{#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"); + ] + }, + "init" +); diff --git a/lib/init/transformations/node/node.test.js b/lib/init/transformations/node/node.test.js index 83d0b9c9046..e33fa36a1f9 100644 --- a/lib/init/transformations/node/node.test.js +++ b/lib/init/transformations/node/node.test.js @@ -2,12 +2,18 @@ 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"); +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/other.test.js b/lib/init/transformations/other/other.test.js index e192b855a77..69437af2ca4 100644 --- a/lib/init/transformations/other/other.test.js +++ b/lib/init/transformations/other/other.test.js @@ -2,10 +2,16 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "amd", "other-0", { - jQuery: true, - kQuery: false -}, "init"); +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"); diff --git a/lib/init/transformations/output/output.test.js b/lib/init/transformations/output/output.test.js index 54b85951282..06e2c8c1ec4 100644 --- a/lib/init/transformations/output/output.test.js +++ b/lib/init/transformations/output/output.test.js @@ -3,13 +3,19 @@ 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-0", + { + filename: "'bundle'", + path: "'dist/assets'", + pathinfo: true, + publicPath: "'https://google.com'", + sourceMapFilename: "'[name].map'", + sourcePrefix: jscodeshift("'\t'"), + umdNamedDefine: true, + strictModuleExceptionHandling: true + }, + "init" +); diff --git a/lib/init/transformations/performance/performance.test.js b/lib/init/transformations/performance/performance.test.js index 9b8068ee6ca..c7ea64834d7 100644 --- a/lib/init/transformations/performance/performance.test.js +++ b/lib/init/transformations/performance/performance.test.js @@ -2,10 +2,18 @@ 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-0", + { + hints: "'warning'", + maxEntrypointSize: 400000, + maxAssetSize: 100000, + assetFilter: + "function(assetFilename) {" + + "return assetFilename.endsWith('.js');" + + "}" + }, + "init" +); diff --git a/lib/init/transformations/plugins/plugins.test.js b/lib/init/transformations/plugins/plugins.test.js index c1c782036a6..4fc5f9f5494 100644 --- a/lib/init/transformations/plugins/plugins.test.js +++ b/lib/init/transformations/plugins/plugins.test.js @@ -2,13 +2,19 @@ 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-0", + [ + "new webpack.optimize.CommonsChunkPlugin({name:" + + "'" + + "vendor" + + "'" + + ",filename:" + + "'" + + "vendor" + + "-[hash].min.js'})" + ], + "init" +); diff --git a/lib/init/transformations/resolve/resolve.test.js b/lib/init/transformations/resolve/resolve.test.js index 8c945a6438b..4deb26004a4 100644 --- a/lib/init/transformations/resolve/resolve.test.js +++ b/lib/init/transformations/resolve/resolve.test.js @@ -2,28 +2,34 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "resolve", "resolve-0", { - alias: { - inject: "{{#if_eq build 'standalone'}}", - hello: "'world'", - inject_1: "{{/if_eq}}", - world: "hello" +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 }, - 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 -}, "init"); + "init" +); diff --git a/lib/init/transformations/stats/stats.test.js b/lib/init/transformations/stats/stats.test.js index 5f398d42c82..499f7d4780b 100644 --- a/lib/init/transformations/stats/stats.test.js +++ b/lib/init/transformations/stats/stats.test.js @@ -2,35 +2,41 @@ 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", + { + 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"); diff --git a/lib/init/transformations/watch/watchOptions.test.js b/lib/init/transformations/watch/watchOptions.test.js index 04e48ad9d2b..ca77eb38842 100644 --- a/lib/init/transformations/watch/watchOptions.test.js +++ b/lib/init/transformations/watch/watchOptions.test.js @@ -2,20 +2,38 @@ const defineTest = require("../../../utils/defineTest"); -defineTest(__dirname, "watchOptions", "watch-0", { - aggregateTimeout: 300, - poll: 1000, - ignored: "/node_modules/" -}, "init"); +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-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-2", + { + aggregateTimeout: 300, + poll: 1000, + ignored: "/node_modules/" + }, + "init" +); From 83e368a00ef1e5a2b0e2a5aa5acdf8394a5d41b7 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Tue, 12 Dec 2017 07:41:18 +0100 Subject: [PATCH 019/109] use webpack-next dep to get UT to pass --- package-lock.json | 817 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 808 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfc3674ff5f..7e0a1aaf13c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1436,6 +1436,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2553,6 +2554,795 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, "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", @@ -4714,6 +5504,12 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5001,6 +5797,16 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", @@ -5895,6 +6701,7 @@ "anymatch": "1.3.2", "exec-sh": "0.2.1", "fb-watchman": "2.0.0", + "fsevents": "1.1.3", "minimatch": "3.0.4", "minimist": "1.2.0", "walker": "1.0.7", @@ -7001,16 +7808,6 @@ "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" - } - }, "tapable": { "version": "1.0.0-beta.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.3.tgz", diff --git a/package.json b/package.json index 77818dd4fc9..d16109a4a4b 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "resolve-cwd": "^2.0.0", "rx": "^4.1.0", "supports-color": "^4.4.0", - "webpack": "^4.0.0-alpha.0", + "webpack": "next", "webpack-addons": "^1.1.4", "yargs": "^9.0.1", "yeoman-environment": "^2.0.0", From 736b7d2d2c05045eed0d5ae51cf7541c0be1b2b2 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 08:37:00 +0100 Subject: [PATCH 020/109] add update alias --- bin/config-yargs.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/config-yargs.js b/bin/config-yargs.js index a023ac52a8a..af4721cb76a 100644 --- a/bin/config-yargs.js +++ b/bin/config-yargs.js @@ -38,6 +38,11 @@ module.exports = function(yargs) { 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 + }, "generate-loader": { type: "boolean", describe: "Generates a new webpack loader project", From 82c64db18002b5baa25d7e66d4fa80cbbb0da880 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 10:40:16 +0100 Subject: [PATCH 021/109] add support for npm installation --- bin/convert-argv.js | 6 +- lib/generators/add-generator.js | 25 +++++++- lib/init/transformations/index.js | 5 +- lib/migrate/loaders/loaders.js | 66 ++++++++++---------- lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js | 28 ++++----- lib/utils/WebpackOptionsValidationError.js | 7 +-- 6 files changed, 79 insertions(+), 58 deletions(-) diff --git a/bin/convert-argv.js b/bin/convert-argv.js index 70866ebd965..037e3f20eac 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -609,9 +609,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); diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index c7851e70d71..56c3f43fcde 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -7,6 +7,11 @@ const Input = require("webpack-addons").Input; const getPackageManager = require("../utils/package-manager").getPackageManager; const npmExists = require("../utils/npm-exists"); +// https://gist.github.com/efenacigiray/9367920 +function replaceAt(string, index, replace) { + return string.substring(0, index) + replace + string.substring(index + 1); +} + module.exports = class AddGenerator extends Generator { constructor(args, opts) { super(args, opts); @@ -65,8 +70,24 @@ module.exports = class AddGenerator extends Generator { npmExists(answerToAction.actionAnswer).then(p => { if (p) { this.dependencies.push(answerToAction.actionAnswer); - this.configuration.config.webpackOptions[action] = - 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, { diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 1f157754a4d..457489b7c83 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -122,8 +122,9 @@ module.exports = function runTransform(webpackProperties, action) { process.stdout.write( "\n" + chalk.green( - `Congratulations! ${webpackProperties.config - .item} has been ${action}ed!\n` + `Congratulations! ${ + webpackProperties.config.item + } has been ${action}ed!\n` ) ); } else { diff --git a/lib/migrate/loaders/loaders.js b/lib/migrate/loaders/loaders.js index 6c30e8602f9..c8e0620b0b4 100644 --- a/lib/migrate/loaders/loaders.js +++ b/lib/migrate/loaders/loaders.js @@ -15,39 +15,39 @@ 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} [] */ diff --git a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js index a0654b0e556..f0c8e0d46f9 100644 --- a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js @@ -9,20 +9,20 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>) { return j.property("init", j.identifier("sourceMap"), j.identifier("true")); } - return findPluginsByName(j, ast, [ - "webpack.optimize.UglifyJsPlugin" - ]).forEach(path => { - const args = path.value.arguments; + 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()])); + 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 index 0b9f1da2e61..65783b02928 100644 --- a/lib/utils/WebpackOptionsValidationError.js +++ b/lib/utils/WebpackOptionsValidationError.js @@ -132,10 +132,9 @@ class WebpackOptionsValidationError extends Error { 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 - )}`; + 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": From 541ba62f02c4a1fcc807eac62a551fcae3f2d2c3 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 10:43:28 +0100 Subject: [PATCH 022/109] RawList -> List --- dist/utils/WebpackOptionsValidationError.js | 7 +++---- lib/generators/add-generator.js | 4 ++-- lib/generators/init-generator.js | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/dist/utils/WebpackOptionsValidationError.js b/dist/utils/WebpackOptionsValidationError.js index 0b9f1da2e61..65783b02928 100644 --- a/dist/utils/WebpackOptionsValidationError.js +++ b/dist/utils/WebpackOptionsValidationError.js @@ -132,10 +132,9 @@ class WebpackOptionsValidationError extends Error { 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 - )}`; + 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": diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 56c3f43fcde..e232902d5c5 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -1,7 +1,7 @@ const Generator = require("yeoman-generator"); const glob = require("glob-all"); const PROP_TYPES = require("../utils/prop-types"); -const RawList = require("webpack-addons").RawList; +const List = require("webpack-addons").List; const Input = require("webpack-addons").Input; const getPackageManager = require("../utils/package-manager").getPackageManager; @@ -28,7 +28,7 @@ module.exports = class AddGenerator extends Generator { let done = this.async(); let action; this.prompt([ - RawList( + List( "actionType", "What property do you want to add to?", Array.from(PROP_TYPES.keys()) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index d14c599e926..18a901e48e3 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -8,7 +8,7 @@ const createCommonsChunkPlugin = require("webpack-addons") const Input = require("webpack-addons").Input; const Confirm = require("webpack-addons").Confirm; -const RawList = require("webpack-addons").RawList; +const List = require("webpack-addons").List; const getPackageManager = require("../utils/package-manager").getPackageManager; @@ -120,7 +120,7 @@ module.exports = class WebpackGenerator extends Generator { }) .then(() => { this.prompt([ - RawList( + List( "stylingType", "Will you use one of the below CSS solutions?", ["SASS", "LESS", "CSS", "PostCSS", "No"] From d6b7475cbc9d1e518f61c25772aaf7dc529fb21e Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 11:44:29 +0100 Subject: [PATCH 023/109] [WIP] entry api --- lib/generators/add-generator.js | 6 ++++-- lib/init/transformations/entry/entry.js | 24 ++++++++++++++++----- lib/init/transformations/plugins/plugins.js | 4 ++-- lib/utils/ast-utils.js | 14 ++++++------ lib/utils/ast-utils.test.js | 6 +++--- webpack.config.js | 2 +- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index e232902d5c5..3dfc63be76b 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -19,7 +19,7 @@ module.exports = class AddGenerator extends Generator { this.configuration = { config: { webpackOptions: {}, - topScope: [] + topScope: ["const webpack = require('webpack')"] } }; } @@ -103,7 +103,9 @@ module.exports = class AddGenerator extends Generator { }); } } else { - // prompt for properties + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = "hello"; + done(); } }); }); diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index b1307d7067a..abc8e53204b 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +module.exports = function entry(j, ast, webpackProperties, action) { function createEntryProperty(p) { if (typeof webpackProperties === "string") { return utils.pushCreateProperty(j, p, "entry", webpackProperties); @@ -31,10 +31,24 @@ module.exports = function(j, ast, webpackProperties, action) { return utils.pushObjectKeys(j, p, webpackProperties, "entry"); } } - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createEntryProperty)); + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createEntryProperty)); + } else if (action === "add") { + let node = utils.findRootNodesByName(j, ast, "entry"); + if (node) { + node.filter(p => { + if (p.value.value.type === "ObjectExpression") { + // add key value + } + }); + } else { + return entry(j, ast, "k", "init"); + } + return node; + } } else { return ast; } diff --git a/lib/init/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js index 8f9f6f6dbe6..e35b827cf3c 100644 --- a/lib/init/transformations/plugins/plugins.js +++ b/lib/init/transformations/plugins/plugins.js @@ -30,7 +30,7 @@ module.exports = function(j, ast, webpackProperties, action) { .filter(p => utils.isAssignment(null, p, createPluginsProperty)); } else if (action === "add") { return utils - .findPluginsRootNodes(j, ast) + .findRootNodesByName(j, ast, "plugins") .filter(p => p.value.value.elements.push( utils.createEmptyCallableFunctionWithArguments(j, webpackProperties) @@ -38,7 +38,7 @@ module.exports = function(j, ast, webpackProperties, action) { ); } else if (action === "remove") { return utils - .findPluginsRootNodes(j, ast) + .findRootNodesByName(j, ast, "plugins") .filter(p => p.value.value.elements.filter(name => name !== webpackProperties) ); diff --git a/lib/utils/ast-utils.js b/lib/utils/ast-utils.js index 372132233c0..50d09d4cd28 100644 --- a/lib/utils/ast-utils.js +++ b/lib/utils/ast-utils.js @@ -75,19 +75,21 @@ function findPluginsByName( } /* - * @function findPluginsRootNodes + * @function findRootNodesByName * - * 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 + * @param { String } propName - property to search for * @returns Path * */ -function findPluginsRootNodes( +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 } }); } /* @@ -627,7 +629,7 @@ module.exports = { safeTraverse, createProperty, findPluginsByName, - findPluginsRootNodes, + findRootNodesByName, createOrUpdatePluginByName, findVariableToPlugin, isType, diff --git a/lib/utils/ast-utils.test.js b/lib/utils/ast-utils.test.js index fc0bec484a3..e83827c913e 100644 --- a/lib/utils/ast-utils.test.js +++ b/lib/utils/ast-utils.test.js @@ -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); }); }); diff --git a/webpack.config.js b/webpack.config.js index 7043cc9539c..0afdc9ede12 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,3 @@ module.exports = { - plugins: [] + plugins: [], }; From ea5ec2d424610004bb8796ec5583e1c29ea16c94 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 12:21:04 +0100 Subject: [PATCH 024/109] Entry api --- bin/convert-argv.js | 6 ++-- lib/generators/add-generator.js | 4 +-- lib/init/transformations/entry/entry.js | 29 +++++++++++++------- lib/init/transformations/index.js | 5 ++-- lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js | 28 +++++++++---------- lib/utils/WebpackOptionsValidationError.js | 7 +++-- package-lock.json | 8 +++--- 7 files changed, 47 insertions(+), 40 deletions(-) diff --git a/bin/convert-argv.js b/bin/convert-argv.js index 037e3f20eac..70866ebd965 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -609,9 +609,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); diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 3dfc63be76b..77d9f750325 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -80,9 +80,7 @@ module.exports = class AddGenerator extends Generator { normalizePluginName.charAt(0).toUpperCase() ); this.configuration.config.topScope.push( - `const ${pluginName} = require("${ - answerToAction.actionAnswer - }")` + `const ${pluginName} = require("${answerToAction.actionAnswer}")` ); this.configuration.config.webpackOptions[ action diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index abc8e53204b..fb3e3b69229 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -13,7 +13,7 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function entry(j, ast, webpackProperties, action) { +module.exports = function entryTransform(j, ast, webpackProperties, action) { function createEntryProperty(p) { if (typeof webpackProperties === "string") { return utils.pushCreateProperty(j, p, "entry", webpackProperties); @@ -37,17 +37,26 @@ module.exports = function entry(j, ast, webpackProperties, action) { .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createEntryProperty)); } else if (action === "add") { - let node = utils.findRootNodesByName(j, ast, "entry"); - if (node) { - node.filter(p => { - if (p.value.value.type === "ObjectExpression") { - // add key value - } - }); + if (utils.findRootNodesByName(j, ast, "entry").size() !== 0) { + // TODO inject props + return ast + .find(j.ObjectExpression) + .filter(p => utils.pushObjectKeys(j, p, { hey: "Ho" }, "entry")); } else { - return entry(j, ast, "k", "init"); + // TODO: inject props + return entryTransform( + j, + ast, + { + app: "index.js" + }, + "init" + ); } - return node; + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO } } else { return ast; diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 457489b7c83..1f157754a4d 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -122,9 +122,8 @@ module.exports = function runTransform(webpackProperties, action) { process.stdout.write( "\n" + chalk.green( - `Congratulations! ${ - webpackProperties.config.item - } has been ${action}ed!\n` + `Congratulations! ${webpackProperties.config + .item} has been ${action}ed!\n` ) ); } else { diff --git a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js index f0c8e0d46f9..a0654b0e556 100644 --- a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js @@ -9,20 +9,20 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>) { return j.property("init", j.identifier("sourceMap"), j.identifier("true")); } - return findPluginsByName(j, ast, ["webpack.optimize.UglifyJsPlugin"]).forEach( - path => { - const args = path.value.arguments; + 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()])); - } + 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 index 65783b02928..0b9f1da2e61 100644 --- a/lib/utils/WebpackOptionsValidationError.js +++ b/lib/utils/WebpackOptionsValidationError.js @@ -132,9 +132,10 @@ class WebpackOptionsValidationError extends Error { 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)}`; + 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": diff --git a/package-lock.json b/package-lock.json index 7e0a1aaf13c..977fe0210ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7790,13 +7790,13 @@ "requires": { "graceful-fs": "4.1.11", "memory-fs": "0.4.1", - "tapable": "1.0.0-beta.4" + "tapable": "1.0.0-beta.5" }, "dependencies": { "tapable": { - "version": "1.0.0-beta.4", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.4.tgz", - "integrity": "sha512-3yD1lGFQgLeLgp2Hjue7afrviSiXDMBNw495ME25is+RJywZzG0Fl/IbIyD+RER+QUSfhrjZdhnpkRLmSLOYVw==" + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.5.tgz", + "integrity": "sha512-TRKt8j59hRVoYaoSB5IFCbfNEcLzDaVdKrOIPlC1AJAIZTmZZTbHDXGsqiUb9IjeRAYGeQtc617oEzlsnpUi3w==" } } }, From 2e6774ec699ea660177cfa3fed417a14e30ee043 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 14:02:43 +0100 Subject: [PATCH 025/109] remove validate schema & some mocks --- __mocks__/creator/validate-options.mock.js | 23 - __mocks__/inquirer/resolve.mock.js | 39 - dist/utils/resolve-packages.spec.js | 35 +- lib/commands/migrate.js | 12 - lib/utils/WebpackOptionsValidationError.js | 249 ------ lib/utils/resolve-packages.spec.js | 36 +- lib/utils/validate-options.js | 39 - lib/utils/validate-options.spec.js | 25 - lib/utils/validateSchema.js | 67 -- lib/utils/webpackOptionsSchema.js | 896 --------------------- 10 files changed, 69 insertions(+), 1352 deletions(-) delete mode 100644 __mocks__/creator/validate-options.mock.js delete mode 100644 __mocks__/inquirer/resolve.mock.js delete mode 100644 lib/utils/WebpackOptionsValidationError.js delete mode 100644 lib/utils/validate-options.js delete mode 100644 lib/utils/validate-options.spec.js delete mode 100644 lib/utils/validateSchema.js delete mode 100644 lib/utils/webpackOptionsSchema.js 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/dist/utils/resolve-packages.spec.js b/dist/utils/resolve-packages.spec.js index 6b5b1392770..a8385288300 100644 --- a/dist/utils/resolve-packages.spec.js +++ b/dist/utils/resolve-packages.spec.js @@ -1,6 +1,39 @@ "use strict"; +const path = require("path"); -const getLoc = require("../../__mocks__/inquirer/resolve.mock"); +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; diff --git a/lib/commands/migrate.js b/lib/commands/migrate.js index 08ddfa02ca7..0bfa6ae775f 100644 --- a/lib/commands/migrate.js +++ b/lib/commands/migrate.js @@ -6,9 +6,6 @@ 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, @@ -82,17 +79,8 @@ module.exports = function transformFile( .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( 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/utils/resolve-packages.spec.js b/lib/utils/resolve-packages.spec.js index 6b5b1392770..f54515b6524 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; diff --git a/lib/utils/validate-options.js b/lib/utils/validate-options.js deleted file mode 100644 index 143e623f63e..00000000000 --- a/lib/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/utils/validate-options.spec.js b/lib/utils/validate-options.spec.js deleted file mode 100644 index cdb951684f5..00000000000 --- a/lib/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/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" -}; From 50ca3168a727f16788aa648feb687809c85ec196 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 14:09:46 +0100 Subject: [PATCH 026/109] remove some dependencies & update travis temporarily --- .npmignore | 1 - .travis.yml | 2 - dist/utils/resolve-packages.spec.js | 1 + package-lock.json | 290 +++++++++------------------- package.json | 17 +- 5 files changed, 106 insertions(+), 205 deletions(-) diff --git a/.npmignore b/.npmignore index e5b2e46fb55..8ba3247df58 100644 --- a/.npmignore +++ b/.npmignore @@ -7,7 +7,6 @@ lib .vscode .editorconfig .eslintignore -__mocks__ __testfixtures__ *.test.js *.input.js diff --git a/.travis.yml b/.travis.yml index 4e493cc75ec..bfc21517a7e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: node_js node_js: - - "4" - - "5" - "6" - "stable" diff --git a/dist/utils/resolve-packages.spec.js b/dist/utils/resolve-packages.spec.js index a8385288300..f54515b6524 100644 --- a/dist/utils/resolve-packages.spec.js +++ b/dist/utils/resolve-packages.spec.js @@ -1,4 +1,5 @@ "use strict"; + const path = require("path"); function mockPromise(value) { diff --git a/package-lock.json b/package-lock.json index 977fe0210ee..7ae3c633cd1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1536,6 +1536,13 @@ "center-align": "0.1.3", "right-align": "0.1.3", "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + } } }, "clone": { @@ -1649,9 +1656,9 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "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=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", "dev": true }, "convert-source-map": { @@ -2085,14 +2092,6 @@ "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": { @@ -2440,22 +2439,6 @@ "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": { @@ -3540,9 +3523,9 @@ "dev": true }, "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { "async": "1.5.2", @@ -3635,7 +3618,7 @@ "boom": "4.3.1", "cryptiles": "3.1.2", "hoek": "4.2.0", - "sntp": "2.0.2" + "sntp": "2.1.0" } }, "hmac-drbg": { @@ -3677,12 +3660,12 @@ "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=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.1" + "whatwg-encoding": "1.0.3" } }, "http-signature": { @@ -4043,32 +4026,47 @@ "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=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", + "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", "dev": true, "requires": { - "async": "2.5.0", + "async": "2.6.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", + "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.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==", + "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" } + }, + "istanbul-lib-instrument": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", + "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", + "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" + } } } }, @@ -4079,9 +4077,9 @@ "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { "append-transform": "0.4.0" @@ -4103,9 +4101,9 @@ } }, "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", + "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", "dev": true, "requires": { "istanbul-lib-coverage": "1.1.1", @@ -4132,30 +4130,25 @@ } }, "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==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", + "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", "dev": true, "requires": { - "debug": "2.6.9", + "debug": "3.1.0", "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==", + "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": { - "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" + "ms": "2.0.0" } }, "rimraf": { @@ -4170,12 +4163,12 @@ } }, "istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", + "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", "dev": true, "requires": { - "handlebars": "4.0.10" + "handlebars": "4.0.11" } }, "istextorbinary": { @@ -4226,10 +4219,10 @@ "glob": "7.1.2", "graceful-fs": "4.1.11", "is-ci": "1.0.10", - "istanbul-api": "1.1.14", + "istanbul-api": "1.2.1", "istanbul-lib-coverage": "1.1.1", "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-source-maps": "1.2.1", + "istanbul-lib-source-maps": "1.2.2", "jest-changed-files": "21.2.0", "jest-config": "21.2.1", "jest-environment-jsdom": "21.2.1", @@ -4248,7 +4241,7 @@ "string-length": "2.0.0", "strip-ansi": "4.0.0", "which": "1.3.0", - "worker-farm": "1.5.0", + "worker-farm": "1.5.2", "yargs": "9.0.1" }, "dependencies": { @@ -4258,20 +4251,6 @@ "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", @@ -4306,22 +4285,6 @@ "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": { @@ -4380,7 +4343,7 @@ "jest-docblock": "21.2.0", "micromatch": "2.3.11", "sane": "2.2.0", - "worker-farm": "1.5.0" + "worker-farm": "1.5.2" } }, "jest-jasmine2": { @@ -4468,7 +4431,7 @@ "jest-util": "21.2.1", "pify": "3.0.0", "throat": "4.1.0", - "worker-farm": "1.5.0" + "worker-farm": "1.5.2" }, "dependencies": { "pify": { @@ -4696,19 +4659,19 @@ "acorn": "4.0.13", "acorn-globals": "3.1.0", "array-equal": "1.0.0", - "content-type-parser": "1.0.1", + "content-type-parser": "1.0.2", "cssom": "0.3.2", "cssstyle": "0.2.37", "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.1", - "nwmatcher": "1.4.2", + "html-encoding-sniffer": "1.0.2", + "nwmatcher": "1.4.3", "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-encoding": "1.0.3", "whatwg-url": "4.8.0", "xml-name-validator": "2.0.1" } @@ -5662,9 +5625,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwmatcher": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.2.tgz", - "integrity": "sha512-QMkCGQFYp5p+zwU3INntLmz1HMfSx9dMVJMYKmE1yuSf/22Wjo6VPFa405mCLUuQn9lbQvH2DZN9lt10ZNvtAg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", + "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", "dev": true }, "oauth-sign": { @@ -5710,7 +5673,7 @@ "dev": true, "requires": { "minimist": "0.0.8", - "wordwrap": "0.0.2" + "wordwrap": "0.0.3" } }, "optionator": { @@ -6830,60 +6793,6 @@ "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", @@ -6905,9 +6814,9 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "sntp": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", - "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { "hoek": "4.2.0" @@ -7450,11 +7359,6 @@ "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=" - }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", @@ -7863,20 +7767,12 @@ } }, "whatwg-encoding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz", - "integrity": "sha1-PGxFGhmO567FWx7GHQkgxngBpfQ=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", "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 - } + "iconv-lite": "0.4.19" } }, "whatwg-url": { @@ -7910,15 +7806,21 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "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==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", + "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", "dev": true, "requires": { "errno": "0.1.4", diff --git a/package.json b/package.json index d16109a4a4b..166003cb193 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,14 @@ "lint": "eslint \"**/*.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", + "prepare": "flow-remove-types lib/ -d dist/ && npm run format:dist", "pretest": "npm run lint", "test": "jest --coverage" }, "lint-staged": { - "{lib,bin,__mocks__}/**/!(__testfixtures__)/**.js": [ + "{lib,bin}/**/!(__testfixtures__)/**.js": [ "eslint --fix", "git add" ] @@ -61,7 +61,6 @@ "prettier": "^1.5.3", "recast": "git://github.com/kalcifer/recast.git#bug/allowbreak", "resolve-cwd": "^2.0.0", - "rx": "^4.1.0", "supports-color": "^4.4.0", "webpack": "next", "webpack-addons": "^1.1.4", @@ -83,10 +82,12 @@ "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", "lint-staged": "^4.1.3", - "prettier-eslint-cli": "^4.3.2", - "should": "^13.1.0" + "prettier-eslint-cli": "^4.3.2" + }, + "optionalDependencies": { + "schema-utils": "^0.4.2" } } From ee31b6760c592fcda94002e5dc5c68312bd9b0ff Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 14:14:50 +0100 Subject: [PATCH 027/109] use webpack as optional dependency (#202) * use webpack as optional dependency * Update package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 166003cb193..32791952a18 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "prettier-eslint-cli": "^4.3.2" }, "optionalDependencies": { - "schema-utils": "^0.4.2" + "schema-utils": "^0.4.2", + "webpack": "^4.0.0-alpha.0" } } From 757d5ebca4e31852a5868c88aa68153d15f91360 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 14:17:55 +0100 Subject: [PATCH 028/109] use yarn instead of npm (#203) --- package-lock.json | 8239 --------------------------------------------- package.json | 1 - yarn.lock | 5317 +++++++++++++++++++++++++++++ 3 files changed, 5317 insertions(+), 8240 deletions(-) delete mode 100644 package-lock.json create mode 100644 yarn.lock diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7ae3c633cd1..00000000000 --- a/package-lock.json +++ /dev/null @@ -1,8239 +0,0 @@ -{ - "name": "webpack-cli", - "version": "1.5.2", - "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=" - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", - "requires": { - "acorn": "4.0.13" - } - }, - "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=", - "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=" - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "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==", - "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" - } - }, - "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==", - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "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=" - }, - "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-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "2.10.0", - "invariant": "2.2.2", - "semver": "5.4.1" - } - }, - "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==" - }, - "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=" - }, - "binaryextensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.0.0.tgz", - "integrity": "sha1-5ZfRp6ajVYotHHJBoWyZll5qpA8=" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "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=" - }, - "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==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "1.0.6" - } - }, - "browserslist": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", - "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", - "requires": { - "caniuse-lite": "1.0.30000782", - "electron-to-chromium": "1.3.28" - } - }, - "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=", - "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=" - }, - "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=" - }, - "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=" - }, - "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 - } - } - }, - "caniuse-lite": { - "version": "1.0.30000782", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000782.tgz", - "integrity": "sha1-W4K4w4XyU0h0XEccpRMgr7G38lQ=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "0.1.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=", - "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "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==", - "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=", - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - } - } - }, - "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=" - }, - "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=", - "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=" - }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", - "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=" - }, - "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=", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.9" - } - }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.9" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "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==", - "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" - } - }, - "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=" - }, - "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=", - "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=", - "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=" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "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=" - }, - "electron-to-chromium": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", - "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=" - }, - "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=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" - } - }, - "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", - "requires": { - "prr": "0.0.0" - } - }, - "error": { - "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" - } - }, - "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=", - "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=", - "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" - } - }, - "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=" - }, - "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" - } - }, - "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-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" - } - }, - "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" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - } - } - }, - "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": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-all": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", - "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", - "requires": { - "glob": "7.1.2", - "yargs": "1.2.6" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", - "requires": { - "minimist": "0.1.0" - } - } - } - }, - "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.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "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=", - "requires": { - "inherits": "2.0.3" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" - } - }, - "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.1.0" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "1.0.3" - } - }, - "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=" - }, - "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=" - }, - "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=" - }, - "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=", - "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.2.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.2.1.tgz", - "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", - "dev": true, - "requires": { - "async": "2.6.0", - "fileset": "2.0.3", - "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.10.0", - "mkdirp": "0.5.1", - "once": "1.4.0" - }, - "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" - } - }, - "istanbul-lib-instrument": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz", - "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", - "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-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.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", - "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", - "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.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz", - "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", - "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.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz", - "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", - "dev": true, - "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" - }, - "dependencies": { - "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" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.3.tgz", - "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", - "dev": true, - "requires": { - "handlebars": "4.0.11" - } - }, - "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.2.1", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-instrument": "1.8.0", - "istanbul-lib-source-maps": "1.2.2", - "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.2", - "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 - }, - "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" - } - }, - "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.2" - } - }, - "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.2" - }, - "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.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "nwmatcher": "1.4.3", - "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.3", - "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=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "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=" - }, - "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=" - }, - "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=" - }, - "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=" - }, - "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-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=", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } - } - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "requires": { - "mimic-fn": "1.1.0" - } - }, - "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==", - "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=" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "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.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "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==", - "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.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", - "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.3" - } - }, - "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=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - } - }, - "os-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==" - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "requires": { - "asn1.js": "4.9.2", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" - } - }, - "parse-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=" - }, - "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==", - "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" - } - }, - "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=" - }, - "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 - }, - "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "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=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "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==", - "requires": { - "safe-buffer": "5.1.1" - } - }, - "randomfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", - "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "requires": { - "randombytes": "2.0.5", - "safe-buffer": "5.1.1" - } - }, - "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=", - "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=", - "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=", - "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" - } - }, - "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.3", - "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.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.2.tgz", - "integrity": "sha512-LCuuUj7L43TbSIqeERp+/Z2FH/NxSA48mqcWlGTSYUUKsevGafj2SpyaFVTxyWWFLkIAS3p7jDTLpNsrU7PXoA==", - "requires": { - "ajv": "5.2.3", - "ajv-keywords": "2.1.0", - "chalk": "2.3.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" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.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==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "sha.js": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", - "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "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 - }, - "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.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "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==" - }, - "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" - } - }, - "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=", - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3" - } - }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "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==", - "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=" - }, - "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=" - }, - "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=", - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", - "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" - } - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" - }, - "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=", - "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=" - } - } - }, - "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=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "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=", - "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=", - "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==", - "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.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.0.0-alpha.0.tgz", - "integrity": "sha512-L/m+FiQue/JvDXKHpiWsYEXimzIDMjHYPGO8LLssccAbWw1Io26+RZ+ZjC03/KbDPx28HQgeFo7sr5rqBh5WWA==", - "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", - "interpret": "1.0.4", - "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.2", - "source-map": "0.5.7", - "supports-color": "4.4.0", - "tapable": "1.0.0-beta.3", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.4.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" - }, - "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==" - }, - "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" - } - }, - "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" - } - } - } - }, - "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==", - "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0-beta.5" - }, - "dependencies": { - "tapable": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.5.tgz", - "integrity": "sha512-TRKt8j59hRVoYaoSB5IFCbfNEcLzDaVdKrOIPlC1AJAIZTmZZTbHDXGsqiUb9IjeRAYGeQtc617oEzlsnpUi3w==" - } - } - }, - "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" - } - }, - "tapable": { - "version": "1.0.0-beta.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0-beta.3.tgz", - "integrity": "sha512-X1FQM64UScMElXJ4+x+F8vLfMKkVAfrQ6X6b7kMcSXLSW2q1wyn0i5unTsPZmIYX/379QlxqO+AF7TlUizSOYA==" - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" - } - } - } - }, - "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==", - "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==" - } - } - }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "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=" - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "worker-farm": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.2.tgz", - "integrity": "sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ==", - "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" - } - }, - "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" - } - }, - "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 32791952a18..5220c96c8e9 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,6 @@ "recast": "git://github.com/kalcifer/recast.git#bug/allowbreak", "resolve-cwd": "^2.0.0", "supports-color": "^4.4.0", - "webpack": "next", "webpack-addons": "^1.1.4", "yargs": "^9.0.1", "yeoman-environment": "^2.0.0", diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..de0873b101a --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5317 @@ +# 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" + +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.2, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" + 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-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: + 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-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" + +ast-types@0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.2.tgz#2cc19979d15c655108bf565323b8e7ee38751f6b" + +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: + 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.24.1, 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@^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" + +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" + +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" + +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-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" + +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@^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@^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" + +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, chalk@^2.3.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.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" + +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: + 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" + +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.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" + +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-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" + +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" + +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" + +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.0.0, debug@^2.1.0, debug@^2.2.0, 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: + 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-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" + +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" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-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" + +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" + +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" + +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" + +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.28" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz#8dd4e6458086644e9f9f0a1cf32e2a1f9dffd9ee" + +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" + +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" + +escape-string-regexp@^1.0.2, 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, esprima@~3.1.0: + 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" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0, 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" + +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" + +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" + +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" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.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" + +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.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" + +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@^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: + 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" + +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" + +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" + +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" + +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" + +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" + +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.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" + +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" + +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-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-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.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@^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-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-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" + +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" + +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" + +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" + +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" + +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" + +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@^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-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-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" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^4.0.1: + version "4.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-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@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +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" + +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" + +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" + +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: + 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.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" + +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.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +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" + +node-dir@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + +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: + 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.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" + +once@^1.3.0, 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" + +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" + +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@^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" + +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" + +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-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" + +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +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.3.2: + version "4.6.0" + resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.6.0.tgz#28454fadb813249ad5c6d1c293dc8d462842e1ff" + 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" + +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" + +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.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +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" + +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" + +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@^2.0.1, readable-stream@^2.0.2, 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.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@git://github.com/kalcifer/recast.git#bug/allowbreak": + version "0.11.18" + resolved "git://github.com/kalcifer/recast.git#b66a17eee9e072338744b947a406d3f134bc0b0d" + dependencies: + ast-types "0.9.2" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +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" + +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" + +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.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" + +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.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.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.2.tgz#86d92aedf4dfc51c9b321ef16bd33a9417b122d0" + dependencies: + ajv "^5.0.0" + ajv-keywords "^2.1.0" + chalk "^2.3.0" + +scoped-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + +"semver@2 || 3 || 4 || 5", semver@5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@5.3.0, semver@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +sha.js@^2.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" + +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.0, 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: + 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" + +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" + +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" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.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-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@^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" + +tapable@1.0.0-beta.3: + version "1.0.0-beta.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0-beta.3.tgz#1f56bb6fec924ac9570cd8f6ff788e5bcf4808f1" + +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: + 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" + +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-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" + +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-js@^2.6, uglify-js@^2.8.29: + 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@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.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@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + +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-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" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +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" + +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" + +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.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.4.tgz#35bd7755869fe534130bfc368ef01e5fa54464ad" + dependencies: + babel-code-frame "^6.22.0" + babel-preset-es2015 "^6.24.1" + babel-preset-stage-3 "^6.24.1" + jscodeshift "^0.4.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.0: + version "4.0.0-alpha.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.0.0-alpha.0.tgz#97949f332b9189182d22c6b302ee3dbe03faf96c" + 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" + interpret "^1.0.0" + 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" + supports-color "^4.2.1" + tapable "1.0.0-beta.3" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +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@^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, wordwrap@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +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: + 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" + +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@^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@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + 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@^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" From 688c426333bca9ed26e1ee62178627e80f701f05 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 14:36:28 +0100 Subject: [PATCH 029/109] downgrade prettier-eslint-cli and remove ajv deps --- package.json | 4 +- yarn.lock | 127 +++++---------------------------------------------- 2 files changed, 13 insertions(+), 118 deletions(-) diff --git a/package.json b/package.json index 5220c96c8e9..ab49d09b80e 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,6 @@ "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", @@ -84,7 +82,7 @@ "jest": "^21.2.1", "jest-cli": "^21.2.1", "lint-staged": "^4.1.3", - "prettier-eslint-cli": "^4.3.2" + "prettier-eslint-cli": "^4.6.1" }, "optionalDependencies": { "schema-utils": "^0.4.2", diff --git a/yarn.lock b/yarn.lock index de0873b101a..1b86460447c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,7 +51,7 @@ ajv@^4.9.1: 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.2, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: version "5.5.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" dependencies: @@ -232,11 +232,7 @@ 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: +aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" @@ -993,18 +989,6 @@ boom@2.x.x: 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" @@ -1439,12 +1423,6 @@ cryptiles@2.x.x: 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" @@ -1867,7 +1845,7 @@ expect@^21.2.1: jest-message-util "^21.2.1" jest-regex-util "^21.2.0" -extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: +extend@^3.0.0, extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -2021,14 +1999,6 @@ form-data@~2.1.1: 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" - 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" @@ -2270,10 +2240,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" @@ -2281,13 +2247,6 @@ har-validator@~4.2.1: 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" @@ -2349,15 +2308,6 @@ hawk@3.1.3, hawk@~3.1.3: 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" @@ -2370,10 +2320,6 @@ 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" @@ -2405,14 +2351,6 @@ http-signature@~1.1.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" @@ -3426,7 +3364,7 @@ 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.17, mime-types@~2.1.7: +mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -3638,7 +3576,7 @@ number-is-nan@^1.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: +oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -3872,10 +3810,6 @@ 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" @@ -3910,9 +3844,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier-eslint-cli@^4.3.2: - version "4.6.0" - resolved "https://registry.yarnpkg.com/prettier-eslint-cli/-/prettier-eslint-cli-4.6.0.tgz#28454fadb813249ad5c6d1c293dc8d462842e1ff" +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" @@ -4010,10 +3944,6 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -4208,7 +4138,7 @@ 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: +request@2.81.0, request@^2.79.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -4235,33 +4165,6 @@ request@2.81.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" @@ -4494,12 +4397,6 @@ sntp@1.x.x: 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" - 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" @@ -4628,7 +4525,7 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4, stringstream@~0.0.5: +stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -4819,7 +4716,7 @@ 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: +tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: @@ -4938,7 +4835,7 @@ util@0.10.3, util@^0.10.3: dependencies: inherits "2.0.1" -uuid@^3.0.0, uuid@^3.1.0: +uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" From db79b3032d614f65f9c7fe5106e757c1fdfcee3f Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 16:37:03 +0100 Subject: [PATCH 030/109] [WIP] transformations --- bin/convert-argv.js | 6 +- lib/generators/add-generator.js | 114 ++++++++++++++++-- lib/generators/remove-generator.js | 45 +------ lib/generators/update-generator.js | 45 +------ lib/init/transformations/context/context.js | 42 +++++-- .../transformations/devServer/devServer.js | 63 ++++++---- lib/init/transformations/devtool/devtool.js | 42 +++++-- lib/init/transformations/entry/entry.js | 13 +- .../transformations/externals/externals.js | 51 +++++--- lib/init/transformations/index.js | 5 +- lib/init/transformations/node/node.js | 24 +++- lib/init/transformations/output/output.js | 24 +++- .../performance/performance.js | 35 ++++-- lib/init/transformations/resolve/resolve.js | 26 +++- lib/init/transformations/stats/stats.js | 56 +++++---- lib/init/transformations/target/target.js | 40 ++++-- lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js | 28 ++--- lib/utils/prop-types.js | 2 +- webpack.config.js | 5 +- 19 files changed, 407 insertions(+), 259 deletions(-) diff --git a/bin/convert-argv.js b/bin/convert-argv.js index 70866ebd965..037e3f20eac 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -609,9 +609,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); diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 77d9f750325..e3b7a7b4ead 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -1,9 +1,11 @@ const Generator = require("yeoman-generator"); const glob = require("glob-all"); -const PROP_TYPES = require("../utils/prop-types"); const List = require("webpack-addons").List; const Input = require("webpack-addons").Input; +const schema = require("webpack/schemas/WebpackOptions"); +const PROP_TYPES = require("../utils/prop-types"); + const getPackageManager = require("../utils/package-manager").getPackageManager; const npmExists = require("../utils/npm-exists"); @@ -27,6 +29,10 @@ module.exports = class AddGenerator extends Generator { prompting() { let done = this.async(); let action; + let manualOrListInput; + // first index indicates if it has a deep prop, 2nd indicates what kind of + let isDeepProp = [false, false]; + this.prompt([ List( "actionType", @@ -41,11 +47,51 @@ module.exports = class AddGenerator extends Generator { action = actionTypeAnswer.actionType; }) .then(() => { - this.prompt([ - Input("actionAnswer", `what do you want to add to ${action}?`) - ]).then(answerToAction => { + const schemaProp = Object.keys(schema.properties) + .filter(p => { + return p === action; + }) + .map(p => schema.definitions[p])[0]; + if (schemaProp) { + if (schemaProp.properties) { + const propsForAction = Object.keys(schemaProp.properties).map( + e => e + ); + manualOrListInput = List( + "actionAnswer", + `what do you want to add to ${action}?`, + propsForAction + ); + isDeepProp[0] = true; + } else { + // needs a twerky mc twerk + let schemaTypeOfRequirement; + if (schemaProp.oneOf) { + schemaTypeOfRequirement = schemaProp.oneOf; + } else { + schemaTypeOfRequirement = schemaProp.anyOf; + } + const propsForAction = Object.keys(schemaTypeOfRequirement).map( + e => schemaTypeOfRequirement[e] + ); + //console.log(propsForAction); + //process.exit(0); + manualOrListInput = List( + "actionAnswer", + `what do you want to add to ${action}?`, + propsForAction + ); + isDeepProp[0] = true; + } + } else { + manualOrListInput = Input( + "actionAnswer", + `what do you want to add to ${action}?` + ); + } + this.prompt([manualOrListInput]).then(answerToAction => { if (action === ("plugins" || "loader")) { - // + const pluginExist = glob .sync([ "node_modules/webpack/lib/*Plugin.js", @@ -80,7 +126,9 @@ module.exports = class AddGenerator extends Generator { normalizePluginName.charAt(0).toUpperCase() ); this.configuration.config.topScope.push( - `const ${pluginName} = require("${answerToAction.actionAnswer}")` + `const ${pluginName} = require("${ + answerToAction.actionAnswer + }")` ); this.configuration.config.webpackOptions[ action @@ -101,11 +149,59 @@ module.exports = class AddGenerator extends Generator { }); } } else { - this.configuration.config.item = action; - this.configuration.config.webpackOptions[action] = "hello"; - done(); + if (isDeepProp[0]) { + isDeepProp[1] = answerToAction.actionAnswer; + this.prompt([ + Input( + "deepProp", + `what do you want the value of ${isDeepProp[1]} to be?` + ) + ]).then(deepPropAns => { + this.configuration.config.item = action + "." + isDeepProp[1]; + this.configuration.config.webpackOptions[action] = { + [isDeepProp[1]]: `'${deepPropAns.deepProp}'` + }; + done(); + }); + } else { + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = + answerToAction.actionAnswer; + done(); + } } }); }); } }; + +/* +this.configuration.config.item = action; +this.configuration.config.webpackOptions[action] = "hello"; +const schemaProp = Object.keys(schema.properties).filter(p => { + return p === action; +}).map(p => schema.definitions[p])[0]; +if(schemaProp) { + console.log(schemaProp.properties) + process.exit(0) + this.prompt([ + List( + "actionType", + `What do you want to add to ${action}?`, + ['hi', 'ho'] + ) + ]).then( propAnswer => { + }) +} else { + // log out: since we didn't find any matching schema at webpack, we now ask for key/prop + this.prompt([ + InputValidate( + "actionType", + `What (key) do you want to add to ${action}?`, + inputValidator + ) + ]).then( propAnswer => { + // TODO: ask for prop now as we got key + }) +} +*/ diff --git a/lib/generators/remove-generator.js b/lib/generators/remove-generator.js index 116134f0263..f249af53cfb 100644 --- a/lib/generators/remove-generator.js +++ b/lib/generators/remove-generator.js @@ -1,46 +1,3 @@ const Generator = require("yeoman-generator"); -const PROP_TYPES = require("../utils/prop-types"); -const RawList = require("webpack-addons").RawList; -module.exports = class RemoveGenerator extends Generator { - constructor(args, opts) { - super(args, opts); - this.dependencies = []; - this.configuration = { - config: { - webpackOptions: {}, - topScope: [] - } - }; - } - - prompting() { - let done = this.async(); - let action; - this.prompt([ - RawList( - "actionType", - "What property do you want to remove?", - Array.from(PROP_TYPES.keys()) - ) - ]) - .then(actionTypeAnswer => { - done(); - this.configuration.config.webpackOptions[ - actionTypeAnswer.actionType - ] = null; - action = actionTypeAnswer.actionType; - }) - .then(() => { - this.prompt([ - RawList( - "actionAnswer", - `what do you want to remove on ${action}?` - /*types*/ - ) - ]).then(answerToAction => { - console.log(answerToAction); - }); - }); - } -}; +module.exports = class RemoveGenerator extends Generator {}; diff --git a/lib/generators/update-generator.js b/lib/generators/update-generator.js index 074f5011a80..fc0515c3b8f 100644 --- a/lib/generators/update-generator.js +++ b/lib/generators/update-generator.js @@ -1,46 +1,3 @@ const Generator = require("yeoman-generator"); -const PROP_TYPES = require("../utils/prop-types"); -const RawList = require("webpack-addons").RawList; -module.exports = class UpdateGenerator extends Generator { - constructor(args, opts) { - super(args, opts); - this.dependencies = []; - this.configuration = { - config: { - webpackOptions: {}, - topScope: [] - } - }; - } - - prompting() { - let done = this.async(); - let action; - this.prompt([ - RawList( - "actionType", - "What property do you want to update?", - Array.from(PROP_TYPES.keys()) - ) - ]) - .then(actionTypeAnswer => { - done(); - this.configuration.config.webpackOptions[ - actionTypeAnswer.actionType - ] = null; - action = actionTypeAnswer.actionType; - }) - .then(() => { - this.prompt([ - RawList( - "actionAnswer", - `what do you want to update to ${action}?` - /*types*/ - ) - ]).then(answerToAction => { - console.log(answerToAction); - }); - }); - } -}; +module.exports = class UpdateGenerator extends Generator {}; diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index dcb4c7e9069..50ec432a0fe 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -13,19 +13,35 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "context", - webpackProperties - ) - ); +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") { + if (utils.findRootNodesByName(j, ast, "context").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "context") + ); + } 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/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js index 975580c5e78..3edc86d8726 100644 --- a/lib/init/transformations/devServer/devServer.js +++ b/lib/init/transformations/devServer/devServer.js @@ -13,35 +13,48 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +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 && - action === "init" && - typeof webpackProperties === "object" - ) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createDevServerProperty)); - } else if ( - webpackProperties && - action === "init" && - webpackProperties.length - ) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "devServer", - webpackProperties - ) - ); + 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") { + if (utils.findRootNodesByName(j, ast, "devServer").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "devServer") + ); + } 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/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js index 9c9b01b0683..6b9aeb0daab 100644 --- a/lib/init/transformations/devtool/devtool.js +++ b/lib/init/transformations/devtool/devtool.js @@ -13,19 +13,35 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "devtool", - webpackProperties - ) - ); +module.exports = function devToolTransform(j, ast, webpackProperties, action) { + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "devtool", + webpackProperties + ) + ); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "devtool").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "devtool") + ); + } 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/entry/entry.js b/lib/init/transformations/entry/entry.js index fb3e3b69229..e45197fc342 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -38,20 +38,11 @@ module.exports = function entryTransform(j, ast, webpackProperties, action) { .filter(p => utils.isAssignment(null, p, createEntryProperty)); } else if (action === "add") { if (utils.findRootNodesByName(j, ast, "entry").size() !== 0) { - // TODO inject props return ast .find(j.ObjectExpression) - .filter(p => utils.pushObjectKeys(j, p, { hey: "Ho" }, "entry")); + .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "entry")); } else { - // TODO: inject props - return entryTransform( - j, - ast, - { - app: "index.js" - }, - "init" - ); + return entryTransform(j, ast, webpackProperties, "init"); } } else if (action === "remove") { // TODO diff --git a/lib/init/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js index b6a62fe66a7..7a92fbb381f 100644 --- a/lib/init/transformations/externals/externals.js +++ b/lib/init/transformations/externals/externals.js @@ -13,7 +13,12 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +module.exports = function externalsTransform( + j, + ast, + webpackProperties, + action +) { function createExternalProperty(p) { if ( webpackProperties instanceof RegExp || @@ -34,20 +39,36 @@ module.exports = function(j, ast, webpackProperties, action) { return utils.pushObjectKeys(j, p, webpackProperties, "externals"); } } - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter( - p => - utils.safeTraverse(p, [ - "parent", - "value", - "left", - "property", - "name" - ]) === "exports" - ) - .forEach(createExternalProperty); + 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") { + if (utils.findRootNodesByName(j, ast, "externals").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "externals") + ); + } 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/index.js b/lib/init/transformations/index.js index 1f157754a4d..457489b7c83 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -122,8 +122,9 @@ module.exports = function runTransform(webpackProperties, action) { process.stdout.write( "\n" + chalk.green( - `Congratulations! ${webpackProperties.config - .item} has been ${action}ed!\n` + `Congratulations! ${ + webpackProperties.config.item + } has been ${action}ed!\n` ) ); } else { diff --git a/lib/init/transformations/node/node.js b/lib/init/transformations/node/node.js index 5d42397342e..512e72a2ca1 100644 --- a/lib/init/transformations/node/node.js +++ b/lib/init/transformations/node/node.js @@ -13,15 +13,29 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +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 && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createNodeProperty)); + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createNodeProperty)); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "node").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/output/output.js b/lib/init/transformations/output/output.js index 913ed144228..268984e6ebd 100644 --- a/lib/init/transformations/output/output.js +++ b/lib/init/transformations/output/output.js @@ -12,15 +12,29 @@ const utils = require("../../../utils/ast-utils"); * @param { Object } webpackProperties - Object containing transformation rules * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +module.exports = function outputTransform(j, ast, webpackProperties, action) { function createOutputProperties(p) { utils.pushCreateProperty(j, p, "output", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "output"); } - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createOutputProperties)); + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createOutputProperties)); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "output").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "output")); + } 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/performance/performance.js b/lib/init/transformations/performance/performance.js index 9e2864928e7..051b917a3f8 100644 --- a/lib/init/transformations/performance/performance.js +++ b/lib/init/transformations/performance/performance.js @@ -13,19 +13,36 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +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 && - action === "init" && - typeof webpackProperties === "object" - ) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createPerformanceProperty)); + if (webpackProperties && typeof webpackProperties === "object") { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createPerformanceProperty)); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "performance").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "performance") + ); + } 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/resolve/resolve.js b/lib/init/transformations/resolve/resolve.js index 461b8530848..7f570268f6c 100644 --- a/lib/init/transformations/resolve/resolve.js +++ b/lib/init/transformations/resolve/resolve.js @@ -13,15 +13,31 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +module.exports = function resolveTransform(j, ast, webpackProperties, action) { function createResolveProperties(p) { utils.pushCreateProperty(j, p, "resolve", j.objectExpression([])); return utils.pushObjectKeys(j, p, webpackProperties, "resolve"); } - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createResolveProperties)); + if (webpackProperties) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => utils.isAssignment(null, p, createResolveProperties)); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "resolve").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.pushObjectKeys(j, p, webpackProperties, "resolve") + ); + } 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/stats/stats.js b/lib/init/transformations/stats/stats.js index cd2a55d78ca..d70dd53ed6b 100644 --- a/lib/init/transformations/stats/stats.js +++ b/lib/init/transformations/stats/stats.js @@ -13,35 +13,41 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { +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 && - action === "init" && - typeof webpackProperties === "object" - ) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createStatsProperty)); - } else if ( - webpackProperties && - action === "init" && - webpackProperties.length - ) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "stats", - webpackProperties - ) - ); + 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") { + if (utils.findRootNodesByName(j, ast, "stats").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "stats")); + } 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/target/target.js b/lib/init/transformations/target/target.js index 631b727f801..0533086dd30 100644 --- a/lib/init/transformations/target/target.js +++ b/lib/init/transformations/target/target.js @@ -13,19 +13,33 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init" && webpackProperties.length) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "target", - webpackProperties - ) - ); +module.exports = function targetTransform(j, ast, webpackProperties, action) { + if (webpackProperties && webpackProperties.length) { + if (action === "init") { + return ast + .find(j.ObjectExpression) + .filter(p => + utils.isAssignment( + j, + p, + utils.pushCreateProperty, + "target", + webpackProperties + ) + ); + } else if (action === "add") { + if (utils.findRootNodesByName(j, ast, "target").size() !== 0) { + return ast + .find(j.ObjectExpression) + .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "target")); + } else { + return targetTransform(j, ast, webpackProperties, "init"); + } + } else if (action === "remove") { + // TODO + } else if (action === "update") { + // TODO + } } else { return ast; } diff --git a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js index a0654b0e556..f0c8e0d46f9 100644 --- a/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js +++ b/lib/migrate/uglifyJsPlugin/uglifyJsPlugin.js @@ -9,20 +9,20 @@ module.exports = function(j: Ijscodeshit, ast: IPath<*>) { return j.property("init", j.identifier("sourceMap"), j.identifier("true")); } - return findPluginsByName(j, ast, [ - "webpack.optimize.UglifyJsPlugin" - ]).forEach(path => { - const args = path.value.arguments; + 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()])); + 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/prop-types.js b/lib/utils/prop-types.js index f7c43cbfccc..ed21083f4c1 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -3,7 +3,7 @@ module.exports = new Map([ ["devServer"], ["devtool"], ["entry"], - ["external"], + ["externals"], ["module"], ["node"], ["output"], diff --git a/webpack.config.js b/webpack.config.js index 0afdc9ede12..f8bc109bd56 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,2 @@ -module.exports = { - plugins: [], -}; + +module.exports = {}; From a8a291c9242d6785a63ee3ad2d4a26c382b2a91d Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Wed, 13 Dec 2017 17:19:45 +0100 Subject: [PATCH 031/109] yarn commands on CI --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index bfc21517a7e..3f3d99f6057 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,6 @@ before_script: - bash <(curl -s https://codecov.io/bash) script: - - npm run prepublish - - npm run lint - - npm run test + - yarn prepare + - yarn lint + - yarn test From 8f2091596282403dc8758a380df9403ab81ceb37 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Thu, 14 Dec 2017 20:48:55 +0100 Subject: [PATCH 032/109] re-add travis versions --- .travis.yml | 2 ++ lib/generators/add-generator.js | 16 ++++------------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3f3d99f6057..8294398d524 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: node_js node_js: + - "4" + - "5" - "6" - "stable" diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index e3b7a7b4ead..4dddfba5f89 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -47,20 +47,13 @@ module.exports = class AddGenerator extends Generator { action = actionTypeAnswer.actionType; }) .then(() => { - const schemaProp = Object.keys(schema.properties) - .filter(p => { - return p === action; - }) - .map(p => schema.definitions[p])[0]; + const schemaProp = schema.definitions[action]; if (schemaProp) { if (schemaProp.properties) { - const propsForAction = Object.keys(schemaProp.properties).map( - e => e - ); manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, - propsForAction + Object.keys(schemaProp.properties) ); isDeepProp[0] = true; } else { @@ -74,8 +67,8 @@ module.exports = class AddGenerator extends Generator { const propsForAction = Object.keys(schemaTypeOfRequirement).map( e => schemaTypeOfRequirement[e] ); - //console.log(propsForAction); - //process.exit(0); + // console.log(propsForAction); + // process.exit(0); manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, @@ -91,7 +84,6 @@ module.exports = class AddGenerator extends Generator { } this.prompt([manualOrListInput]).then(answerToAction => { if (action === ("plugins" || "loader")) { - const pluginExist = glob .sync([ "node_modules/webpack/lib/*Plugin.js", From 426e8415815fe92ef0ed08affb4e0311d6e27bf1 Mon Sep 17 00:00:00 2001 From: kingdaro Date: Fri, 15 Dec 2017 04:39:03 -0500 Subject: [PATCH 033/109] cleanup: Refactor for readability, run formatter --- lib/generators/init-generator.js | 625 +++++++++++++++---------------- 1 file changed, 311 insertions(+), 314 deletions(-) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index 18a901e48e3..4cbe67e3187 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -36,6 +36,7 @@ module.exports = class WebpackGenerator extends Generator { let regExpForStyles; let ExtractUseProps; let outputPath = "dist"; + process.stdout.write( `\n${chalk.bold("Insecure about some of the questions?")}\n` ); @@ -44,6 +45,7 @@ module.exports = class WebpackGenerator extends Generator { "https://github.com/webpack/webpack-cli/blob/master/INIT.md" )}\n\n` ); + this.configuration.config.webpackOptions.module = { rules: [] }; @@ -55,324 +57,319 @@ module.exports = class WebpackGenerator extends Generator { "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(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(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(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 } - }) - .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-env" - ); - } - }) - .then(() => { - 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 - 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(); - }); - }); - }); - }); - }); - }); - }); + }, { + 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(); From b639c7701a7bcca3887ed384c28214dad6720ea4 Mon Sep 17 00:00:00 2001 From: kingdaro Date: Fri, 15 Dec 2017 10:48:40 -0500 Subject: [PATCH 034/109] Refactor for readability (v2 branch) (#214) * cleanup: refactor commit minus init-generator * cleanup: oops, forgot some spots --- lib/generators/add-generator.js | 156 ++++++++++++++++---------------- 1 file changed, 79 insertions(+), 77 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 4dddfba5f89..48b58922587 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -44,6 +44,7 @@ module.exports = class AddGenerator extends Generator { this.configuration.config.webpackOptions[ actionTypeAnswer.actionType ] = null; + action = actionTypeAnswer.actionType; }) .then(() => { @@ -82,87 +83,88 @@ module.exports = class AddGenerator extends Generator { `what do you want to add to ${action}?` ); } - this.prompt([manualOrListInput]).then(answerToAction => { - if (action === ("plugins" || "loader")) { - 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; - this.configuration.config.webpackOptions[ - action - ] = `new webpack.${pluginExist}`; - done(); - } else { - 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); - } - }); - } + return this.prompt([manualOrListInput]); + }) + .then(answerToAction => { + if (action === "plugins" || action === "loader") { + 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; + this.configuration.config.webpackOptions[ + action + ] = `new webpack.${pluginExist}`; + done(); } else { - if (isDeepProp[0]) { - isDeepProp[1] = answerToAction.actionAnswer; - this.prompt([ - Input( - "deepProp", - `what do you want the value of ${isDeepProp[1]} to be?` - ) - ]).then(deepPropAns => { - this.configuration.config.item = action + "." + isDeepProp[1]; - this.configuration.config.webpackOptions[action] = { - [isDeepProp[1]]: `'${deepPropAns.deepProp}'` - }; + 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(); - }); - } else { - this.configuration.config.item = action; - this.configuration.config.webpackOptions[action] = - answerToAction.actionAnswer; + + 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 (isDeepProp[0]) { + isDeepProp[1] = answerToAction.actionAnswer; + this.prompt([ + Input( + "deepProp", + `what do you want the value of ${isDeepProp[1]} to be?` + ) + ]).then(deepPropAns => { + this.configuration.config.item = action + "." + isDeepProp[1]; + this.configuration.config.webpackOptions[action] = { + [isDeepProp[1]]: `'${deepPropAns.deepProp}'` + }; done(); - } + }); + } else { + this.configuration.config.item = action; + this.configuration.config.webpackOptions[action] = + answerToAction.actionAnswer; + done(); } - }); + } }); } }; From 804554dd27e6a521bd947e45f1b61e2641d511c6 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Fri, 15 Dec 2017 17:36:25 +0100 Subject: [PATCH 035/109] remove dist --- dist/generate-loader/index.js | 17 -- dist/generate-plugin/index.js | 17 -- dist/types.js | 192 --------------- dist/utils/WebpackOptionsValidationError.js | 248 -------------------- dist/utils/copy-utils.js | 57 ----- dist/utils/npm-exists.js | 24 -- dist/utils/npm-exists.spec.js | 16 -- dist/utils/npm-packages-exists.js | 47 ---- dist/utils/package-manager.js | 61 ----- dist/utils/package-manager.spec.js | 90 ------- dist/utils/resolve-packages.js | 70 ------ dist/utils/resolve-packages.spec.js | 68 ------ dist/utils/validateSchema.js | 67 ------ 13 files changed, 974 deletions(-) delete mode 100644 dist/generate-loader/index.js delete mode 100644 dist/generate-plugin/index.js delete mode 100644 dist/types.js delete mode 100644 dist/utils/WebpackOptionsValidationError.js delete mode 100644 dist/utils/copy-utils.js delete mode 100644 dist/utils/npm-exists.js delete mode 100644 dist/utils/npm-exists.spec.js delete mode 100644 dist/utils/npm-packages-exists.js delete mode 100644 dist/utils/package-manager.js delete mode 100644 dist/utils/package-manager.spec.js delete mode 100644 dist/utils/resolve-packages.js delete mode 100644 dist/utils/resolve-packages.spec.js delete mode 100644 dist/utils/validateSchema.js diff --git a/dist/generate-loader/index.js b/dist/generate-loader/index.js deleted file mode 100644 index 58e582ccfff..00000000000 --- a/dist/generate-loader/index.js +++ /dev/null @@ -1,17 +0,0 @@ -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; diff --git a/dist/generate-plugin/index.js b/dist/generate-plugin/index.js deleted file mode 100644 index 35f9483138e..00000000000 --- a/dist/generate-plugin/index.js +++ /dev/null @@ -1,17 +0,0 @@ -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; diff --git a/dist/types.js b/dist/types.js deleted file mode 100644 index 9d9d3eb9681..00000000000 --- a/dist/types.js +++ /dev/null @@ -1,192 +0,0 @@ -// -/* eslint-disable node/no-unsupported-features */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/** - * [IAstNodeCommentLine description] - * @type {Object} - */ - - - - - - - - - -/** - * [ILoc description] - * @type {Object} - */ - - - - - - - - - - - -/** - * [ITokenType description] - * @type {Object} - */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dist/utils/WebpackOptionsValidationError.js b/dist/utils/WebpackOptionsValidationError.js deleted file mode 100644 index 65783b02928..00000000000 --- a/dist/utils/WebpackOptionsValidationError.js +++ /dev/null @@ -1,248 +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/dist/utils/copy-utils.js b/dist/utils/copy-utils.js deleted file mode 100644 index d161d38943d..00000000000 --- a/dist/utils/copy-utils.js +++ /dev/null @@ -1,57 +0,0 @@ -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 -}; diff --git a/dist/utils/npm-exists.js b/dist/utils/npm-exists.js deleted file mode 100644 index 96bc56bf665..00000000000 --- a/dist/utils/npm-exists.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -const got = require("got"); -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 -*/ - -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)); -}; diff --git a/dist/utils/npm-exists.spec.js b/dist/utils/npm-exists.spec.js deleted file mode 100644 index 1ee26346139..00000000000 --- a/dist/utils/npm-exists.spec.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -const exists = require("./npm-exists"); - -describe("npm-exists", () => { - it("should sucessfully existence of a published module", () => { - exists("webpack-addons-ylvis").then(status => { - expect(status).toBe(true); - }); - }); - - it("should return false for the existence of a fake module", () => { - exists("webpack-addons-noop").then(status => { - expect(status).toBe(false); - }); - }); -}); diff --git a/dist/utils/npm-packages-exists.js b/dist/utils/npm-packages-exists.js deleted file mode 100644 index 0307ec63784..00000000000 --- a/dist/utils/npm-packages-exists.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; -const chalk = require("chalk"); -const npmExists = require("./npm-exists"); -const resolvePackages = require("./resolve-packages"); - -/* -* @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 -*/ - -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); - }); - }); -}; diff --git a/dist/utils/package-manager.js b/dist/utils/package-manager.js deleted file mode 100644 index 57e335dfb8b..00000000000 --- a/dist/utils/package-manager.js +++ /dev/null @@ -1,61 +0,0 @@ -"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 -}; - -function spawnNPM(pkg, isNew) { - return spawn.sync("npm", [isNew ? "install" : "update", "-g", pkg], { - stdio: "inherit" - }); -} - -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 -*/ - -function spawnChild(pkg) { - const pkgPath = path.resolve(globalPath, pkg); - const packageManager = getPackageManager(); - const isNew = !fs.existsSync(pkgPath); - - 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 -*/ - -function getPackageManager() { - if (spawn.sync("yarn", [" --version"], { stdio: "ignore" }).error) { - return "npm"; - } - - return "yarn"; -} - -module.exports = { - getPackageManager, - spawnChild -}; diff --git a/dist/utils/package-manager.spec.js b/dist/utils/package-manager.spec.js deleted file mode 100644 index e45b920fb4a..00000000000 --- a/dist/utils/package-manager.spec.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; - -jest.mock("cross-spawn"); -jest.mock("fs"); - -describe("package-manager", () => { - const packageManager = require("./package-manager"); - const spawn = require("cross-spawn"); - const fs = require("fs"); - - const defaultSyncResult = { - pid: 1234, - output: [null, null, null], - stdout: null, - stderr: null, - signal: null, - status: 1, - error: null - }; - - function mockSpawnErrorOnce() { - spawn.sync.mockReturnValueOnce( - Object.assign({}, defaultSyncResult, { - status: null, - error: new Error() - }) - ); - } - - spawn.sync.mockReturnValue(defaultSyncResult); - - it("should return 'yarn' from getPackageManager if it's installed", () => { - expect(packageManager.getPackageManager()).toEqual("yarn"); - }); - - it("should return 'npm' from getPackageManager if yarn is not installed", () => { - mockSpawnErrorOnce(); - expect(packageManager.getPackageManager()).toEqual("npm"); - }); - - it("should spawn yarn add from spawnChild", () => { - const packageName = "some-pkg"; - - packageManager.spawnChild(packageName); - expect(spawn.sync).toHaveBeenLastCalledWith( - "yarn", - ["global", "add", packageName], - { stdio: "inherit" } - ); - }); - - it("should spawn yarn upgrade from spawnChild", () => { - const packageName = "some-pkg"; - - fs.existsSync.mockReturnValueOnce(true); - - packageManager.spawnChild(packageName); - expect(spawn.sync).toHaveBeenLastCalledWith( - "yarn", - ["global", "upgrade", packageName], - { stdio: "inherit" } - ); - }); - - it("should spawn npm install from spawnChild", () => { - const packageName = "some-pkg"; - - mockSpawnErrorOnce(); - packageManager.spawnChild(packageName); - expect(spawn.sync).toHaveBeenLastCalledWith( - "npm", - ["install", "-g", packageName], - { stdio: "inherit" } - ); - }); - - it("should spawn npm update from spawnChild", () => { - const packageName = "some-pkg"; - - mockSpawnErrorOnce(); - fs.existsSync.mockReturnValueOnce(true); - - packageManager.spawnChild(packageName); - expect(spawn.sync).toHaveBeenLastCalledWith( - "npm", - ["update", "-g", packageName], - { stdio: "inherit" } - ); - }); -}); diff --git a/dist/utils/resolve-packages.js b/dist/utils/resolve-packages.js deleted file mode 100644 index 35bd2f564c1..00000000000 --- a/dist/utils/resolve-packages.js +++ /dev/null @@ -1,70 +0,0 @@ -"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; - -/* -* @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 -*/ - -function processPromise(child) { - return new Promise(function(resolve, reject) { - //eslint-disable-line - if (child.status !== 0) { - reject(); - } else { - resolve(); - } - }); -} - -/* -* @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 -*/ - -module.exports = 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); - }); - }); -}; diff --git a/dist/utils/resolve-packages.spec.js b/dist/utils/resolve-packages.spec.js deleted file mode 100644 index f54515b6524..00000000000 --- a/dist/utils/resolve-packages.spec.js +++ /dev/null @@ -1,68 +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; -} - -describe("resolve-packages", () => { - let moduleLoc; - - afterEach(() => { - moduleLoc = null; - }); - - it("should resolve a location of a published module", () => { - moduleLoc = getLoc(["webpack-addons-ylvis"]); - expect(moduleLoc).toEqual(["../../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/ "]); - }); - - it("should resolve multiple locations of published modules", () => { - /* we're testing multiple paths here. At Github this up for discussion, because if - * we validate each package on each run, we can catch and build the questions in init gradually - * while we get one filepath at the time. If not, this is a workaround. - */ - moduleLoc = getLoc(["webpack-addons-ylvis", "webpack-addons-noop"]); - expect(moduleLoc).toEqual([ - "../../node_modules/webpack-addons-ylvis", - "../../node_modules/webpack-addons-noop" - ]); - }); -}); diff --git a/dist/utils/validateSchema.js b/dist/utils/validateSchema.js deleted file mode 100644 index 3a20782e68f..00000000000 --- a/dist/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; From 0807aa323bc23f70f53c235d86a800d7a959e45d Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Fri, 15 Dec 2017 17:52:01 +0100 Subject: [PATCH 036/109] remove comment in add generator --- lib/generators/add-generator.js | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 48b58922587..a5e8fde532b 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -168,34 +168,3 @@ module.exports = class AddGenerator extends Generator { }); } }; - -/* -this.configuration.config.item = action; -this.configuration.config.webpackOptions[action] = "hello"; -const schemaProp = Object.keys(schema.properties).filter(p => { - return p === action; -}).map(p => schema.definitions[p])[0]; -if(schemaProp) { - console.log(schemaProp.properties) - process.exit(0) - this.prompt([ - List( - "actionType", - `What do you want to add to ${action}?`, - ['hi', 'ho'] - ) - ]).then( propAnswer => { - }) -} else { - // log out: since we didn't find any matching schema at webpack, we now ask for key/prop - this.prompt([ - InputValidate( - "actionType", - `What (key) do you want to add to ${action}?`, - inputValidator - ) - ]).then( propAnswer => { - // TODO: ask for prop now as we got key - }) -} -*/ From ce31e81bc10bbe8e04f581fcefa6a030bebf4a32 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Fri, 15 Dec 2017 19:36:30 +0100 Subject: [PATCH 037/109] use devServerSchema --- lib/generators/add-generator.js | 55 ++- lib/utils/prop-types.js | 29 +- package.json | 3 +- webpack.config.js | 10 +- yarn.lock | 850 +++++++++++++++++++++++++++++++- 5 files changed, 893 insertions(+), 54 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index a5e8fde532b..404c5926848 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -3,7 +3,8 @@ const glob = require("glob-all"); const List = require("webpack-addons").List; const Input = require("webpack-addons").Input; -const schema = require("webpack/schemas/WebpackOptions"); +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; @@ -29,7 +30,8 @@ module.exports = class AddGenerator extends Generator { prompting() { let done = this.async(); let action; - let manualOrListInput; + 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]; @@ -48,40 +50,45 @@ module.exports = class AddGenerator extends Generator { action = actionTypeAnswer.actionType; }) .then(() => { - const schemaProp = schema.definitions[action]; - if (schemaProp) { - if (schemaProp.properties) { + 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 + */ + const defOrPropDescription = webpackSchemaProp + ? webpackSchemaProp.properties + : webpackSchema.properties[action].properties + ? webpackSchema.properties[action].properties + : webpackSchema.properties[action].anyOf + ? webpackSchema.properties[action].anyOf.filter( + p => p.properties + )[0].properties + : null; + const webpackDevserverSchemaProp = + action === "devServer" ? webpackDevServerSchema : null; + // 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) { manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, - Object.keys(schemaProp.properties) + Object.keys(defOrPropDescription) ); isDeepProp[0] = true; - } else { - // needs a twerky mc twerk - let schemaTypeOfRequirement; - if (schemaProp.oneOf) { - schemaTypeOfRequirement = schemaProp.oneOf; - } else { - schemaTypeOfRequirement = schemaProp.anyOf; - } - const propsForAction = Object.keys(schemaTypeOfRequirement).map( - e => schemaTypeOfRequirement[e] - ); - // console.log(propsForAction); - // process.exit(0); + } else if (webpackDevserverSchemaProp) { manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, - propsForAction + Object.keys(webpackDevserverSchemaProp.properties) ); isDeepProp[0] = true; + } else { + // manual input if non-existent + manualOrListInput = manualOrListInput(action); } } else { - manualOrListInput = Input( - "actionAnswer", - `what do you want to add to ${action}?` - ); + manualOrListInput = manualOrListInput(action); } return this.prompt([manualOrListInput]); }) diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index ed21083f4c1..e8758953c5e 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,15 +1,16 @@ -module.exports = new Map([ - ["context"], - ["devServer"], - ["devtool"], - ["entry"], - ["externals"], - ["module"], - ["node"], - ["output"], - ["performance"], - ["plugins"], - ["resolve"], - ["target"], - ["watch"] +module.exports = new Set([ + "context", + "devServer", + "devtool", + "entry", + "externals", + "module", + "node", + "output", + "performance", + "plugins", + "resolve", + "target", + "watch", + "watchOptions" ]); diff --git a/package.json b/package.json index ab49d09b80e..b378c24bd0f 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ }, "optionalDependencies": { "schema-utils": "^0.4.2", - "webpack": "^4.0.0-alpha.0" + "webpack": "^4.0.0-alpha.0", + "webpack-dev-server": "^2.9.7" } } diff --git a/webpack.config.js b/webpack.config.js index f8bc109bd56..e85a2445345 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,2 +1,8 @@ - -module.exports = {}; +const webpack = require('webpack'); +const webpack = require('webpack'); +module.exports = { + externals: { + undefined: '', + undefined: 'a' + } +}; diff --git a/yarn.lock b/yarn.lock index 1b86460447c..d22c00981ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,13 @@ 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" @@ -80,6 +87,10 @@ 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" @@ -154,6 +165,25 @@ 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" @@ -214,7 +244,7 @@ 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.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" @@ -951,6 +981,10 @@ 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" @@ -979,6 +1013,32 @@ 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" @@ -1079,6 +1139,10 @@ bser@^2.0.0: 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" @@ -1099,6 +1163,10 @@ 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" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -1113,6 +1181,13 @@ 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" @@ -1125,6 +1200,14 @@ 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" @@ -1174,7 +1257,7 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -chokidar@^1.6.1, chokidar@^1.7.0: +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: @@ -1327,6 +1410,24 @@ 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" @@ -1339,6 +1440,10 @@ concat-stream@^1.4.7, concat-stream@^1.6.0: 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" @@ -1353,14 +1458,30 @@ 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" + 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" @@ -1449,6 +1570,12 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 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" + dargs@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" @@ -1471,7 +1598,7 @@ dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" -debug@^2.0.0, debug@^2.1.0, debug@^2.2.0, debug@^2.6.8: +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: @@ -1483,7 +1610,7 @@ debug@^3.0.1, debug@^3.1.0: dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1493,6 +1620,10 @@ decompress-response@^3.2.0: 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" @@ -1507,6 +1638,13 @@ default-require-extensions@^1.0.0: 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" @@ -1519,6 +1657,17 @@ del@^2.0.2: 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" @@ -1527,6 +1676,10 @@ 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" @@ -1534,6 +1687,10 @@ des.js@^1.0.0: 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" @@ -1548,6 +1705,10 @@ 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" @@ -1568,6 +1729,23 @@ 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" @@ -1592,6 +1770,10 @@ 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" @@ -1620,6 +1802,10 @@ 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" + 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" @@ -1656,6 +1842,28 @@ error@^7.0.2: 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: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1771,10 +1979,24 @@ 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" @@ -1845,6 +2067,41 @@ expect@^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: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -1887,6 +2144,18 @@ 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" @@ -1934,6 +2203,18 @@ fill-range@^2.1.0: 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-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1987,6 +2268,10 @@ for-own@^0.1.4: 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" @@ -1999,6 +2284,14 @@ form-data@~2.1.1: 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" + 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" @@ -2031,6 +2324,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 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" @@ -2056,6 +2353,10 @@ 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" @@ -2226,6 +2527,10 @@ 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" @@ -2279,6 +2584,12 @@ 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" @@ -2337,12 +2648,58 @@ 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" @@ -2375,6 +2732,13 @@ 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" @@ -2400,7 +2764,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +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" @@ -2450,6 +2814,12 @@ inquirer@^3.0.6, inquirer@^3.2.0, inquirer@^3.3.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" @@ -2464,6 +2834,14 @@ 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" @@ -2484,12 +2862,20 @@ is-builtin-module@^1.0.0: 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" @@ -2508,7 +2894,7 @@ 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.1: +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" @@ -2534,6 +2920,12 @@ is-glob@^2.0.0, is-glob@^2.0.1: 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" @@ -2592,6 +2984,12 @@ 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" @@ -2614,6 +3012,10 @@ 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" @@ -2626,6 +3028,10 @@ 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" @@ -3036,6 +3442,10 @@ 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" @@ -3053,6 +3463,10 @@ jsprim@^1.2.2: 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" @@ -3247,6 +3661,13 @@ loose-envify@^1.0.0: 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" @@ -3270,6 +3691,10 @@ makeerror@1.0.x: 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" @@ -3281,6 +3706,10 @@ md5.js@^1.3.4: 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" @@ -3317,6 +3746,25 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: 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" @@ -3335,6 +3783,10 @@ messageformat@^1.0.2: 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" @@ -3360,16 +3812,24 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@~1.30.0: +"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.7: +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" @@ -3400,11 +3860,11 @@ 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.2.0: +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" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3414,6 +3874,17 @@ 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" @@ -3439,10 +3910,18 @@ 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" @@ -3520,7 +3999,7 @@ nopt@~3.0.6: dependencies: abbrev "1" -normalize-package-data@^2.3.2: +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: @@ -3584,6 +4063,10 @@ 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" @@ -3591,6 +4074,20 @@ object.omit@^2.0.0: 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.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3607,6 +4104,12 @@ onetime@^2.0.0: 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" @@ -3634,6 +4137,12 @@ ora@^0.2.3: 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" @@ -3642,6 +4151,12 @@ 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" @@ -3752,6 +4267,10 @@ 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" @@ -3782,6 +4301,10 @@ 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" @@ -3828,10 +4351,24 @@ 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" @@ -3914,6 +4451,13 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +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" @@ -3940,6 +4484,10 @@ 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: + 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" @@ -3952,6 +4500,14 @@ 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" @@ -3976,6 +4532,19 @@ randomfill@^1.0.3: 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" @@ -4022,7 +4591,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, 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.3.3: +readable-stream@^2.0.1, readable-stream@^2.0.2, 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: @@ -4068,6 +4637,13 @@ rechoir@^0.6.2: 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" @@ -4188,6 +4764,10 @@ require-uncached@^1.0.3: 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" + reserved-words@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" @@ -4286,7 +4866,7 @@ rxjs@^5.0.0-beta.11, rxjs@^5.3.0: dependencies: symbol-observable "1.0.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: +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" @@ -4320,6 +4900,16 @@ 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: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -4328,6 +4918,45 @@ semver@5.3.0, 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" + +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" @@ -4340,6 +4969,14 @@ 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" @@ -4397,6 +5034,24 @@ sntp@1.x.x: dependencies: hoek "2.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" @@ -4442,6 +5097,29 @@ 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" @@ -4464,6 +5142,10 @@ 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" @@ -4566,6 +5248,12 @@ 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" @@ -4682,6 +5370,14 @@ 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" @@ -4726,6 +5422,10 @@ 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" @@ -4750,6 +5450,13 @@ type-check@~0.3.2: 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" @@ -4794,6 +5501,10 @@ underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +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" @@ -4810,6 +5521,20 @@ url-parse-lax@^1.0.0: 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" @@ -4835,6 +5560,14 @@ util@0.10.3, util@^0.10.3: 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: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -4852,6 +5585,10 @@ validate-npm-package-license@^3.0.1: 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" @@ -4921,6 +5658,12 @@ watchpack@^1.4.0: 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" @@ -4938,6 +5681,48 @@ webpack-addons@^1.1.4: babel-preset-stage-3 "^6.24.1" 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" @@ -4971,6 +5756,17 @@ webpack@^4.0.0-alpha.0: webpack-sources "^1.0.1" yargs "^8.0.2" +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" @@ -4984,6 +5780,10 @@ whatwg-url@^4.3.0: 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" @@ -5068,6 +5868,12 @@ 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" @@ -5097,6 +5903,24 @@ yargs@10.0.3: 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@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" From 3a49e168e48a32359dec8744fb7610135f31714f Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Fri, 15 Dec 2017 20:15:01 +0100 Subject: [PATCH 038/109] add support for enum props too --- lib/generators/add-generator.js | 42 ++++++++++++++++++++++++++++++--- webpack.config.js | 6 +++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 404c5926848..2084f47f0f5 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -55,15 +55,51 @@ module.exports = class AddGenerator extends Generator { * https://github.com/webpack/webpack/blob/next/schemas/WebpackOptions.json * Find the properties directly in the properties prop, or the anyOf prop */ - const defOrPropDescription = webpackSchemaProp + 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 - )[0].properties + 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 + if ( + defOrPropDescription[0].hasOwnProperty("properties") || + defOrPropDescription[1].hasOwnProperty("properties") + ) { + defOrPropDescription = defOrPropDescription[0].hasOwnProperty( + "properties" + ) + ? defOrPropDescription[0].properties + : defOrPropDescription[1].properties; + } else if ( + defOrPropDescription[0].hasOwnProperty("enum") || + defOrPropDescription[1].hasOwnProperty("enum") + ) { + 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; + }, {}); + } + } const webpackDevserverSchemaProp = action === "devServer" ? webpackDevServerSchema : null; // If we've got a schema prop or devServer Schema Prop diff --git a/webpack.config.js b/webpack.config.js index e85a2445345..0d0104145d0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,8 +1,14 @@ const webpack = require('webpack'); const webpack = require('webpack'); +const webpack = require('webpack'); +const webpack = require('webpack'); module.exports = { externals: { undefined: '', undefined: 'a' + }, + + performance: { + 0: '' } }; From a8da6b4a36e7a02266102e7265c85c6ecc324720 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Sat, 16 Dec 2017 08:15:12 -0800 Subject: [PATCH 039/109] feature(defaults): remove entry and output.path validation (#217) * feat(defaults): remove validations from entry and output.path * feat(defaults): bump optional dependency to alpha.1 * add comma to pkg.json and update yarn --- bin/convert-argv.js | 47 -------- package.json | 2 +- yarn.lock | 276 ++++++++++++++++++++++++++++++++++++-------- 3 files changed, 230 insertions(+), 95 deletions(-) diff --git a/bin/convert-argv.js b/bin/convert-argv.js index 037e3f20eac..c01cc2c4818 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -554,35 +554,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 = { @@ -621,23 +592,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/package.json b/package.json index b378c24bd0f..808e8e883ab 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ }, "optionalDependencies": { "schema-utils": "^0.4.2", - "webpack": "^4.0.0-alpha.0", + "webpack": "^4.0.0-alpha.1", "webpack-dev-server": "^2.9.7" } } diff --git a/yarn.lock b/yarn.lock index d22c00981ed..a2ae239f44c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -130,7 +130,7 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1009,6 +1009,10 @@ block-stream@*: dependencies: inherits "~2.0.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" @@ -1167,6 +1171,24 @@ 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" @@ -1272,6 +1294,10 @@ chokidar@^1.6.0, chokidar@^1.6.1, chokidar@^1.7.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" @@ -1396,7 +1422,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.9.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" @@ -1432,7 +1458,7 @@ 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.6.0: +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: @@ -1482,6 +1508,17 @@ 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" @@ -1576,6 +1613,10 @@ currently-unhandled@^0.4.1: 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" @@ -1760,6 +1801,15 @@ 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" @@ -1806,6 +1856,12 @@ 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" @@ -2215,6 +2271,14 @@ finalhandler@1.1.0: 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" @@ -2258,6 +2322,13 @@ flow-remove-types@^1.2.1: 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" @@ -2292,10 +2363,26 @@ 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" @@ -2728,6 +2815,10 @@ 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" @@ -3672,13 +3763,19 @@ 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.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" @@ -3864,12 +3961,38 @@ 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: 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" @@ -4088,7 +4211,7 @@ 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.3, once@^1.4.0: +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: @@ -4234,6 +4357,14 @@ 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" @@ -4451,6 +4582,10 @@ 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" @@ -4476,6 +4611,21 @@ public-encrypt@^4.0.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" @@ -4591,7 +4741,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.2, 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: +"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: @@ -4823,7 +4973,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.0, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.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: @@ -4846,6 +4996,12 @@ run-async@^2.0.0, run-async@^2.2.0: 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" @@ -4888,6 +5044,12 @@ 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.2" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.2.tgz#86d92aedf4dfc51c9b321ef16bd33a9417b122d0" @@ -4936,6 +5098,10 @@ send@0.16.1: 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" @@ -5072,7 +5238,7 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, sour 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, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -5138,6 +5304,12 @@ sshpk@^1.7.0: 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" @@ -5153,6 +5325,13 @@ stream-browserify@^2.0.1: 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" @@ -5163,6 +5342,10 @@ stream-http@^2.7.2: 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" @@ -5297,15 +5480,11 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" -tapable@1.0.0-beta.3: - version "1.0.0-beta.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0-beta.3.tgz#1f56bb6fec924ac9570cd8f6ff788e5bcf4808f1" - 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.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" @@ -5472,7 +5651,14 @@ typescript@^2.5.1: version "2.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" -uglify-js@^2.6, uglify-js@^2.8.29: +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: @@ -5485,13 +5671,18 @@ 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@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" - dependencies: - source-map "^0.5.6" - uglify-js "^2.8.29" +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" @@ -5501,6 +5692,18 @@ underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" +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" @@ -5730,9 +5933,9 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.0.0-alpha.0: - version "4.0.0-alpha.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.0.0-alpha.0.tgz#97949f332b9189182d22c6b302ee3dbe03faf96c" +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" @@ -5741,7 +5944,6 @@ webpack@^4.0.0-alpha.0: async "^2.1.2" enhanced-resolve "4.0.0-beta.2" eslint-scope "^3.7.1" - interpret "^1.0.0" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" @@ -5749,12 +5951,10 @@ webpack@^4.0.0-alpha.0: node-libs-browser "^2.0.0" schema-utils "^0.4.2" source-map "^0.5.3" - supports-color "^4.2.1" - tapable "1.0.0-beta.3" - uglifyjs-webpack-plugin "^0.4.6" + tapable "^1.0.0-beta.5" + uglifyjs-webpack-plugin "^1.1.1" watchpack "^1.4.0" webpack-sources "^1.0.1" - yargs "^8.0.2" websocket-driver@>=0.5.1: version "0.7.0" @@ -5812,7 +6012,7 @@ 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.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: @@ -5921,24 +6121,6 @@ yargs@^6.6.0: y18n "^3.2.1" yargs-parser "^4.2.0" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - 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@^9.0.0, yargs@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" From 682739877fcb51791db4eda6cf9b18dc054be3c4 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 16 Dec 2017 18:41:00 +0100 Subject: [PATCH 040/109] [WIP] working on support for all props --- lib/generators/add-generator.js | 89 ++++++++++++++++++++++++--------- lib/utils/prop-types.js | 3 +- webpack.config.js | 1 + 3 files changed, 67 insertions(+), 26 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 2084f47f0f5..d9013726113 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -15,6 +15,16 @@ function replaceAt(string, index, replace) { return string.substring(0, index) + replace + string.substring(index + 1); } +const traverseAndGetProperties = (arr, prop) => { + let hasProp = false; + arr.forEach(p => { + if (p[prop]) { + hasProp = true; + } + }); + return hasProp; +}; + module.exports = class AddGenerator extends Generator { constructor(args, opts) { super(args, opts); @@ -66,19 +76,24 @@ module.exports = class AddGenerator extends Generator { : null; if (Array.isArray(defOrPropDescription)) { // Todo: Generalize these to go through the array, then merge enum with props if needed - if ( - defOrPropDescription[0].hasOwnProperty("properties") || - defOrPropDescription[1].hasOwnProperty("properties") - ) { - defOrPropDescription = defOrPropDescription[0].hasOwnProperty( - "properties" - ) - ? defOrPropDescription[0].properties - : defOrPropDescription[1].properties; - } else if ( - defOrPropDescription[0].hasOwnProperty("enum") || - defOrPropDescription[1].hasOwnProperty("enum") - ) { + const hasPropertiesProp = traverseAndGetProperties( + defOrPropDescription, + "properties" + ); + const hasEnumProp = traverseAndGetProperties( + defOrPropDescription, + "enum" + ); + + 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) @@ -106,6 +121,9 @@ module.exports = class AddGenerator extends Generator { if (defOrPropDescription || webpackDevserverSchemaProp) { // Check for properties in definitions[action] or properties[action] if (defOrPropDescription) { + defOrPropDescription = Object.assign(defOrPropDescription, { + other: {} + }); manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, @@ -113,6 +131,12 @@ module.exports = class AddGenerator extends Generator { ); isDeepProp[0] = true; } else if (webpackDevserverSchemaProp) { + webpackDevserverSchemaProp.properties = Object.assign( + webpackDevserverSchemaProp.properties, + { + other: {} + } + ); manualOrListInput = List( "actionAnswer", `what do you want to add to ${action}?`, @@ -189,18 +213,33 @@ module.exports = class AddGenerator extends Generator { } else { if (isDeepProp[0]) { isDeepProp[1] = answerToAction.actionAnswer; - this.prompt([ - Input( - "deepProp", - `what do you want the value of ${isDeepProp[1]} to be?` - ) - ]).then(deepPropAns => { - this.configuration.config.item = action + "." + isDeepProp[1]; - this.configuration.config.webpackOptions[action] = { - [isDeepProp[1]]: `'${deepPropAns.deepProp}'` - }; - done(); - }); + 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 => { + 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?`; + this.prompt([Input("deepProp", othersDeepPropKey)]).then( + deepPropAns => { + // this.config mods + done(); + } + ); + } else { + this.configuration.config.item = action + "." + isDeepProp[1]; + this.configuration.config.webpackOptions[action] = { + [isDeepProp[1]]: `'${deepPropAns.deepProp}'` + }; + done(); + } + } + ); } else { this.configuration.config.item = action; this.configuration.config.webpackOptions[action] = diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index e8758953c5e..40991127fd3 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -12,5 +12,6 @@ module.exports = new Set([ "resolve", "target", "watch", - "watchOptions" + "watchOptions", + "stats" ]); diff --git a/webpack.config.js b/webpack.config.js index 0d0104145d0..67252b2402b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,6 +2,7 @@ const webpack = require('webpack'); const webpack = require('webpack'); const webpack = require('webpack'); const webpack = require('webpack'); +const webpack = require('webpack'); module.exports = { externals: { undefined: '', From 75e600698c03f0fc935202e307466741ab59e71c Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 16 Dec 2017 21:39:02 +0100 Subject: [PATCH 041/109] Comment the generator, polish last draft of it --- lib/generators/add-generator.js | 84 ++++++++++++++++++++++++++++++--- webpack.config.js | 10 ++-- 2 files changed, 81 insertions(+), 13 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index d9013726113..4533a082804 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -15,6 +15,7 @@ function replaceAt(string, index, replace) { return string.substring(0, index) + replace + string.substring(index + 1); } +// Finds if an array has a given prop const traverseAndGetProperties = (arr, prop) => { let hasProp = false; arr.forEach(p => { @@ -53,10 +54,11 @@ module.exports = class AddGenerator extends Generator { ) ]) .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(() => { @@ -84,7 +86,9 @@ module.exports = class AddGenerator extends Generator { 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 || @@ -115,22 +119,51 @@ module.exports = class AddGenerator extends Generator { }, {}); } } + // 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 we've got a schema prop or devServer Schema Prop if (defOrPropDescription || webpackDevserverSchemaProp) { // Check for properties in definitions[action] or properties[action] if (defOrPropDescription) { - defOrPropDescription = Object.assign(defOrPropDescription, { - other: {} - }); + 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, { @@ -142,6 +175,7 @@ module.exports = class AddGenerator extends Generator { `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 @@ -153,7 +187,11 @@ module.exports = class AddGenerator extends Generator { return this.prompt([manualOrListInput]); }) .then(answerToAction => { - if (action === "plugins" || action === "loader") { + /* + * 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", @@ -175,6 +213,7 @@ module.exports = class AddGenerator extends Generator { ] = `new webpack.${pluginExist}`; done(); } else { + // If its not in webpack, check npm npmExists(answerToAction.actionAnswer).then(p => { if (p) { this.dependencies.push(answerToAction.actionAnswer); @@ -211,27 +250,57 @@ module.exports = class AddGenerator extends Generator { }); } } 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") + ) { + 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 => { - // this.config mods + // 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}'` @@ -241,6 +310,7 @@ module.exports = class AddGenerator extends Generator { } ); } else { + // We're asking for input-only this.configuration.config.item = action; this.configuration.config.webpackOptions[action] = answerToAction.actionAnswer; diff --git a/webpack.config.js b/webpack.config.js index 67252b2402b..d10d2a28ada 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,14 +2,12 @@ const webpack = require('webpack'); const webpack = require('webpack'); const webpack = require('webpack'); const webpack = require('webpack'); -const webpack = require('webpack'); module.exports = { - externals: { - undefined: '', - undefined: 'a' + performance: { + hints: 'asd' }, - performance: { - 0: '' + resolve: { + cachePredicate: 'asd' } }; From a4e5921acddba99febfa47f639873c240753aa30 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sat, 16 Dec 2017 22:12:34 +0100 Subject: [PATCH 042/109] Add add transform for context --- lib/init/transformations/context/context.js | 2 +- lib/init/transformations/top-scope/top-scope.js | 7 ++++++- webpack.config.js | 11 +---------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index 50ec432a0fe..041a2ac439d 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -32,7 +32,7 @@ module.exports = function contextTransform(j, ast, webpackProperties, action) { return ast .find(j.ObjectExpression) .filter(p => - utils.pushObjectKeys(j, p, webpackProperties, "context") + utils.checkIfExistsAndAddValue(j, p, "context", webpackProperties) ); } else { return contextTransform(j, ast, webpackProperties, "init"); diff --git a/lib/init/transformations/top-scope/top-scope.js b/lib/init/transformations/top-scope/top-scope.js index 3352dbfd3bb..6de089cc415 100644 --- a/lib/init/transformations/top-scope/top-scope.js +++ b/lib/init/transformations/top-scope/top-scope.js @@ -12,7 +12,12 @@ module.exports = function(j, ast, webpackProperties, action) { function createTopScopeProperty(p) { webpackProperties.forEach(n => { - p.value.body.splice(-1, 0, 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) { diff --git a/webpack.config.js b/webpack.config.js index d10d2a28ada..b01a79c4c6c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,13 +1,4 @@ const webpack = require('webpack'); -const webpack = require('webpack'); -const webpack = require('webpack'); -const webpack = require('webpack'); module.exports = { - performance: { - hints: 'asd' - }, - - resolve: { - cachePredicate: 'asd' - } + context: ok }; From 524ef4b3201c695ab68df86c4dda96c08a29ef43 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 12:34:07 +0100 Subject: [PATCH 043/109] update tests and fix lint errors --- bin/convert-argv.js | 1 + .../__snapshots__/context.test.js.snap | 16 +++ .../transformations/context/context.test.js | 4 + test/binCases/errors/issue-5576/stdin.js | 2 +- .../uglifyjsplugin-empty-args/test.opts | 2 +- test/js/bin/config-name/found-many/main.js | 86 +-------------- test/js/bin/configFile/profile/null.js | 102 +----------------- test/js/bin/entry/named-entry/foo.js | 86 +-------------- test/js/bin/entry/named-entry/null.js | 87 +-------------- test/js/bin/stats/multi-config/null.js | 86 +-------------- test/js/bin/stats/none/null.js | 86 +-------------- test/js/bin/stats/single-config/null.js | 86 +-------------- test/js/bin/watch/multi-config/null.js | 86 +-------------- test/js/bin/watch/single-config/null.js | 85 +-------------- webpack.config.js | 5 +- 15 files changed, 33 insertions(+), 787 deletions(-) diff --git a/bin/convert-argv.js b/bin/convert-argv.js index c01cc2c4818..c77110d83cd 100644 --- a/bin/convert-argv.js +++ b/bin/convert-argv.js @@ -203,6 +203,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) { diff --git a/lib/init/transformations/context/__snapshots__/context.test.js.snap b/lib/init/transformations/context/__snapshots__/context.test.js.snap index a6f0276751a..83a8862858b 100644 --- a/lib/init/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/init/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js index a11d212931e..27353920564 100644 --- a/lib/init/transformations/context/context.test.js +++ b/lib/init/transformations/context/context.test.js @@ -11,3 +11,7 @@ defineTest( ); 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/test/binCases/errors/issue-5576/stdin.js b/test/binCases/errors/issue-5576/stdin.js index 577ec2f6887..0175fec7931 100644 --- a/test/binCases/errors/issue-5576/stdin.js +++ b/test/binCases/errors/issue-5576/stdin.js @@ -6,7 +6,7 @@ module.exports = function testAssertions(code, stdout, stderr) { expect(stdout[1]).toContain("Version: "); expect(stdout[2]).toContain("Time: "); expect(stdout[4]).toContain( - "ERROR in Entry module not found: Error: Can't resolve" + "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..dfd4ed8a9a8 100644 --- a/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts +++ b/test/binCases/plugins/uglifyjsplugin-empty-args/test.opts @@ -3,4 +3,4 @@ --output-filename [name].js --output-chunk-filename [id].chunk.js --target async-node ---plugin webpack/lib/optimize/UglifyJsPlugin +--plugin uglifyjs-webpack-plugin 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/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/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/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/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/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 index b01a79c4c6c..f053ebf7976 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,4 +1 @@ -const webpack = require('webpack'); -module.exports = { - context: ok -}; +module.exports = {}; From b4b874b86e57ba28bcd2e891779b4163013f0599 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 12:35:45 +0100 Subject: [PATCH 044/109] update testfixtures --- .../context/__testfixtures__/context-3.input.js | 3 +++ .../context/__testfixtures__/context-4.input.js | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 lib/init/transformations/context/__testfixtures__/context-3.input.js create mode 100644 lib/init/transformations/context/__testfixtures__/context-4.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' +} From fd32a9af1638362cbac50412df501cddb03b2549 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 13:47:02 +0100 Subject: [PATCH 045/109] tests for devServer & set up ast for it --- .../transformations/context/context.test.js | 1 - .../__snapshots__/devServer.test.js.snap | 43 +++++++++++++++++++ .../transformations/devServer/devServer.js | 38 ++++++++++++++-- .../devServer/devServer.test.js | 25 +++++++++++ 4 files changed, 102 insertions(+), 5 deletions(-) diff --git a/lib/init/transformations/context/context.test.js b/lib/init/transformations/context/context.test.js index 27353920564..7dcf6b0474d 100644 --- a/lib/init/transformations/context/context.test.js +++ b/lib/init/transformations/context/context.test.js @@ -14,4 +14,3 @@ 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 index f1342f6724b..dfa4348efd4 100644 --- a/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap +++ b/lib/init/transformations/devServer/__snapshots__/devServer.test.js.snap @@ -29,3 +29,46 @@ exports[`devServer transforms correctly using "devServer-1" data 1`] = ` } " `; + +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/init/transformations/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js index 3edc86d8726..0aaeaed47fc 100644 --- a/lib/init/transformations/devServer/devServer.js +++ b/lib/init/transformations/devServer/devServer.js @@ -41,12 +41,42 @@ module.exports = function devServerTransform( ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "devServer").size() !== 0) { + const devServerNode = utils.findRootNodesByName(j, ast, "devServer"); + if (devServerNode.size() !== 0 && typeof webpackProperties === "object") { return ast .find(j.ObjectExpression) - .filter(p => - utils.pushObjectKeys(j, p, webpackProperties, "devServer") - ); + .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 && + typeof 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"); } diff --git a/lib/init/transformations/devServer/devServer.test.js b/lib/init/transformations/devServer/devServer.test.js index f0bc3dd07d2..d1832185f7f 100644 --- a/lib/init/transformations/devServer/devServer.test.js +++ b/lib/init/transformations/devServer/devServer.test.js @@ -14,3 +14,28 @@ defineTest( "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"); From 76885e0ea01ccadc75713c77cc93e2351645e7cc Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 15:33:01 +0100 Subject: [PATCH 046/109] fix devtool transform and add unit test --- lib/init/transformations/context/context.js | 7 ++- .../__snapshots__/devtool.test.js.snap | 61 +++++++++++++++++++ lib/init/transformations/devtool/devtool.js | 14 +++-- .../transformations/devtool/devtool.test.js | 12 ++++ 4 files changed, 88 insertions(+), 6 deletions(-) diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index 041a2ac439d..00fb0d2240b 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -32,7 +32,12 @@ module.exports = function contextTransform(j, ast, webpackProperties, action) { return ast .find(j.ObjectExpression) .filter(p => - utils.checkIfExistsAndAddValue(j, p, "context", webpackProperties) + utils.checkIfExistsAndAddValue( + j, + p, + "context", + utils.createIdentifierOrLiteral(j, webpackProperties) + ) ); } else { return contextTransform(j, ast, webpackProperties, "init"); diff --git a/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap b/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap index 254078625ca..d82d810dd5a 100644 --- a/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap +++ b/lib/init/transformations/devtool/__snapshots__/devtool.test.js.snap @@ -51,3 +51,64 @@ exports[`devtool transforms correctly using "devtool-1" data 2`] = ` } " `; + +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/init/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js index 6b9aeb0daab..8039dfe83ab 100644 --- a/lib/init/transformations/devtool/devtool.js +++ b/lib/init/transformations/devtool/devtool.js @@ -14,7 +14,7 @@ const utils = require("../../../utils/ast-utils"); */ module.exports = function devToolTransform(j, ast, webpackProperties, action) { - if (webpackProperties) { + if (webpackProperties || typeof webpackProperties === "boolean") { if (action === "init") { return ast .find(j.ObjectExpression) @@ -29,11 +29,15 @@ module.exports = function devToolTransform(j, ast, webpackProperties, action) { ); } else if (action === "add") { if (utils.findRootNodesByName(j, ast, "devtool").size() !== 0) { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.pushObjectKeys(j, p, webpackProperties, "devtool") + return utils.findRootNodesByName(j, ast, "devtool").forEach(p => { + j(p).replaceWith( + j.property( + "init", + j.identifier("devtool"), + utils.createIdentifierOrLiteral(j, webpackProperties) + ) ); + }); } else { return devToolTransform(j, ast, webpackProperties, "init"); } diff --git a/lib/init/transformations/devtool/devtool.test.js b/lib/init/transformations/devtool/devtool.test.js index 0bbceb8b5c3..02464db79a5 100644 --- a/lib/init/transformations/devtool/devtool.test.js +++ b/lib/init/transformations/devtool/devtool.test.js @@ -12,3 +12,15 @@ defineTest( "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"); From 518915ff0320201ba0a8a59ead48c66a74c171cf Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 15:44:57 +0100 Subject: [PATCH 047/109] add entry transform and tests on add --- .../entry/__snapshots__/entry.test.js.snap | 57 +++++++++++++++++++ lib/init/transformations/entry/entry.js | 33 ++++++++++- lib/init/transformations/entry/entry.test.js | 34 +++++++++++ 3 files changed, 122 insertions(+), 2 deletions(-) diff --git a/lib/init/transformations/entry/__snapshots__/entry.test.js.snap b/lib/init/transformations/entry/__snapshots__/entry.test.js.snap index 1fb3d3acd85..8d92d0c9f61 100644 --- a/lib/init/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/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index e45197fc342..93a87028683 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -37,10 +37,39 @@ module.exports = function entryTransform(j, ast, webpackProperties, action) { .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createEntryProperty)); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "entry").size() !== 0) { + const entryNode = utils.findRootNodesByName(j, ast, "entry"); + if (entryNode.size() !== 0 && typeof webpackProperties === "object") { return ast .find(j.ObjectExpression) - .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "entry")); + .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 && typeof 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"); } diff --git a/lib/init/transformations/entry/entry.test.js b/lib/init/transformations/entry/entry.test.js index eb1a51eab10..406c8830ea3 100644 --- a/lib/init/transformations/entry/entry.test.js +++ b/lib/init/transformations/entry/entry.test.js @@ -35,3 +35,37 @@ defineTest( "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"); From 3e0310ae8797cb1fb9f5af9566821afb84e35be1 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 15:45:41 +0100 Subject: [PATCH 048/109] add testfixtures --- .../devServer/__testfixtures__/devServer-2.input.js | 6 ++++++ .../devServer/__testfixtures__/devServer-3.input.js | 11 +++++++++++ .../devServer/__testfixtures__/devServer-4.input.js | 9 +++++++++ .../devtool/__testfixtures__/devtool-2.input.js | 6 ++++++ .../devtool/__testfixtures__/devtool-3.input.js | 6 ++++++ .../devtool/__testfixtures__/devtool-4.input.js | 7 +++++++ .../entry/__testfixtures__/entry-1.input.js | 6 ++++++ 7 files changed, 51 insertions(+) create mode 100644 lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js create mode 100644 lib/init/transformations/devServer/__testfixtures__/devServer-3.input.js create mode 100644 lib/init/transformations/devServer/__testfixtures__/devServer-4.input.js create mode 100644 lib/init/transformations/devtool/__testfixtures__/devtool-2.input.js create mode 100644 lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js create mode 100644 lib/init/transformations/devtool/__testfixtures__/devtool-4.input.js create mode 100644 lib/init/transformations/entry/__testfixtures__/entry-1.input.js diff --git a/lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js b/lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/devServer/__testfixtures__/devServer-2.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.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/devtool/__testfixtures__/devtool-2.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-2.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/devtool/__testfixtures__/devtool-2.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.js' + } +} diff --git a/lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js b/lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js new file mode 100644 index 00000000000..ea0822c2484 --- /dev/null +++ b/lib/init/transformations/devtool/__testfixtures__/devtool-3.input.js @@ -0,0 +1,6 @@ +module.exports = { + entry: 'index.js', + output: { + filename: 'bundle.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/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' + } +} From 577f881927e186d0a4a94d1ada7bc80303a4abba Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 16:00:56 +0100 Subject: [PATCH 049/109] add yarn commands on pkg.json and disable some wip tests --- .../__testfixtures__/externals-2.input.js | 12 +++ .../transformations/externals/externals.js | 41 ++++++- .../externals/externals.test.js | 101 ++++++++++++++++++ package.json | 4 +- 4 files changed, 152 insertions(+), 6 deletions(-) create mode 100644 lib/init/transformations/externals/__testfixtures__/externals-2.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 index 7a92fbb381f..f55efedd1e6 100644 --- a/lib/init/transformations/externals/externals.js +++ b/lib/init/transformations/externals/externals.js @@ -55,12 +55,45 @@ module.exports = function externalsTransform( ) .forEach(createExternalProperty); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "externals").size() !== 0) { + const externalNode = utils.findRootNodesByName(j, ast, "externals"); + if (externalNode.size() !== 0 && typeof webpackProperties === "object") { return ast .find(j.ObjectExpression) - .filter(p => - utils.pushObjectKeys(j, p, webpackProperties, "externals") - ); + .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 && typeof 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"); } diff --git a/lib/init/transformations/externals/externals.test.js b/lib/init/transformations/externals/externals.test.js index 099bed1e3c0..342d30f7a70 100644 --- a/lib/init/transformations/externals/externals.test.js +++ b/lib/init/transformations/externals/externals.test.js @@ -101,3 +101,104 @@ defineTest( ], "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/package.json b/package.json index 808e8e883ab..6a91aa0bc57 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "format:dist": "prettier-eslint \"dist/**/**/*.js\" --write", "lint:codeOnly": "eslint \"{lib,bin}/**/!(__testfixtures__)/*.js\" \"{lib,bin}/**.js\"", "precommit": "lint-staged", - "prepare": "flow-remove-types lib/ -d dist/ && npm run format:dist", - "pretest": "npm run lint", + "prepare": "flow-remove-types lib/ -d dist/ && yarn format:dist", + "pretest": "yarn lint", "test": "jest --coverage" }, "lint-staged": { From 700bf0f1f11f40338eb84e4da728a99391c804a9 Mon Sep 17 00:00:00 2001 From: Sumit Gupta Date: Sun, 17 Dec 2017 20:41:55 +0530 Subject: [PATCH 050/109] Bugfix/user friendly startup message (#218) * remove dist from repo (#215) * bugfix - make startup message user friendly merged with v2 branch rephrased startup message updated yarn.lock file * small tweaks to formatting --- lib/generators/init-generator.js | 19 +++++++++++++------ package.json | 1 + yarn.lock | 12 ++++++------ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index 4cbe67e3187..6943e17a305 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -2,6 +2,7 @@ const Generator = require("yeoman-generator"); const chalk = require("chalk"); +const logSymbols = require("log-symbols"); const createCommonsChunkPlugin = require("webpack-addons") .createCommonsChunkPlugin; @@ -36,16 +37,22 @@ module.exports = class WebpackGenerator extends Generator { let regExpForStyles; let ExtractUseProps; let outputPath = "dist"; - process.stdout.write( - `\n${chalk.bold("Insecure about some of the questions?")}\n` + "\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( - `\n${chalk.bold.green( - "https://github.com/webpack/webpack-cli/blob/master/INIT.md" - )}\n\n` + logSymbols.info + + chalk.blue(" INFO ") + + "Alternatively, run `webpack-cli --help` for usage info." + + "\n\n" ); - this.configuration.config.webpackOptions.module = { rules: [] }; diff --git a/package.json b/package.json index 6a91aa0bc57..ab06e3114ee 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "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", diff --git a/yarn.lock b/yarn.lock index a2ae239f44c..74cae5e1003 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3712,18 +3712,18 @@ lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, 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-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-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" From c3cb2c1be99b291866fa3043380ef376a57ff197 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 16:14:29 +0100 Subject: [PATCH 051/109] cli and webpack are both supported --- lib/generators/init-generator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index 6943e17a305..b7d50f8f397 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -50,7 +50,7 @@ module.exports = class WebpackGenerator extends Generator { process.stdout.write( logSymbols.info + chalk.blue(" INFO ") + - "Alternatively, run `webpack-cli --help` for usage info." + + "Alternatively, run `webpack(-cli) --help` for usage info." + "\n\n" ); this.configuration.config.webpackOptions.module = { From d8b357eb93ece15a6a4bee07a153f2e68de30161 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 16:17:15 +0100 Subject: [PATCH 052/109] add before install to travis config --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8294398d524..0f61bb94935 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,9 @@ sudo: false notifications: email: false +before_install: +- yarn global add eslint + before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start From 88aaaa219baed9fb421d7dffcbe14e2f16a6e823 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 16:23:08 +0100 Subject: [PATCH 053/109] add plugins for travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0f61bb94935..2d1bce4e692 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,8 @@ notifications: before_install: - yarn global add eslint - +- yarn global add eslint-plugin-node +- yarn global add eslint-plugin-flowtype before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start From 972d4cd90061644aa2f4aaac33d2d80cb4a56d57 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 17:38:25 +0100 Subject: [PATCH 054/109] use prettier at migrate --- lib/commands/migrate.js | 4 +++- lib/utils/run-prettier.js | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/commands/migrate.js b/lib/commands/migrate.js index 0bfa6ae775f..1b51c50fbfd 100644 --- a/lib/commands/migrate.js +++ b/lib/commands/migrate.js @@ -7,6 +7,8 @@ const inquirer = require("inquirer"); const PLazy = require("p-lazy"); const Listr = require("listr"); +const runPrettier = require("../utils/run-prettier"); + module.exports = function transformFile( currentConfigPath, outputConfigPath, @@ -78,7 +80,7 @@ module.exports = function transformFile( ]) .then(answers => { if (answers["confirmMigration"]) { - fs.writeFile(outputConfigPath, result, "utf8", err => { + runPrettier(outputConfigPath, result, err => { if (err) { throw err; } else { diff --git a/lib/utils/run-prettier.js b/lib/utils/run-prettier.js index 5d503eedde0..d3aaddaaf25 100644 --- a/lib/utils/run-prettier.js +++ b/lib/utils/run-prettier.js @@ -13,9 +13,10 @@ const chalk = require("chalk"); * @returns fs - 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 +32,10 @@ module.exports = function runPrettier(outputPath, source) { ) ); prettySource = source; + error = err; + } + if (cb) { + return cb(error); } return fs.writeFileSync(outputPath, prettySource, "utf8"); } From e1f512c9bb96694dd623562dc4cef411ed004c2c Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 17:55:49 +0100 Subject: [PATCH 055/109] add mode transform and tests --- lib/generators/add-generator.js | 8 +++++++- lib/init/transformations/index.js | 4 +++- lib/utils/prop-types.js | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 4533a082804..ae58b6d3a9e 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -129,6 +129,12 @@ module.exports = class AddGenerator extends Generator { false: {} }; } + if (action === "mode") { + defOrPropDescription = { + development: {}, + production: {} + }; + } // If we've got a schema prop or devServer Schema Prop if (defOrPropDescription || webpackDevserverSchemaProp) { // Check for properties in definitions[action] or properties[action] @@ -255,7 +261,7 @@ module.exports = class AddGenerator extends Generator { isDeepProp[1] = answerToAction.actionAnswer; if ( isDeepProp[1] !== "other" && - (action === "devtool" || action === "watch") + (action === "devtool" || action === "watch" || action === "mode") ) { this.configuration.config.item = action; this.configuration.config.webpackOptions[action] = `'${ diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 457489b7c83..fb4b5d15678 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -28,6 +28,7 @@ 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"); /* * @function runTransform @@ -60,7 +61,8 @@ const transformsObject = { pluginsTransform, topScopeTransform, mergeTransform, - devServerTransform + devServerTransform, + modeTransform }; module.exports = function runTransform(webpackProperties, action) { diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 40991127fd3..2fc226b03f4 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -13,5 +13,6 @@ module.exports = new Set([ "target", "watch", "watchOptions", - "stats" + "stats", + "mode" ]); From 48294ee2e8ca20039fa32f2784efc962b8a17dbc Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 18:05:10 +0100 Subject: [PATCH 056/109] add unit test for emptycallablefunc + testfixtures --- .../mode/__snapshots__/mode.test.js.snap | 29 ++++++++++ .../mode/__testfixtures__/mode-1.input.js | 1 + .../mode/__testfixtures__/mode-2.input.js | 3 ++ lib/init/transformations/mode/mode.js | 53 +++++++++++++++++++ lib/init/transformations/mode/mode.test.js | 9 ++++ .../__snapshots__/ast-utils.test.js.snap | 4 +- lib/utils/ast-utils.js | 2 +- lib/utils/ast-utils.test.js | 11 +++- 8 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 lib/init/transformations/mode/__snapshots__/mode.test.js.snap create mode 100644 lib/init/transformations/mode/__testfixtures__/mode-1.input.js create mode 100644 lib/init/transformations/mode/__testfixtures__/mode-2.input.js create mode 100644 lib/init/transformations/mode/mode.js create mode 100644 lib/init/transformations/mode/mode.test.js 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..aabbe83371e --- /dev/null +++ b/lib/init/transformations/mode/mode.js @@ -0,0 +1,53 @@ +"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 { Object } webpackProperties - Object containing transformation rules +* @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") { + if (utils.findRootNodesByName(j, ast, "mode").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/utils/__snapshots__/ast-utils.test.js.snap b/lib/utils/__snapshots__/ast-utils.test.js.snap index ab678dd8aaf..4fa57757f19 100644 --- a/lib/utils/__snapshots__/ast-utils.test.js.snap +++ b/lib/utils/__snapshots__/ast-utils.test.js.snap @@ -23,6 +23,8 @@ exports[`utils createArrayWithChildren should find an prop that matches key and exports[`utils createEmptyArrayProperty should create an array with no properties 1`] = `"its-lit: []"`; +exports[`utils createEmptyCallableFunctionWithArguments Should create a empty function with a name 1`] = `"ringoStarr(\\"/* Add your arguments here */\\")"`; + exports[`utils createExternalRegExp should create an regExp property that has been parsed by jscodeshift 1`] = `"\\"\\\\t\\""`; exports[`utils createIdentifierOrLiteral should create basic literal 1`] = `"'stringLiteral'"`; @@ -96,7 +98,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/utils/ast-utils.js b/lib/utils/ast-utils.js index 50d09d4cd28..38b2f0df837 100644 --- a/lib/utils/ast-utils.js +++ b/lib/utils/ast-utils.js @@ -622,7 +622,7 @@ function createEmptyCallableFunctionWithArguments( j: Ijscodeshit, name: String ): any { - return j.callExpression(j.identifier(name), [j.literal("/* heyo */")]); + return j.callExpression(j.identifier(name), [j.literal("/* Add your arguments here */")]); } module.exports = { diff --git a/lib/utils/ast-utils.test.js b/lib/utils/ast-utils.test.js index e83827c913e..d234654f0e2 100644 --- a/lib/utils/ast-utils.test.js +++ b/lib/utils/ast-utils.test.js @@ -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,15 @@ var a = { plugs: [] } expect(ast.toSource()).toMatchSnapshot(); }); }); + describe("createEmptyCallableFunctionWithArguments", () => { + it("Should create a empty function with a name", () => { + const ast = j(utils.createEmptyCallableFunctionWithArguments( + j, + "ringoStarr" + )); + expect(ast.toSource()).toMatchSnapshot(); + }); + }); describe("isAssignment", () => { it("should invoke a callback if parent type is AssignmentExpression", () => { const ast = j("module.exports = {}"); From 769e92e3a5c5a6cd8b5b22dd7f49a73a5c1bb765 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 18:19:52 +0100 Subject: [PATCH 057/109] update webpack-addons --- package.json | 2 +- yarn.lock | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index ab06e3114ee..ecb1779e02f 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "recast": "git://github.com/kalcifer/recast.git#bug/allowbreak", "resolve-cwd": "^2.0.0", "supports-color": "^4.4.0", - "webpack-addons": "^1.1.4", + "webpack-addons": "^1.1.5", "yargs": "^9.0.1", "yeoman-environment": "^2.0.0", "yeoman-generator": "git://github.com/ev1stensberg/generator.git#Feature-getArgument" diff --git a/yarn.lock b/yarn.lock index 74cae5e1003..db48a270c7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -842,7 +842,7 @@ babel-preset-env@^1.6.1: invariant "^2.2.2" semver "^5.3.0" -babel-preset-es2015@^6.24.1, babel-preset-es2015@^6.9.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: @@ -5875,13 +5875,10 @@ 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.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.4.tgz#35bd7755869fe534130bfc368ef01e5fa54464ad" +webpack-addons@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" dependencies: - babel-code-frame "^6.22.0" - babel-preset-es2015 "^6.24.1" - babel-preset-stage-3 "^6.24.1" jscodeshift "^0.4.0" webpack-dev-middleware@^1.11.0: From fba04da156729df3117dcee7320e8360dc96c3f5 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 18:21:54 +0100 Subject: [PATCH 058/109] update yarn.lock --- yarn.lock | 144 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 125 insertions(+), 19 deletions(-) diff --git a/yarn.lock b/yarn.lock index db48a270c7e..20e42fab2d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,9 +58,9 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" +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" @@ -262,7 +262,11 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +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" @@ -1053,6 +1057,18 @@ boom@2.x.x: 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" @@ -1249,7 +1265,7 @@ center-align@^0.1.1: 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, chalk@^2.3.0: +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: @@ -1581,6 +1597,12 @@ cryptiles@2.x.x: 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" @@ -2158,7 +2180,7 @@ express@^4.16.2: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.0, extend@~3.0.0: +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" @@ -2355,6 +2377,14 @@ form-data@~2.1.1: 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" @@ -2632,6 +2662,10 @@ 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" @@ -2639,6 +2673,13 @@ har-validator@~4.2.1: 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" @@ -2706,6 +2747,15 @@ hawk@3.1.3, hawk@~3.1.3: 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" @@ -2718,6 +2768,10 @@ 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" @@ -2795,6 +2849,14 @@ http-signature@~1.1.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" @@ -3909,7 +3971,11 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.30.0 < 2", mime-db@~1.30.0: +"mime-db@>= 1.30.0 < 2": + version "1.32.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414" + +mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" @@ -4178,7 +4244,7 @@ number-is-nan@^1.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.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -4464,6 +4530,10 @@ 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" @@ -4634,7 +4704,7 @@ 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, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -4864,7 +4934,7 @@ 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, request@^2.79.0: +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -4891,6 +4961,33 @@ request@2.81.0, request@^2.79.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" @@ -5051,12 +5148,11 @@ schema-utils@^0.3.0: ajv "^5.0.0" schema-utils@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.2.tgz#86d92aedf4dfc51c9b321ef16bd33a9417b122d0" + 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" - chalk "^2.3.0" scoped-regex@^1.0.0: version "1.0.0" @@ -5072,11 +5168,11 @@ selfsigned@^1.9.1: dependencies: node-forge "0.6.33" -"semver@2 || 3 || 4 || 5", semver@5.4.1: +"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, semver@^5.3.0: +semver@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -5200,6 +5296,12 @@ sntp@1.x.x: 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" @@ -5390,7 +5492,7 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -5591,7 +5693,7 @@ 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.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: @@ -5771,7 +5873,7 @@ 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.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -6001,10 +6103,14 @@ 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, wordwrap@~0.0.2: +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" From b416d9c50138ef343b8bac6e3f66fdd5b917857d Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 18:29:36 +0100 Subject: [PATCH 059/109] remove fork of recast --- package.json | 2 +- yarn.lock | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index ecb1779e02f..096c7e409a1 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "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", "supports-color": "^4.4.0", "webpack-addons": "^1.1.5", diff --git a/yarn.lock b/yarn.lock index 20e42fab2d5..c32038da84b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -232,10 +232,6 @@ ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" -ast-types@0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.2.tgz#2cc19979d15c655108bf565323b8e7ee38751f6b" - astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -2028,7 +2024,7 @@ espree@^3.5.2: acorn "^5.2.1" acorn-jsx "^3.0.0" -esprima@^3.1.3, esprima@~3.1.0: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -4842,14 +4838,14 @@ recast@^0.12.5: private "~0.1.5" source-map "~0.6.1" -"recast@git://github.com/kalcifer/recast.git#bug/allowbreak": - version "0.11.18" - resolved "git://github.com/kalcifer/recast.git#b66a17eee9e072338744b947a406d3f134bc0b0d" +recast@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.13.0.tgz#a343a394a37d24668d700f88ed04b8d2c314d40d" dependencies: - ast-types "0.9.2" - esprima "~3.1.0" + ast-types "0.10.1" + esprima "~4.0.0" private "~0.1.5" - source-map "~0.5.0" + source-map "~0.6.1" rechoir@^0.6.2: version "0.6.2" @@ -5336,7 +5332,7 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: +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" From 28680c944dca0860ca59a38910840a641b418d18 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Sun, 17 Dec 2017 21:32:56 +0100 Subject: [PATCH 060/109] add tests for others and new transforms --- .../transformations/devServer/devServer.js | 5 +- lib/init/transformations/entry/entry.js | 2 +- .../transformations/externals/externals.js | 2 +- lib/init/transformations/index.js | 10 +- .../other/__snapshots__/other.test.js.snap | 237 ++++++++++++++++++ .../other/__testfixtures__/other-1.input.js | 14 ++ lib/init/transformations/other/amd.js | 71 +++++- lib/init/transformations/other/bail.js | 47 +++- lib/init/transformations/other/cache.js | 81 +++++- lib/init/transformations/other/merge.js | 2 +- lib/init/transformations/other/other.test.js | 62 +++++ lib/init/transformations/other/parallelism.js | 58 +++++ lib/init/transformations/other/profile.js | 81 +++++- .../transformations/other/recordsInputPath.js | 99 ++++++++ .../other/recordsOutputPath.js | 99 ++++++++ lib/init/transformations/other/recordsPath.js | 88 +++++++ lib/utils/ast-utils.js | 4 +- lib/utils/ast-utils.test.js | 7 +- lib/utils/prop-types.js | 11 +- webpack.config.js | 5 +- 20 files changed, 921 insertions(+), 64 deletions(-) create mode 100644 lib/init/transformations/other/__testfixtures__/other-1.input.js create mode 100644 lib/init/transformations/other/parallelism.js create mode 100644 lib/init/transformations/other/recordsInputPath.js create mode 100644 lib/init/transformations/other/recordsOutputPath.js create mode 100644 lib/init/transformations/other/recordsPath.js diff --git a/lib/init/transformations/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js index 0aaeaed47fc..001e6940c5d 100644 --- a/lib/init/transformations/devServer/devServer.js +++ b/lib/init/transformations/devServer/devServer.js @@ -61,10 +61,7 @@ module.exports = function devServerTransform( }); return ast; }); - } else if ( - devServerNode.size() !== 0 && - typeof webpackProperties.length - ) { + } else if (devServerNode.size() !== 0 && webpackProperties.length) { return ast .find(j.ObjectExpression) .filter( diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index 93a87028683..9652934b68a 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -57,7 +57,7 @@ module.exports = function entryTransform(j, ast, webpackProperties, action) { }); return ast; }); - } else if (entryNode.size() !== 0 && typeof webpackProperties.length) { + } else if (entryNode.size() !== 0 && webpackProperties.length) { return ast .find(j.ObjectExpression) .filter( diff --git a/lib/init/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js index f55efedd1e6..508d7eebb60 100644 --- a/lib/init/transformations/externals/externals.js +++ b/lib/init/transformations/externals/externals.js @@ -81,7 +81,7 @@ module.exports = function externalsTransform( Array.isArray(webpackProperties) ) { // Todo - } else if (externalNode.size() !== 0 && typeof webpackProperties.length) { + } else if (externalNode.size() !== 0 && webpackProperties.length) { return ast .find(j.ObjectExpression) .filter( diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index fb4b5d15678..73da909f0da 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -24,6 +24,10 @@ 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"); @@ -62,7 +66,11 @@ const transformsObject = { topScopeTransform, mergeTransform, devServerTransform, - modeTransform + modeTransform, + parallelismTransform, + recordsInputPathTransform, + recordsOutputPathTransform, + recordsPathTransform }; module.exports = function runTransform(webpackProperties, action) { diff --git a/lib/init/transformations/other/__snapshots__/other.test.js.snap b/lib/init/transformations/other/__snapshots__/other.test.js.snap index acb7ebaebc0..bc95b877294 100644 --- a/lib/init/transformations/other/__snapshots__/other.test.js.snap +++ b/lib/init/transformations/other/__snapshots__/other.test.js.snap @@ -16,6 +16,24 @@ exports[`amd transforms correctly using "other-0" data 1`] = ` " `; +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', @@ -29,6 +47,25 @@ exports[`bail transforms correctly using "other-0" data 1`] = ` " `; +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', @@ -55,6 +92,44 @@ exports[`cache transforms correctly using "other-0" data 2`] = ` " `; +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', @@ -65,6 +140,56 @@ exports[`merge transforms correctly using "other-0" data 1`] = ` " `; +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', @@ -77,3 +202,115 @@ exports[`profile transforms correctly using "other-0" data 1`] = ` } " `; + +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/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 index 0983b5af858..dbc278dec20 100644 --- a/lib/init/transformations/other/amd.js +++ b/lib/init/transformations/other/amd.js @@ -13,19 +13,70 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - function createAMDProperty(p) { +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 && - action === "init" && - typeof webpackProperties === "object" - ) { - return ast - .find(j.ObjectExpression) - .filter(p => utils.isAssignment(null, p, createAMDProperty)); + 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 index 5f4c8b8c8ab..d58179d8658 100644 --- a/lib/init/transformations/other/bail.js +++ b/lib/init/transformations/other/bail.js @@ -13,19 +13,40 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "bail", - webpackProperties - ) - ); +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") { + if (utils.findRootNodesByName(j, ast, "bail").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 index 6c1a79b89eb..645af35c7f7 100644 --- a/lib/init/transformations/other/cache.js +++ b/lib/init/transformations/other/cache.js @@ -13,19 +13,74 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "cache", - webpackProperties - ) - ); +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/init/transformations/other/merge.js b/lib/init/transformations/other/merge.js index 7bde4fae7bb..6d93cdbd9b8 100644 --- a/lib/init/transformations/other/merge.js +++ b/lib/init/transformations/other/merge.js @@ -38,7 +38,7 @@ module.exports = function(j, ast, webpackProperties, action) { }; p.value.body[bodyLength - 1] = newVal; } - if (webpackProperties && action === "init") { + if (webpackProperties) { return ast.find(j.Program).filter(p => createMergeProperty(p)); } else { return ast; diff --git a/lib/init/transformations/other/other.test.js b/lib/init/transformations/other/other.test.js index 69437af2ca4..7ef7ed04e7d 100644 --- a/lib/init/transformations/other/other.test.js +++ b/lib/init/transformations/other/other.test.js @@ -17,3 +17,65 @@ 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..ff5f62eef55 --- /dev/null +++ b/lib/init/transformations/other/parallelism.js @@ -0,0 +1,58 @@ +"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 { Object } webpackProperties - Object containing transformation rules +* @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") { + if (utils.findRootNodesByName(j, ast, "parallelism").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 index cae8d3a51dc..b2a4bc72536 100644 --- a/lib/init/transformations/other/profile.js +++ b/lib/init/transformations/other/profile.js @@ -13,19 +13,74 @@ const utils = require("../../../utils/ast-utils"); * @returns ast - jscodeshift API */ -module.exports = function(j, ast, webpackProperties, action) { - if (webpackProperties && action === "init") { - return ast - .find(j.ObjectExpression) - .filter(p => - utils.isAssignment( - j, - p, - utils.pushCreateProperty, - "profile", - webpackProperties - ) - ); +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..f123ba10129 --- /dev/null +++ b/lib/init/transformations/other/recordsInputPath.js @@ -0,0 +1,99 @@ +"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 { Object } webpackProperties - Object containing transformation rules +* @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 + ) { + 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..926005354ee --- /dev/null +++ b/lib/init/transformations/other/recordsOutputPath.js @@ -0,0 +1,99 @@ +"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 { Object } webpackProperties - Object containing transformation rules +* @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 + ) { + 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..d3cdddbba78 --- /dev/null +++ b/lib/init/transformations/other/recordsPath.js @@ -0,0 +1,88 @@ +"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 { Object } webpackProperties - Object containing transformation rules +* @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) { + return utils.findRootNodesByName(j, ast, "recordsPath").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/utils/ast-utils.js b/lib/utils/ast-utils.js index 38b2f0df837..346d9ce91d0 100644 --- a/lib/utils/ast-utils.js +++ b/lib/utils/ast-utils.js @@ -622,7 +622,9 @@ function createEmptyCallableFunctionWithArguments( j: Ijscodeshit, name: String ): any { - return j.callExpression(j.identifier(name), [j.literal("/* Add your arguments here */")]); + return j.callExpression(j.identifier(name), [ + j.literal("/* Add your arguments here */") + ]); } module.exports = { diff --git a/lib/utils/ast-utils.test.js b/lib/utils/ast-utils.test.js index d234654f0e2..5bda7e1e825 100644 --- a/lib/utils/ast-utils.test.js +++ b/lib/utils/ast-utils.test.js @@ -324,10 +324,9 @@ var a = { plugs: [] } }); describe("createEmptyCallableFunctionWithArguments", () => { it("Should create a empty function with a name", () => { - const ast = j(utils.createEmptyCallableFunctionWithArguments( - j, - "ringoStarr" - )); + const ast = j( + utils.createEmptyCallableFunctionWithArguments(j, "ringoStarr") + ); expect(ast.toSource()).toMatchSnapshot(); }); }); diff --git a/lib/utils/prop-types.js b/lib/utils/prop-types.js index 2fc226b03f4..8fe34e139cf 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -14,5 +14,14 @@ module.exports = new Set([ "watch", "watchOptions", "stats", - "mode" + "mode", + "amd", + "bail", + "cache", + "profile", + "merge", + "parallelism", + "recordsInputPath", + "recordsOutputPath", + "recordsPath" ]); diff --git a/webpack.config.js b/webpack.config.js index f053ebf7976..05ede33cc63 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1 +1,4 @@ -module.exports = {}; +const webpack = require('webpack'); +module.exports = { + recordsPath: path.join(__dirname, 'gradle') +}; From 47de46aaff451efd30e0f017491a5c2575590d62 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 18 Dec 2017 11:14:24 +0100 Subject: [PATCH 061/109] cleanup some conventions --- lib/init/transformations/context/context.js | 3 ++- lib/init/transformations/devtool/devtool.js | 5 +++-- lib/init/transformations/mode/mode.js | 3 ++- lib/init/transformations/node/node.js | 3 ++- lib/init/transformations/other/bail.js | 3 ++- lib/init/transformations/other/parallelism.js | 3 ++- lib/init/transformations/other/recordsInputPath.js | 2 +- lib/init/transformations/other/recordsOutputPath.js | 2 +- lib/init/transformations/other/recordsPath.js | 4 ++-- webpack.config.js | 5 +---- 10 files changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index 00fb0d2240b..3c83cc6ae7a 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -28,7 +28,8 @@ module.exports = function contextTransform(j, ast, webpackProperties, action) { ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "context").size() !== 0) { + const contextNode = utils.findRootNodesByName(j, ast, "context"); + if (contextNode.size() !== 0) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js index 8039dfe83ab..e9759d7f251 100644 --- a/lib/init/transformations/devtool/devtool.js +++ b/lib/init/transformations/devtool/devtool.js @@ -28,8 +28,9 @@ module.exports = function devToolTransform(j, ast, webpackProperties, action) { ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "devtool").size() !== 0) { - return utils.findRootNodesByName(j, ast, "devtool").forEach(p => { + const devToolNode = utils.findRootNodesByName(j, ast, "devtool"); + if (devToolNode.size() !== 0) { + return devToolNode.forEach(p => { j(p).replaceWith( j.property( "init", diff --git a/lib/init/transformations/mode/mode.js b/lib/init/transformations/mode/mode.js index aabbe83371e..e86fa9bd64b 100644 --- a/lib/init/transformations/mode/mode.js +++ b/lib/init/transformations/mode/mode.js @@ -28,7 +28,8 @@ module.exports = function modeTransform(j, ast, webpackProperties, action) { ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "mode").size() !== 0) { + const modeNode = utils.findRootNodesByName(j, ast, "mode"); + if (modeNode.size() !== 0) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/node/node.js b/lib/init/transformations/node/node.js index 512e72a2ca1..6f5a820a287 100644 --- a/lib/init/transformations/node/node.js +++ b/lib/init/transformations/node/node.js @@ -24,7 +24,8 @@ module.exports = function nodeTransform(j, ast, webpackProperties, action) { .find(j.ObjectExpression) .filter(p => utils.isAssignment(null, p, createNodeProperty)); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "node").size() !== 0) { + const nodeNode = utils.findRootNodesByName(j, ast, "node"); + if (nodeNode.size() !== 0) { return ast .find(j.ObjectExpression) .filter(p => utils.pushObjectKeys(j, p, webpackProperties, "node")); diff --git a/lib/init/transformations/other/bail.js b/lib/init/transformations/other/bail.js index d58179d8658..5d4db06d737 100644 --- a/lib/init/transformations/other/bail.js +++ b/lib/init/transformations/other/bail.js @@ -28,7 +28,8 @@ module.exports = function bailTransform(j, ast, webpackProperties, action) { ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "bail").size() !== 0) { + const bailNode = utils.findRootNodesByName(j, ast, "bail"); + if (bailNode.size() !== 0) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/other/parallelism.js b/lib/init/transformations/other/parallelism.js index ff5f62eef55..d288af153f9 100644 --- a/lib/init/transformations/other/parallelism.js +++ b/lib/init/transformations/other/parallelism.js @@ -33,7 +33,8 @@ module.exports = function parallelismTransform( ) ); } else if (action === "add") { - if (utils.findRootNodesByName(j, ast, "parallelism").size() !== 0) { + const parallelismNode = utils.findRootNodesByName(j, ast, "parallelism"); + if (parallelismNode.size() !== 0) { return ast .find(j.ObjectExpression) .filter(p => diff --git a/lib/init/transformations/other/recordsInputPath.js b/lib/init/transformations/other/recordsInputPath.js index f123ba10129..15de524f24e 100644 --- a/lib/init/transformations/other/recordsInputPath.js +++ b/lib/init/transformations/other/recordsInputPath.js @@ -72,7 +72,7 @@ module.exports = function recordsInputPathTransform( }); } else if ( recordsInputPathNode.size() !== 0 && - webpackProperties.length + webpackProperties.length > 0 ) { return utils .findRootNodesByName(j, ast, "recordsInputPath") diff --git a/lib/init/transformations/other/recordsOutputPath.js b/lib/init/transformations/other/recordsOutputPath.js index 926005354ee..6f692a563fe 100644 --- a/lib/init/transformations/other/recordsOutputPath.js +++ b/lib/init/transformations/other/recordsOutputPath.js @@ -72,7 +72,7 @@ module.exports = function recordsOutputPathTransform( }); } else if ( recordsOutputPathNode.size() !== 0 && - webpackProperties.length + webpackProperties.length > 0 ) { return utils .findRootNodesByName(j, ast, "recordsOutputPath") diff --git a/lib/init/transformations/other/recordsPath.js b/lib/init/transformations/other/recordsPath.js index d3cdddbba78..7da8d4a0a84 100644 --- a/lib/init/transformations/other/recordsPath.js +++ b/lib/init/transformations/other/recordsPath.js @@ -64,8 +64,8 @@ module.exports = function recordsPathTransform( }); return ast; }); - } else if (recordsPathNode.size() !== 0 && webpackProperties.length) { - return utils.findRootNodesByName(j, ast, "recordsPath").forEach(p => { + } else if (recordsPathNode.size() !== 0 && webpackProperties.length > 0) { + return recordsPathNode.forEach(p => { j(p).replaceWith( j.property( "init", diff --git a/webpack.config.js b/webpack.config.js index 05ede33cc63..f053ebf7976 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,4 +1 @@ -const webpack = require('webpack'); -module.exports = { - recordsPath: path.join(__dirname, 'gradle') -}; +module.exports = {}; From 285846a4cb1f976edcdb36629cf247d8017ff956 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 18 Dec 2017 13:19:58 +0100 Subject: [PATCH 062/109] add JSdoc & documentation --- .eslintignore | 1 + .npmignore | 1 + .travis.yml | 4 - docs/AddGenerator.html | 201 + docs/InitGenerator.html | 201 + docs/LoaderGenerator.html | 181 + docs/PluginGenerator.html | 181 + ...0for%20various%20of%0Afeaturesmodule_.html | 130 + docs/commands_add.js.html | 67 + docs/commands_init.js.html | 72 + docs/commands_migrate.js.html | 168 + docs/commands_remove.js.html | 67 + docs/commands_update.js.html | 67 + docs/fonts/OpenSans-Bold-webfont.eot | Bin 0 -> 19544 bytes docs/fonts/OpenSans-Bold-webfont.svg | 1830 +++++ docs/fonts/OpenSans-Bold-webfont.woff | Bin 0 -> 22432 bytes docs/fonts/OpenSans-BoldItalic-webfont.eot | Bin 0 -> 20133 bytes docs/fonts/OpenSans-BoldItalic-webfont.svg | 1830 +++++ docs/fonts/OpenSans-BoldItalic-webfont.woff | Bin 0 -> 23048 bytes docs/fonts/OpenSans-Italic-webfont.eot | Bin 0 -> 20265 bytes docs/fonts/OpenSans-Italic-webfont.svg | 1830 +++++ docs/fonts/OpenSans-Italic-webfont.woff | Bin 0 -> 23188 bytes docs/fonts/OpenSans-Light-webfont.eot | Bin 0 -> 19514 bytes docs/fonts/OpenSans-Light-webfont.svg | 1831 +++++ docs/fonts/OpenSans-Light-webfont.woff | Bin 0 -> 22248 bytes docs/fonts/OpenSans-LightItalic-webfont.eot | Bin 0 -> 20535 bytes docs/fonts/OpenSans-LightItalic-webfont.svg | 1835 +++++ docs/fonts/OpenSans-LightItalic-webfont.woff | Bin 0 -> 23400 bytes docs/fonts/OpenSans-Regular-webfont.eot | Bin 0 -> 19836 bytes docs/fonts/OpenSans-Regular-webfont.svg | 1831 +++++ docs/fonts/OpenSans-Regular-webfont.woff | Bin 0 -> 22660 bytes docs/generate-loader_index.js.html | 68 + docs/generate-plugin_index.js.html | 68 + docs/generators_add-generator.js.html | 408 + docs/generators_init-generator.js.html | 464 ++ docs/generators_loader-generator.js.html | 109 + docs/generators_plugin-generator.js.html | 90 + docs/generators_utils_entry.js.html | 141 + docs/generators_utils_module.js.html | 69 + docs/generators_utils_plugins.js.html | 64 + docs/generators_utils_tooltip.js.html | 107 + docs/generators_utils_validate.js.html | 68 + docs/generators_webpack-generator.js.html | 128 + docs/global.html | 7032 +++++++++++++++++ docs/index.html | 65 + docs/index.js.html | 105 + docs/init_index.js.html | 116 + ...it_transformations_context_context.js.html | 106 + ...ransformations_devServer_devServer.js.html | 140 + ...it_transformations_devtool_devtool.js.html | 105 + docs/init_transformations_entry_entry.js.html | 136 + ...ransformations_externals_externals.js.html | 160 + docs/init_transformations_index.js.html | 199 + docs/init_transformations_mode_mode.js.html | 106 + ...init_transformations_module_module.js.html | 84 + docs/init_transformations_node_node.js.html | 95 + docs/init_transformations_other_amd.js.html | 135 + docs/init_transformations_other_bail.js.html | 106 + docs/init_transformations_other_cache.js.html | 139 + docs/init_transformations_other_merge.js.html | 98 + ..._transformations_other_parallelism.js.html | 111 + ...init_transformations_other_profile.js.html | 139 + ...sformations_other_recordsInputPath.js.html | 151 + ...formations_other_recordsOutputPath.js.html | 151 + ..._transformations_other_recordsPath.js.html | 140 + ...init_transformations_output_output.js.html | 93 + ...formations_performance_performance.js.html | 101 + ...it_transformations_plugins_plugins.js.html | 101 + ...it_transformations_resolve_resolve.js.html | 96 + docs/init_transformations_stats_stats.js.html | 106 + ...init_transformations_target_target.js.html | 98 + ...ransformations_top-scope_top-scope.js.html | 80 + docs/init_transformations_watch_watch.js.html | 84 + ...transformations_watch_watchOptions.js.html | 80 + ...et%20of%20all%20accepted%20properties.html | 122 + docs/scripts/linenumber.js | 25 + docs/scripts/prettify/Apache-License-2.0.txt | 202 + docs/scripts/prettify/lang-css.js | 2 + docs/scripts/prettify/prettify.js | 28 + docs/styles/jsdoc-default.css | 358 + docs/styles/prettify-jsdoc.css | 111 + docs/styles/prettify-tomorrow.css | 132 + docs/utils_ast-utils.js.html | 694 ++ docs/utils_copy-utils.js.html | 108 + docs/utils_defineTest.js.html | 156 + docs/utils_modify-config-helper.js.html | 91 + docs/utils_npm-exists.js.html | 74 + docs/utils_npm-packages-exists.js.html | 97 + docs/utils_package-manager.js.html | 128 + docs/utils_prop-types.js.html | 85 + docs/utils_resolve-packages.js.html | 119 + docs/utils_run-prettier.js.html | 95 + jsdoc.json | 10 + lib/commands/add.js | 10 +- lib/commands/init.js | 19 +- lib/commands/migrate.js | 15 +- lib/commands/remove.js | 8 + lib/commands/update.js | 8 + lib/generators/add-generator.js | 33 +- lib/generators/init-generator.js | 11 +- lib/generators/utils/entry.js | 9 + lib/generators/utils/module.js | 8 + lib/generators/utils/plugins.js | 10 + lib/generators/utils/tooltip.js | 9 + lib/generators/utils/validate.js | 8 + lib/index.js | 21 +- lib/init/index.js | 18 +- lib/init/transformations/context/context.js | 21 +- .../transformations/devServer/devServer.js | 21 +- lib/init/transformations/devtool/devtool.js | 21 +- lib/init/transformations/entry/entry.js | 21 +- .../transformations/externals/externals.js | 21 +- lib/init/transformations/index.js | 18 +- lib/init/transformations/mode/mode.js | 21 +- lib/init/transformations/module/module.js | 21 +- lib/init/transformations/node/node.js | 21 +- lib/init/transformations/other/amd.js | 21 +- lib/init/transformations/other/bail.js | 21 +- lib/init/transformations/other/cache.js | 21 +- lib/init/transformations/other/merge.js | 21 +- lib/init/transformations/other/parallelism.js | 21 +- lib/init/transformations/other/profile.js | 21 +- .../transformations/other/recordsInputPath.js | 21 +- .../other/recordsOutputPath.js | 21 +- lib/init/transformations/other/recordsPath.js | 21 +- lib/init/transformations/output/output.js | 21 +- .../performance/performance.js | 21 +- lib/init/transformations/plugins/plugins.js | 21 +- lib/init/transformations/resolve/resolve.js | 21 +- lib/init/transformations/stats/stats.js | 21 +- lib/init/transformations/target/target.js | 21 +- .../transformations/top-scope/top-scope.js | 21 +- lib/init/transformations/watch/watch.js | 21 +- .../transformations/watch/watchOptions.js | 21 +- lib/utils/ast-utils.js | 323 +- lib/utils/defineTest.js | 16 +- lib/utils/modify-config-helper.js | 12 +- lib/utils/npm-exists.js | 17 +- lib/utils/npm-packages-exists.js | 17 +- lib/utils/package-manager.js | 48 +- lib/utils/prop-types.js | 7 + lib/utils/resolve-packages.js | 32 +- lib/utils/run-prettier.js | 17 +- package.json | 6 +- test/BinTestCases.test.js | 62 +- test/binCases/config-name/found-many/stdin.js | 4 +- test/binCases/env/complex/index.js | 2 +- test/binCases/errors/issue-5576/stdin.js | 4 +- test/js/bin/errors/parse/null.js | 157 +- yarn.lock | 77 +- 150 files changed, 28116 insertions(+), 643 deletions(-) create mode 100644 docs/AddGenerator.html create mode 100644 docs/InitGenerator.html create mode 100644 docs/LoaderGenerator.html create mode 100644 docs/PluginGenerator.html create mode 100644 docs/Tooltip%20object%20that%20consits%20of%20tooltips%20for%20various%20of%0Afeaturesmodule_.html create mode 100644 docs/commands_add.js.html create mode 100644 docs/commands_init.js.html create mode 100644 docs/commands_migrate.js.html create mode 100644 docs/commands_remove.js.html create mode 100644 docs/commands_update.js.html create mode 100644 docs/fonts/OpenSans-Bold-webfont.eot create mode 100644 docs/fonts/OpenSans-Bold-webfont.svg create mode 100644 docs/fonts/OpenSans-Bold-webfont.woff create mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.eot create mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.svg create mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.woff create mode 100644 docs/fonts/OpenSans-Italic-webfont.eot create mode 100644 docs/fonts/OpenSans-Italic-webfont.svg create mode 100644 docs/fonts/OpenSans-Italic-webfont.woff create mode 100644 docs/fonts/OpenSans-Light-webfont.eot create mode 100644 docs/fonts/OpenSans-Light-webfont.svg create mode 100644 docs/fonts/OpenSans-Light-webfont.woff create mode 100644 docs/fonts/OpenSans-LightItalic-webfont.eot create mode 100644 docs/fonts/OpenSans-LightItalic-webfont.svg create mode 100644 docs/fonts/OpenSans-LightItalic-webfont.woff create mode 100644 docs/fonts/OpenSans-Regular-webfont.eot create mode 100644 docs/fonts/OpenSans-Regular-webfont.svg create mode 100644 docs/fonts/OpenSans-Regular-webfont.woff create mode 100644 docs/generate-loader_index.js.html create mode 100644 docs/generate-plugin_index.js.html create mode 100644 docs/generators_add-generator.js.html create mode 100644 docs/generators_init-generator.js.html create mode 100644 docs/generators_loader-generator.js.html create mode 100644 docs/generators_plugin-generator.js.html create mode 100644 docs/generators_utils_entry.js.html create mode 100644 docs/generators_utils_module.js.html create mode 100644 docs/generators_utils_plugins.js.html create mode 100644 docs/generators_utils_tooltip.js.html create mode 100644 docs/generators_utils_validate.js.html create mode 100644 docs/generators_webpack-generator.js.html create mode 100644 docs/global.html create mode 100644 docs/index.html create mode 100644 docs/index.js.html create mode 100644 docs/init_index.js.html create mode 100644 docs/init_transformations_context_context.js.html create mode 100644 docs/init_transformations_devServer_devServer.js.html create mode 100644 docs/init_transformations_devtool_devtool.js.html create mode 100644 docs/init_transformations_entry_entry.js.html create mode 100644 docs/init_transformations_externals_externals.js.html create mode 100644 docs/init_transformations_index.js.html create mode 100644 docs/init_transformations_mode_mode.js.html create mode 100644 docs/init_transformations_module_module.js.html create mode 100644 docs/init_transformations_node_node.js.html create mode 100644 docs/init_transformations_other_amd.js.html create mode 100644 docs/init_transformations_other_bail.js.html create mode 100644 docs/init_transformations_other_cache.js.html create mode 100644 docs/init_transformations_other_merge.js.html create mode 100644 docs/init_transformations_other_parallelism.js.html create mode 100644 docs/init_transformations_other_profile.js.html create mode 100644 docs/init_transformations_other_recordsInputPath.js.html create mode 100644 docs/init_transformations_other_recordsOutputPath.js.html create mode 100644 docs/init_transformations_other_recordsPath.js.html create mode 100644 docs/init_transformations_output_output.js.html create mode 100644 docs/init_transformations_performance_performance.js.html create mode 100644 docs/init_transformations_plugins_plugins.js.html create mode 100644 docs/init_transformations_resolve_resolve.js.html create mode 100644 docs/init_transformations_stats_stats.js.html create mode 100644 docs/init_transformations_target_target.js.html create mode 100644 docs/init_transformations_top-scope_top-scope.js.html create mode 100644 docs/init_transformations_watch_watch.js.html create mode 100644 docs/init_transformations_watch_watchOptions.js.html create mode 100644 docs/module-A%20Set%20of%20all%20accepted%20properties.html create mode 100644 docs/scripts/linenumber.js create mode 100644 docs/scripts/prettify/Apache-License-2.0.txt create mode 100644 docs/scripts/prettify/lang-css.js create mode 100644 docs/scripts/prettify/prettify.js create mode 100644 docs/styles/jsdoc-default.css create mode 100644 docs/styles/prettify-jsdoc.css create mode 100644 docs/styles/prettify-tomorrow.css create mode 100644 docs/utils_ast-utils.js.html create mode 100644 docs/utils_copy-utils.js.html create mode 100644 docs/utils_defineTest.js.html create mode 100644 docs/utils_modify-config-helper.js.html create mode 100644 docs/utils_npm-exists.js.html create mode 100644 docs/utils_npm-packages-exists.js.html create mode 100644 docs/utils_package-manager.js.html create mode 100644 docs/utils_prop-types.js.html create mode 100644 docs/utils_resolve-packages.js.html create mode 100644 docs/utils_run-prettier.js.html create mode 100644 jsdoc.json 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/.npmignore b/.npmignore index 8ba3247df58..9e98340ece3 100644 --- a/.npmignore +++ b/.npmignore @@ -12,3 +12,4 @@ __testfixtures__ *.input.js types.js *.spec.js +docs diff --git a/.travis.yml b/.travis.yml index 2d1bce4e692..8294398d524 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,6 @@ sudo: false notifications: email: false -before_install: -- yarn global add eslint -- yarn global add eslint-plugin-node -- yarn global add eslint-plugin-flowtype before_script: - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start diff --git a/docs/AddGenerator.html b/docs/AddGenerator.html new file mode 100644 index 00000000000..2840e15a5b0 --- /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 Mon Dec 18 2017 13:12:38 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..03e0506e8ba --- /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 Mon Dec 18 2017 13:12:38 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..a18649f8f04 --- /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 Mon Dec 18 2017 13:12:38 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..26496645e79 --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + \ No newline at end of file diff --git a/docs/Tooltip%20object%20that%20consits%20of%20tooltips%20for%20various%20of%0Afeaturesmodule_.html b/docs/Tooltip%20object%20that%20consits%20of%20tooltips%20for%20various%20of%0Afeaturesmodule_.html new file mode 100644 index 00000000000..522594d804f --- /dev/null +++ b/docs/Tooltip%20object%20that%20consits%20of%20tooltips%20for%20various%20of%0Afeaturesmodule_.html @@ -0,0 +1,130 @@ + + + + + JSDoc: Module: Tooltip object that consits of tooltips for various of +features + + + + + + + + + + +
+ +

Module: Tooltip object that consits of tooltips for various of +features

+ + + + + + +
+ +
+ +
+ +
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Source:
+
+ + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:07 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..5d6c2438b4b --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_init.js.html b/docs/commands_init.js.html new file mode 100644 index 00000000000..77dde9835ee --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_migrate.js.html b/docs/commands_migrate.js.html new file mode 100644 index 00000000000..12a8f26dbff --- /dev/null +++ b/docs/commands_migrate.js.html @@ -0,0 +1,168 @@ + + + + + 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 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}`));
+				}
+			});
+			inquirer
+				.prompt([
+					{
+						type: "confirm",
+						name: "confirmMigration",
+						message: "Are you sure these changes are fine?",
+						default: "Y"
+					}
+				])
+				.then(answers => {
+					if (answers["confirmMigration"]) {
+						runPrettier(outputConfigPath, result, err => {
+							if (err) {
+								throw err;
+							} 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;
+		});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_remove.js.html b/docs/commands_remove.js.html new file mode 100644 index 00000000000..425ed0023db --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/commands_update.js.html b/docs/commands_update.js.html new file mode 100644 index 00000000000..a5f38e7cc39 --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/fonts/OpenSans-Bold-webfont.eot b/docs/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..5d20d916338a5890a033952e2e07ba7380f5a7d3 GIT binary patch literal 19544 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1205787b0ed50db71ebd4f8a7f85d106721ff258 GIT binary patch literal 22432 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 ig3W + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000000000000000000000000000000000000..ed760c0628b6a0026041f5b8bba466a0471fd2e0 GIT binary patch literal 23048 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000000000000000000000000000000000000..ff652e64356b538c001423b6aedefcf1ee66cd17 GIT binary patch literal 23188 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e786074813a27d0a7a249047832988d5bf0fe756 GIT binary patch literal 22248 zcmZsh1B_-}@aEgLZQHi(Y1_7KW7@WDOqPg|;+~g#c zTn|MF2_RsgpQU~Rg!-RNT>BsYzy1HaBqY@2fq;N3epI~wFj1RzkQ5V__|b-ce1ac{ zfboIAB$X6Zf3!m&Ah2Q}Am}`LXG{@E)n6h&KoF5XF+o366qrO7DylNF00BY5{rLJn z7#4V@A(_}2IsRz2Klw#KKp-%vH*Cr#?yf{Xb&!5yn10}+rURcbceJqk(S&|_y#3h3 z7+7y%3nQ1GTm-(K7^wdZl7+38`HvGnn`na|ZCO>gXKYf5#e%Pm@MS-(3 z^8E2tq<-><{sR;j#M$1+&g@6C{E0dHIb*DcNj9~kgNrK=keb?$_WDx~4Q1c$gXgoLPPM$A|b23vuQ89}D~g&=h~s?0Y}FgUqqZGapfmNBxwIuVFm(k ze2_5J1XP7GNR!Ub>HZ>jTD#<+>v|6A@Ps=rubqHZd2a9KgyVR&^O181UPYR$*uv^8jHMb|3VJelk8s&^2FN|ruFH*b0P-=Pxx z)n&d4)334G1?Ye~Q~-z$@yO0)EPiZm>;@5h&oDPs1QBS&9@GP>1JDlZFdytO5p0Mf z0mF?w6vH4nRycA8NUE&3+j`oFx2aVo;#l_bC3x_^QC zOIwCIWC%j+h!TDPjSlof`zj7nbHRVUC^89-V-ah|_Am14(ubnMne6_`PxvYvvpOVTMneb_yNnzE-NHsp$uk~E4o=th_|)1p<|5PC5H40YZHHZK-0b~`fdbVqJ0;h^LkIPchf2cz+yFG$aT z@DGbUJX0g2nIZ6P_yO?_upuT84MViLL9EyzcI!?A&RvR4?ajT7?&c*9@UShNC>D%g zbkUyp_`i6o+|@2C0Lra`zc3u!ksLzWwU(G7!V%!{ad_BVPb}tVi}J+a_!{n}qp>W~|28eomjC7^3R6XCBh(RU@wByCnk>!cCyG+VX=Bte zYU%#}!v9H8K*;?#<#4raxn*02CxZ3@H1hlPE*zzH|+~{B8@12|ap3}yg zAn`i=x1~J2YI*7A(S3-RGo}N{t(H0vi%hWoWf7SK=H3~n^NR^NGyzFG!35uS?VmGs z#O~2+m3{oxh>~A|GwHKj@^xCC#?&r*Wd@ku3Sl}MJ}=oDv{v)e=O*)`catXcw6a6> zIjNhA|EiRtXtcUS98TojtJQHI(4JQ*w%MFEdJ5Egiqjt%+9a|YTLDGxJw*yNDujmh z)?FRVkId@D`hL}`kNE24COmcC*q>vkgmXm55o|RadVe`=#EQN1zdKBpc;j2o)BKNC zG0P(>k~Ou}`%wH4-VYVy!*$z!?x_E{!;B-1#|#afobI8Ge#_L+O&BRjGs;Yx&rM3x zjhi$W8Uj}ty?hf&8Ja*dF}=RMQ!zn-y}pA;H&BhK{mq$r5Q9KKf{oSc_r?k$iG}kv z%mTM;MhZa-0U6?jFo#ft2ncUC1Vrq?gQEU^#*umh`o+TH2?A7PfrI^Xm;QGK^F+fX zBSSMoqudeess4T{#KKHQmJ;UPJwxMtb8{1OGb3YTum1jr?I2;|te_xa&`4}J{E*xr zv}*^9ww3@ZI5<3Mxi1*F*n44Tx~H0rz!VTrRv|@MiU!hiGAPzM z)@~MdW*``9Cx{_ZV?$G;i=(sC{mtDiEEEiMOk{MFtdxxOx>gk zSUl#;Xsk>n=^=XQszVLN8Ya#Jk-0kWM3t3pZ+oPx4x4{`?pGATLnQP00v=u-aleR#fDQRn(B-T3VH;M z;RhWOM2;`%!_}Jo3IIKf_y_>qW9?{w0RiIlM#A+3eqSd>6Z?Iw#)o+F0^cf)3N zDwrP&rN?5jq8V`~*29CU1=A~`bN$Cl_^#D=MBQ@yKq^@K9G@PVmbb`3DS17UUEQwR zgB@ccR;mc<6vv}>=S-BkJgRak5QW>h_pdQ&fXIGKeV^J2wKZ96+?JC!MOJslJ+%h4 zCi&JGsk)qImX-WbIA^f9LxU1P1d!@slSWa*6O?Y@3VETD2BF3d<4QFTN2!`8N~=OJ zlZntTPK?ZkP~pINtQaclB&4~*o9!%Zg)l5}P9@cC)VDk8a^ksZf|Ra7y|CktZQN^o zQ?3%CktiemUZdt##(_{7QHjuwDjt&a-;!jhtN~{+L!+f}Lma-mD&J^}JS|+jbyKcp zQ(c~RlbE+nh?m3{^BUt&p!`=h(-y(FDyLlQJ~G_~n#t@)P0l*+hXU-HA(dMVskz(; zQ)0hFh;EUe07{m$PW8(R=2F>#sM*|tk)dqs(p3B?;o)BBXllm3``+>70q2HM^Shfm z=g*0S5?lWK%5)*cruPOap=EkReE%|C$%xU3v;k>9XWUn2!*+MJfb^*l(zc5oy z6I@_r`Z&~4Tf+{b#lG-R8a3V(Nqk<7ito0vLKA@Yy&T1eH&z;zch#h;i|S#u)poOY z>Ta;5&3YDI`fv9%% zVtRy)z*h_1cGTi))g8RZm+i%`Idzga1P(TF&jWxVtp< z>@d>ppQ%o3ICIHhOwl>5v{!ta`vE5TFZJ!11?yK|lsnT^M^Vek6@EDPP-=Ov$cR-n zY8k}Vl;R7dh;}qH0>_CESncrP4g@zuYn$QILT@ZwSmN-)mL8-ADQZ3Rot6oYTY_pE zz=`L6^o=VicT}XJQ|c#`XH|8vzbmAjezSe0kxc5@slb8i#d({bnmSJ9!Nmyu@&NmE zr-Z`D1L|v*<`yo3_OlQoI-&fW)URpgPUZ=$I5YXz>_CRU6AoCl+O~ZW@0H0d(Z4*9 zll@%w33A-q4b1w|TqeglzX1j9ak{rIWJm4dK>^1?7il%Y-WDuKCcxaVI74fLhX_M% zaE#|S0dfl8eekd`hgz4GIn%0yb&0VweNJdNY=3F5=j zu<(A@2HXV1`td-Me{ zI_AYB-$W}FhJ_e0o+R# zu}kX=W$X-v;%pDfM-j0L%?)OdEP4}{SdE(5_fLc)u($byLdm)uB8CGaGtmb1NdPm= z&k%V%0wdAe^zbe8Ed^HgbDKmZpdoUJFm5wLDPVt4C7>;G$$*aJG4r<6o$O!gfXnv$ zK>n3c?ayTMGm!v)e*+pClbdwnc_Zj&Vg zoqc~>63J~>*HxdNRfQ|5NI>OM#gTz1OQjzNxn4HwAftZeK6lgk0W8{uZguXu`vub0 zM!V3t8%t;H4fEga2(o8Q?o;N`=-~+#vPu#$^XO3(k-((eba@~@OM9R=W63ISU$A3| zfc8p5RSJ`!f@P^>zE-L zfs7xqH~Z2or}b&!Iu+CtIK))LB}?KHDN-QdG6fuPQ%5%{$W(C!W7UTx!(hIY0t_5~ z@h_cuY-{_B9iEM98GWtOJ-8UJ=+LT-J8*U*? zPW3>S2*!yhD!19sO8Pbt12uIj7NXJgrtWZ$oeCsTN-gCq(US=63_AmvDpE=XqrMDD zm~3!vG7lMyC76D--aUT^(U+Tpw2ygfPpP#Tzw z$44<#KlWvtc(CKqnhU8!Kna3>pZoOI8Ev)%p5Jiu*{f={`DVB8URD1WH|MMY(0e*R zzTcHjRw^4eJ)$ZWGT3HGr~#MFqJI0k*4>Cj*zD{E^_r1-<~8TP5;k~ir=keIo_ zn*v6uM`V~7DIrg?eTm#<%o{PXIL>s71X;`WAb4ceXzPrYj9giy3Q4pxd7@dmZd!8k zB7J!_DLp+qJ^gex4o32&qs05Y?bc#XWz%6wPvxmpz91vc%jgP1e%1gi;ZhtgpV37J z4_A-91eII|nU6)&Y zz3!wb8hAq=^6Bqi*yzu3fe`?SUQ)32Fu4Qk7L z`x|N+oVB~%rT(Z-tVPTYz`^y`5S^q(QQHW-7GvHhD3wOvxOo9Cpaow*D_}?Nr0q6n z9WLW3d*$596R1}xR%_cJ+&xJusal(KaEQ(vRhtUg!wig?pqtjob6Q_4 ztpUCx!jHArozN&Cu0&a?VwRpeg=x(31!fLw`guS*o#Q!Oy#7k-qquDj*oMWloTJss zD!lDeyF*&XonFn1&MvsM<4Vq1_#v8i{_br_Z4+J%hXzDgb{r1p3~muE>gm9Ia)N^m zK%c!D{xoq^-fYyau3rcrp@-fg{*CH>?#r;~4=(tcH%2BLCmsqcL-k&a9l%4-XG+4W zBq6}*JgyIfy%$3HfPeP7UHW-RYbj@?{}c={8{Q^%yQMmw13nqi}YfxaMbnU?~=&EhEX}?q2+W?;Jp6n<-Xgu z@j_{Q*Vp@f_U$UGI2ZIsrgrc-OTsvo|`gfwB; z(H3*?K|#_0Ki}}1YuQdkEXXOdrI5fx+?!ut=Q&vFH%q@_JA0^Psb&5{=&xntl`ME= zXahZ1EuPQj`BCO~EK#0H?0MupDabeZAQsOSlqlh7SI}9auAa;(Tnk|VH09pMRJbiA zC2(B=W!p@I$+k`X7Qffta_<|~=dmuvn)$EyvNo}$ zRl*owvJQWW)8Z$wGAPT;xp&Fkvpp)iMzB&L;etoFX&E&+`_W*$r&6zlg{I&y3TR!0 z`Q!;b1${&@M%=qchdD87Z1ESXmYad*=PN+HU%4JvbL-jXeEIk7NI5R&C4cL|)v1s9 zzxa>6vUWlA(QP*(h4}6Jxv1t;RG#CWo8c_@19!fLo3BCP(pB}|3Df*IzHC~2k*^Ku zJispq5|Jnp)kKz9=na8Q8|QQsU^62lqbH`WMf1^GQxV-BU(!OI2OrxN5JnsgC;Q2@ zz|=hLxgxtbHf~BtZNs`Yl%uq0XIU`Ya0W_WM2IBpK6TQ*8mf0N=UQzHL=Y#f-+Jbz z=}IW@AP?fUO1@$hl61q!W9$S9;O!tt7^z&BiF?svC`7`-v`LgC8*?q~w{cO+10bmc zY)|<}g?>K%Z@A=(dA(Py4uS!nZ9Z=gMfKnuN47}j{{9yiVHZ>5;Oo~Hp8G-)5Pq(@ z1?0*JBWWag`kREzWVtC7BPvCVXwf9+QWUU0YXQ!n7xU~l(2 zh05vNlM~OPAR#bGCjTh48Q(fmF2b~Aax`U*>eLRbErBV-U2DTlbAe!+STzdY?bt^U zK`*4wRhm2&!8@1*k|Gu8Q;h=8=oBtPy#+a(o}HJCMTjh6OeA5hvcH{C z*@3Ky#>A)x1_H~Cg~&nztYY>Te2aeZ3$jfPpAnup*axUM;zY=pSZeV>qI( z&tG1HkEf%afc$DNPJ+!pUJEYCqkQCW3j&K6_>tA|vBAZpdOekT8Jx&7 zY;1=fr-OS4!h~3%8{*R|Jq3}vB6Ythd`)G}RX}JG*;%GyXK4_|Z({f_z(vk^=2HKR z4JTD#`7vM7jEb(Xd21UW`*CZ|r4yP@ynws~%ROkm?y`iO*kO}gSb51(0m0hRgeKH4 zmRTp@u!JraX?Uv6o~oJ8!>uYJw-(X?;|5JghxwOFjVQvCr zY6&H$eFT(Pa`P(pkqFD{!Kr+e|5xc3hX6OtKXUOp7 znuXKkkO%7CI?k`HtsSnFEU_uNM+eW0B@f0m5;%G?+pXsQro`Z*=BPdo1n=vLd&v4l8CF9 zV0W^2#C>wZ6LuwgC4;gdzJnEW$w%`Cx|<*ziZIA8oL^|;)u$eS9zgDb{-waB@(FktCfk<#uJ+(_hdS1{njaOdGRm-aTahyQpxjENsLmov z8xaM?hwMx5znb589ckN`8NvohPx0`+TpSG(fs@XHtkS=dv2_;+>}jRSG_W{vk%;@0 zZ@}K>Awd?g8X)UPJAF&&uHLY;p{f^t+g(bhfH+ z_to=UD666OD1w&l3PQn+_eu*;j~ci&o%e5p2ghlI?uqR6@VLB68l70_yXkLYiR=;i z;)XLh7SH-S-FYan(WMBQ7o*#t6iHALZm?1bR>vjEv@qM^ShrJ6ZuKBfqn~j38Q-2M zFaj2lNhGIAq(pveA?)v_3Pnug#qAYw0!Ds|p?z|sReA|mK;un~S>-|224H>S&#n9ujyxHe#H=^^v^jer7uF@a{Km!Ia7QwgLbiD;&-aii0 z;>vEqC5*al^N7~_a#vZvFkg*k&G&#d?&U@~Kh`(XJYBcsi3@jRaa-su)fB9Cc6m-9 zyp%i|VT^?!P&>5lO7)g{i^^{^D;qH4hOjh?B36W2TnVyH0giZZbB+4Q|Ci&p+ZBKxR=M`+o{4tR) z8>ydcce|0jjAmg45(Y@w+?a4`i0XErsxhoRtZfE97rI6TzY`e{=u)40AD=!QJP_Cx zM%WbvzLrG2b0VBJydG4o$RsZhC3vw&i(`zVl9W)4-vLGb4sGeQa6D6Jy?Z_lzw^>@ z;BhU<7^T&?>OWm2-n}0GeqX*8eE*FQ^ugG@eAa)s-0FO7-S*(Sy?8QeFx=Vk=1ddt zlKl73c_nI~+4axVYx=iad%R`U#j?*4O?*E1Yf6x>ie_AB7((|0w(*6V>Hv&310p_) z)_qh|7GiUoQ)dr%s88VjJBPWX7Po?68k9;%-$vy0`Hf6$xx&6Q`BdO3aJqaEpqxtM zGG_eyW8>YRI4iZ?(m;gd57~t+_4ls9P7V@66T9YAb7O1#&_XB*MO%RaX*`IC1#>)M z(H1|$aDv*7gN0`W zqt=Ie7n&3_m#o8Q_?|o(=wso8=5krCytVyFx|PF(=63~Gx_lIM9}}+c*GVLuR3;rq zZ4Lh8>qx-CK05zs0$!RIW=H5N{au|EC`U}L+ZQun;t!#a559R)onif@dlv&3>+ZKd zE9>e%m)1Q%;JTy2xetFhyiJ)+&uNz-wau8 zz_;-n8KNyGB0nj;Cp4*U^n^6dVm}sk&-2OK8qyMfZqSW0RFfto(H4%!RuO0z%Fv=v z9efGU$11^3VT}E}9Lukj=TQolt?+Q(B^+2FTLir%%CXYR7UXS8C4#EEe7do&8%>D0 z8X2kXO@bZ$qF`l|cS-D{ixA~c>d=STOi(mKND5uy$CKlq##-w&fVfszIjH3pA0`H^ZV+2KFE_@sup#w2(AG zf%xAkB^@mDEe4{uNOazu+hItOCzP4O5@RP`K|%q+rw!O z!H)IkK^I28db11P^EnMk42OIc>&dK9cj>#pN8IYFY6Lv^!-s(T*UGX6@OHMDqqYFX zBM4DbN&q3Em)#8mt#b)&B9r!Ss-ik5SGs+?@ka7gio@1yD+e)Z*$HhjEWX-~i^>NF$HDN;aItgzp zID3c$M{M0Yn<4La`%Z5-VrJTuq!uG;^>2*~$xJ3c=M3cqxKrxhJ?{L@4)xAk#HkvLzEZ9KtnL5ZRQp8LA_wJ)d2*IUIa4 z={O(a*y-P%E}oBPuKa;1u6Mp-HGgfn-h*`9x4Y;d8g8N@IL%dF4L)mc@62pyD?q-I z`6e_u7ah|m$Jk-Xues6EA=5~;r~{Kmu#i!lqr|uu#>F~~NRCR1hcb_I4_H|z=kO!* zbrxMi|s7(SJ zfm%O~{cinj(qFx6cJC1!aedCf>mK&yw7Sky3KZWpO3w5B@;$$*+69r&eaO>v+JoMH zuS>tT>VR=nW0WDlG)doLWM6;x0p6qhw)I1Ps zB=qy(NR&bP@s|5OU^|g8D=7QRDRYEp7H`Ox1eL#rxK&AP5xV5vP45GlGfrW5%hoxK zp&q|{?FO%)QPH^Maa-(z*q7S1bm(|>{8toCUxexQDSyM^moj0>yI$&iOxGp-1Wkd;DP4S#1s#_hlBOW@K@Ua7=rSx$edN?TXaqc7g7 zMR3wls5#UKe>%B5I^jy{aA@hePO4^8wDNTsiG<0{tn(ln7G!)6=4^GH>LhHne_I+- ze?s6n_@j7g)9LdTJ>6tPMJN=RV|yoX0Yq(321Mf!XcF?*qP9%BbhEd<2=X}e>YT@> zk(SFQI}SPY65R+_QCDFpnG0J%Jl?f~W-HJOy2@XtI8dQlVfdMUX@B0r3(fjVFtpn8 zcUsKOb3R{ii|_-yE|*{mW&^>SS`b@c^Yyx4*4GUJj2e*uox~js_qC$S!Y7A9MgY)^ zwTZZzs_nClP2#+Tk(;LZrb+xfu=$`xi$CEB>4fEXZ zhwS{X>qenS7P%$3pdk!6~*{&ra9AUEj!OPDNhKTSn=rtb?3sA+uRSLLo@GdFv zx_^8`QpKtLq-vtOXWZ=(Rckrz@n%>dXh8xdB zrUkb@U()D(2m`FwMHM&oy^X)?;(FyL)9o}H&cAqNh`)LzWy{s&YHKr=i=W3TMKQNk zRWwvo1)3VU0uI^olJ$5bF{M78MvPk(v2IucqH%MXTEq&qM7kyuwu)u6QWo5=;;qrp zu?M_@fy+=*FAvDQU2{)vV+LkXg)P`}a5e(^*L>0izdZ8@qg#jA%~tl96ZoVNA1Ao$ zKh^QEdNl>}x5MA#qelk(W?n?HUjD}Ki|lUn(0FQMbj}iMmd=rKx6Km!j%2Mqv#YKD zGmov(h#CQQn*?wwEM~<-tlEYAdeF2{V6+`&AJX(7Z>H<8L~Zs`E+sK!8!v+RFv=J* zO1@Yp&{w&6HZ;>*D~huZU9&+stg(%>Taq|HiF#(+VUNh`@yr-f_)BGqI~Y&-#~O2q zdu4ErtT7%K7{@G;1=d_e`%;}R%43%?duX7l5`+R-xql`E&sRL+i;~tl@^+_d(Ntq5 z0Un?;%?pd~eEl+erU2hCQ3k9-X-znf2w6+eLh(E9rRL>0HUOa%5u)tNM#>Jt|!C?p`|_6TxQks9@<`VO4#wXVqq-rM!Hx zZmH@qupLwoY&)X9#WSQlEBT%+{PYj}a~gWHih6)ytIzx{!~NbbZ`~t#7cNcU(IbyF zcoZ!Ig4Gui?YWo76tF*wZU&szjXe>H_zTSe^(p~gPG(#S?aJ?Ed+KT{^O$xCa_4(h zZSL6*QIwjX$Y)3q)k{J}{_PMXORXO=>ELbih@khU6UKX|S^H@?xosksM0(VhBWr(} zv(PbRwMIdC7s+dKBlv+Xl#+Q%9V@4fhQBYcz-2q+^=u7XXU7c%eAX}_(iclkHuin!lv@BTG$Wi!8$U#XoKf*| zl4TS&*yF-ok0=ieojDGkIIZt%s?BN}Ff&MeXC=<&@D?kYgLz^5De3e2`(Db^dJtsv z?w(U7)Mx`?bJ9Cy<+RgW255s^{HqGd&%p%@LU~es{b+kQJC@DGtyA=7VmpV$~YN61m@T45ibeRM8 z2d$Fr34ErPihf3i?VB-@H$9{4M%I1aXBxH9e^sClSnkzrcn}4NM$9$(Rw8^7ZQ2%U z>imHtmnU{MmM;xVPQ9wvW(5xVzIs{4YzjcHKz3iyr}#_hjaBrz66~&$M9C&l=-_E) zZvV6}+S^@SnerEAZON#E$$M_$In!Ogg2{>hjBb22)c+VxTGImVD4@%u2 z6>_+gkpDbvAM#T4eaz_iq;0bw%-=+dO8E3wD^CW1|eRuKhFXko2*ZB(PG620YiH01S!m;&$I zNOQYn>t9z8XRi2lzlY(+H^qp?5Qd{*>OUBw55r*fl*FXW#V(zpxMP(asc=W}sj(na zNU$t0o3U9S?I`dAYYC|%GfTA>J-&ZCBg*SedYTaW447Z%A63&1o&hPm`rIuS@uKx} zhy*!JRkQpie>WE`e%*JzTR`;XSH9}&`LCYW@3^hnL}H#BXGXp!TL@*m1EpjD%T0wf z-~sxOOGI4R8=SwZnGH&|5p9O(sLe*?2=wN zqtrZL7Ua;g;kEOc0dfmaB z-)z6s#Tgqwig}yp+hZ&TW}zbpfh<>$F9BjhC|q7fH9*fWInarN6kzY3wu(x)p>DwD za)8UmGawASc|51*Fy+LprKpQT?+6eN(9hyu8z$ZKo;|R+uFhIq`?%x%=3)xSsxSOE zbHMau_w?A=_R2`vIxYE^4{^)=I=rqce_5fsLzefC4xNwLM$pzeJGa62Cu5&m{nR|c zVZCMcjzE>&=cIH6Z<~%!0H==)rR(~4_Y=dJ`k&oGvxV%AbUxEg94k?`CXfx4q^YGU z)T&<~N%XQr#eTo$Y^5xzWB=e&E;7^yZ^W^SvbFL{^6>qt*4AR@7rh>$xxy+8u)&6%W?^H~>bCA^;k(h^y+f}OTS70Tk#)8=idqwdbE1TS$3m;CGJ>b;{}Esk_4!pG`X`&NmCqh0m{ zZ}R>JEUw8Ar2<-2c35iR*mDkg8KpUMw&eyHvlQiVxisa~WpU9j1HYr2IxWNYbCVC3 z%vJ29ZQY0m*Y*{(r$o|XnG-)3_&fsPmZBwy>bCwS7Ylqo$=T)#070;5`qB2#&Qf}$MB z*3uCS(m)9kR>T^O)??H6J|3TQ=SgmBPSUxH zDYz*oY9L)>(@LKFI}>^ZF4)S|Fh!msu|o!NIYC{-7+4@$L>QXJm_EHun$a1!0gssr zY*5_Jyhx(+?v#iJ^VTETbs3jHLTBS4u6V?-T_EL85BA%i~VK#{Txp?m4cO!+RTZQZ6ue{V_?mHA_^9o@mT8L|y!L8aqkVfZHx3Mz?0S9f9a& z0k(3iahK-pGxn*c<_GcF7W6-UWz!ofT5?9onsS(;#=14z$7Yvbmv?slG8qGtvPfO~ z`uyiJyaFDB&V6i!di(sYa>BFo|7r?`kJ(x<8b#cbs8~M4;b>kHsc4PP`#uN7k+kv&&R)!UP$$3y+cjQ#;vTtCJ5#PD+K?l#wUB~rR8_4&Mg?_T2A#Lr zgWMNzf{?cJ}&>|#YYuvTCd+(Pt z;7qb_jsCsPIbXbQCdMkm-?eyks@kwk@-h$_tI@F0wm8=(qQz!%cNO*A9Isp0PJ^uQ z7{tE{6MgKc5`628J9!_Rt2=8WVS|&<8Q}ZXuwpv(BE7Q9N3_*p^>`-9QS;|mIj;Bn zYxs1LGTMbO!03H3+v9Sx=o6-_R5p#M1NbDO8~^h+HVd8zu+$r2u!c_rH_6y4!P2%- zJk(uf&Gc-zc}7+(eWb&?db+H`18Z|h&(zZc#fq!*VgQtO0izW&i#oBvB5RPJX{fe6 zGi|U43NRXGBt;?Fl$<;kj%u>zXr`I4#sG+^cp)iS&oDA3CI&`2O8Ov$b}oYY1WXKE zOl;%&AZqhtD|1kq{lY53flc4UYIy!DfD?+P&aYPc?@F4qFCI9wC=9p>74~N`UEC3E zwum~%U#p?P1wU!%#;X*^ssY3s-B^hN#pZra-Lekvlf_7r=Ig=E$VUGA}D%w zVXm+SCbh^qLzwiAb(m2&Zkph5oqn>2?6Wxps_xVFVq#iyBcnSg^@ObR+A=#aB)s)$l6GV1(yF=YvQKl@}3G3W(B6psOU1Km(^4?Xt zsC?N@=kS-6)O6TOxPW|JK^R7XMC9)e{N|z%+U7$8{g}tWG?} zriZRAO5+?Got7Rb4e*qhs(r&UY-KHls+8Tc@4Xua((PODW3A%S6Vwb=7FK(e=uCI=kb3)ghd-C7bF}DqdFA z7YCY(bd$eE?=qME{OmfteSwrm<{tP;Ax)9MgfEtX(lBja)I<%HIP0ZOg9L(ET!7RO zsxOkv_&MPtk6$8m84p})n{=q{o>P-iumUG>4!P56D%SA0L@-rZi>1;;VK)F<8wa?^ z(0OCuUG+7XDya@V4T`A5@r+aG^`yPX8}oUJ+qRQAt(V%UJ&AZe(6{(HQdiL9DYqw1 zMIP;1*2H`}vSh8Z1IA|YlMWU`O*Dk|Go^VOgG&n>V^V-V%}+Pe9(g;K4Kc&cj$~j> z=9d<-e=C->`9&EP>#FE1lCwyF9R9Q@zg5PihtXY*^_aZplXQ@6by0DwJcuPLwoy@2 zz=ftITno80y<_91Oc-`(4KmG7aaG6j>YrV8fw@p-TMTIK1mr8 zgUTd$4%pZ4E?f2hjefX2C~f2FvXSqh=0w?-hv&LA48yCsRI6u z#;+KXQqZ=I?L&tBPuwY@dXsG~kWqGz9gOK>nY#;7gMy8HE_k8N=)%^3)9?O86Hp&G zeze(Qe*48_-64`$@d=2E&)}YGBSQ+9aE!-cW0>+L!#$Hye8Api+Z0?rCpWVI0|j7Z zd^@Urbc00Yfq&9x8=m`|gFrio;GCQV!U{FT>6+uql&6rooH4BkyFBF!cf!UHqz$kberT==L9GjtR-~Q0?{F zp}0v>6yQC%(rrq}a>jl>9lv-sJJ#&=T$&OWE2*U$y_~#k6B|m9HuchL=ck+`?S`n( zwg@6sKGBsW%G3Y$pN7MX`NEa&kI-ZJOfc?37~MAG&JR-o;J{sh_%>y2g57#rsI^@b zHLK-MsY8cEFY4v_*MG6S;PS1(KGz6bJ0kGw@*VxL6tv4QB&YmSe5p(^E(RW!OPQhx ztcERhi>@qtoq~-QF*mv8n-h`V32p-+_P%Z!h`UyhAb{g^)p#cC2DvWP-=19tpYeJ& zl^WDxM!BZcKSD}-iaEJ$o&CGx_V2cA{E#gNTElLk0Al{qipaGE9g z2X5fUKmPM@d%XRRp1*T@dEUdRyH^E6&N?Pt!~%h9SmmG>hR-|;X#6X^IGbLFkofko z#UTU+(DowTyl=Au{1Pifn|am=!b?9x>Xl>^#Ytwif`2fVTtkb3| z|G*YC^;Fj`xPlBZi7U6Hga=psiQsOT|@+=^|uK&P}dJV3^kE8x%#Un-hk??^x?bh?CYhug4t!^h4sz}>3;shar^q&uKP zPJv=ey4BhVLHET2^1}zh6AN z*OhE}<4fdO9_U{w*FZMHE9|*Xho{e7& z=lRlxLy_xsVt_QM!?}!yso14GDQ5t+EY03?C7q4EXXD{$A}mC5OLNP@xIXW|CoZ$Y zczguK={i2d#E@C5s$(~n~+>${Awf;*MGVz#*F@YiO5m+seK^5aj zoO8C~a8sx2%afg9W=#-&jr1gQdEHy&E@8ZO|47HBJm~*@3(#iY%1_S(ChPOj59$LN zD&L&aRdiM%39nMnQR@)Lkmf0o6gQKl4pxSN;U|zaIzFq}+B%zm=Mo85AQHcERm2pW z7qF(|{hABE#MIvIw0Z?icyqr1lFs$A|Aq|m#p1tfJ1xGp(Yl*DXAE$5ENqZ^XNii} zzXof%D5JdgGi@Kol78Jyd0NyMYQ19ScGH4(t8Jzp)VKRP&{z0zY@_hM0s$8O={9r0 zkMklxvtdZdiR~L0z zeh1fiy*aL!mnib(xFVv6ZV=a6-J=jLe^^LYo)5mEbFJ0?EIkJG({>e7O^y%#olw-{cW<7B#=y!t!A=Yv0P4e zuwen!=pSpn3Iqk3;qxS?rHVG=GB^EtB6k7JkTBQFD2V2no?YqQ+Dq0$O#b!k-!2CJ zKJBr7qIyF6G56={**W)5I-C3UBM(n`ecMZWUfKD=%e1R@PJ183Z@vVfq?khFD~}Gn zuc+sUenXa5EqG9y_RW1yzV+^bljn6k<-PqFbFiFdFQ?4ZnD)!7W?quT{>r`r!iyXkN2}RSVbmejUye_Xhu4_ zsM-4cUF^2dtAN%kGCp3B5y(uiie7OY?+10Wx&YCyaH=Qh2HAX1EiyskhtTYdO_Z)> z*AuY#M$s>qQjE)`T93EduG^X^>?G3qP>YR{Lr9dFk+nX^I*hu<^KQn!HDs~Ri3R? zZ2)nxXcvNZz|8Hy)o`2F$Z(5w@&kvC!AB4`=FWcyw~%9sKgKOFA;$eDaXS`C$gTU5 z;+#Soav{M+D0b$nVb?C$Fy1g<4Lt{dCnX_11VKwMH{&?sKI@2MbELkTgP=oV3(J+4 z0bo%@0;UG7tArWnifoo3#0QVoCG;5~v(+dxn6hLC5p0+c1w*fNB1=S)d5a#OH{izm zvY~@`)oYy461n-RqY2D{#jyDV{iN2I(c&|hDP*ZJ$ZP^hp$Z=(XK9o^c^*7baEDCV zmj;)<{FN&{ZJa}LJY3N(LgHgxDbXoxUeo5ZrFksQZ0HfZd$o1K%celcXcxrJ(LVj= zr@!h0UK13!{;7T1mcu)q71kXJ&UEQhUM8X~_@!khoA3JTZ+14{736hD6&nkUxzCR_xCeC<_Z%mzroa0)I>C>!j^vFqzuQLwUj1h}qnBSJ&^pRLg#;_GlL>S8{YRKYC2_ zSi{`eSs({5@p88wbW3>!HsfwDd3PXu$V7e(&=|-opF;l?m`$4k57E^vqo?;RnxS3L zzJ^#U+zZ!1J*=|n2jG!*@kgunymnkWs_iuV+c_l}O#!>h+|OpbtzcFX1q_Cg_$)dx zqmMO}l%KG+mU31_o}>}HtO zNzG`t-P3-QK6G@`r;pW38#kOT=zZ*AeTehH<2`49=e2(XWO{TrAF;pi#nC-G_a4~3 z=ZLs@{mv-5YK!yErMIjIj&|O?65MR+{_C&#)IH7r?Bf5v{_MA3e*4SoZ2F$G*4|wm zYVXaL{-U38>ScF+p(=(e#F(=Wmd{z}Z@1g^zzPFi@grfj>_G+0-Di>Y>tl3#7|z>l zTRR3Vykn3}Adj!z<8(M!V;bujjCQ-c?9xFmWEZW>YAD;;f8m5_v-^wRmF_OR@iptD z<~d{7k?i&2CxTC2%6m>dYEp1=g7=dRBdv22!K<`FyU9XWEck95KmJDcrEMHsR5ZA} zchO*J*Z3Q57(aIIyfGz%2bZXWhj6;$alKR0TO^iogrG~LXlO?9YwcN1!@zVjw|$gOD<_nGmzhY>SNGl(Byn zBS@Ji_zg6Mr#5sdNh*ob%0sBV5hCjwv=18F$ZlIxAy&4g8K{mTqucnWIH1gALN;1W z)`)P<0lAF>9=F_q6|g%Zts#@G-NqE>E!z1}4Up5Q+XmzhogKoT)0{tITL9 zByPOf44~7?c_kbD)!(27#tWO+UcJ1FH7%9e+I5D1Gh*Pt5fuXlRM2y^^<%3?jvLGS zVlSPO++>&D7fV=IqK$VY+Tc5Gt!%;v2s2J~i~O#}O7`!E@cZfcFIJggvzUwFDDMk3 z&a@pJh7v+Y5!g&3K7Szed83CE4qT~al`!Z-w6f{cj)IFL2`Y?GwYhYV){U24UP>Bb^|f$QZRQ6G&JVipGu+jRRy! zEU}<4_4zIn2#P-66^>#Kt0eqnMUsO5h6j-Jv{X+@azZ?7$+PjXfA$Y8kWSDkLZ5|1 zpRKr@%zZN(sLw+Z!JF?-&o98=?c5tG>4JCXmsxOLqoN3hwSGze+W)}H5i76#Qv0sc zp6#NzeSZd|d|Y$i;Eda)xflOa(G=4+y5ggs`i@PFW%u7yqz`Va04wCBW>yc-&w(xU zE6L6GObp8fto%NCGZ@V+`sH;PzOm!rFpEhN*#(pO-wAFdQ;aFb9gS?Zv!*+1cnojo zMziJx!Ruy0ZanXKF7OJ_v-%@y`GnS-mc@$2r$1XJtqTC=yRsqL@#amQ+5<{be5I3-v3r878>y?4{nXVNZd*`jE%&?i$~ZO?wdq} zvRY1N`!|v8nt^<`454g$-=x|j!6Zb1S;RcRjOn{18qPYS?ZO?xPOu0&z|ybRQTTN> za`1K$ewnP9O@jX3bG2$jS}O0__Zb~!25w6(!)+MHZOhIf%tgcay;MNkk;9a<7^cpDb-bM^v^XeB23N;e5%OdNay15`_p2)(ZrX^_sh zrva_fKt==OGym6^9#o^#B59=Hi=t6t5~3cJsL(cE=UDhZ8Dr+Slc=c3N)j3AEH%kg zU`RxSQHDmi61+q_3}v|1ggKTRQg~ zNQ5Z(lA=taBytLvJou*(?LReS;?)U@FjGcZ5W_HNM~)6V&BE==u=Wq}H(^8@={}uw zCZYCEl8A`5=TJ(nD^MKC`xy28WBgKfOCa?dSC&i2{{!xrcAR+HV_;-pU|^J-B{kuW zXFR{nR|a_w1`s%VRs0By{sUCK86W2MHC!a}%qo-Ek$2(yg&&^6|@0Z-78KPY*-)JKHh z-Z8%q(a{{MlOQQ}Z3-Q~$F(DB7$vC=m2tAfeQ#reIUl49gl=I*(yViyY_pD6sM<4A zXZZj7CKU{%tTrW%6=|Vv+9*I+)fmy}*j}-VvFow7aTsx=actxG$7#Zu zz}d!mjq@Lu7?%@Q9#;?739cX9cHBkW$9TASqIjx!*6>{6mE!f_&EuWLyNCA%?+-pX zJ`27Sz9alm{Br~h1eye{2u2C661*fNB9tQ3B6LldPuNR%iSR!WE0H#lQ=%-QMxu41 z>qI|@$%rM1wTPV(=K(?!@d@G&Btj%+Nt}@klB|*ZC6y-CC$&N9jI@VzlJqp`L(>0b z0%U4r4#{%JD#?b(R>-cBy&@+h=Os5o?t{FHyoY>={0jL?^8XYZ6lN%#Q23#!p%|uE zr?^bJ$pIZDTrJ}Ijx`zRMEUr}LD(NT#~X;E3D@n?Wb~%! z9n!m@f6TziAj4pe!4*Rh98k&7z|hVx%CO9Ej^P2rJ4Rwg0Y*heQ;fC&;W?uh#w0003r z0cQXN00DT~om0y$1VI!%Jw4u!AR-nby|kEVJtGpa^NL3%BnTEZt!IoG^N^kv;S;QU zft3Y+!q!Jv`3R?O-@!0Qq*B$VZryw8o_nhS4C5I#tYi;>kTb>>Cb^4o0)x0wY-0_# zij#2hqPPR&)~Mo6Ojs$!UAVK>6nA6FdR5$qxkS^yABTyY;sN4&#e>+jlZuBhVjn0T zMz38~{D?6-Qv3wZzQ!_2C~`)eS12G4htucYCkjx<87`^Kc%9Jd;DIv>4;jw1q6|{B zuF|_szY2LAED?u{HmfiEb<|jcE!ql14t8j-p+S^;=ila85$ELa8MnaGK)mx@Lwcq; ze`j#8$oLW&j24rn_h&@wt$T7;Lo+rUuJANjnjGm*9PMr>$!h8tNezsKs@!l&TOG&W zYUYblN4zfiJrZju*%`J-GK;%ZlG_5Ym~O@UGF61)o97z5*S$dv->ccaM@COX>pZ48 zE@ZeoZ;cK#))iEx=YQiOYCRKG1*v+GzHtX!;jFScIZ;y(C9(eVPdXy{nMy5?$ERPs zYmG54^lN9cyutf1?+-3laxU_;(!$xGC5Ls^aRr;~{EGY$Zrd04@mBVEa>VYN93p*R zo>+~p4N>NB%*t7od1W!jb(Y`ezc=#+t4Fo!004N}ZO~P0({T{M@$YS2+qt{rPXGV5 z>xQ?i#oe93R)MjNjsn98u7Qy72Ekr{;2QJ+2yVei;2DPp;1#;{#~b(Z$z5`nyCaI0 z_~XUP|KbNoltdGaff$UKFcV80@g$H)63L{HN*d{8kVzKVW(;E)$9N_%kx5Ku3R9WJbY?J++~YA1c*r9@hQIfWCp_f@ zzVOd>@{;Ggz|UvCvWYnan9DqBsbe4Y%%_1Mjf7ahLKg9f#VnzTr7UL|7unBBRON ztxB8Ht}IhJl;z5Q^PCYiHCNN(ya8V*SW{iq=#P|iPei-YVKcZx!TRRJt@iP_BKw5Z zl~$$A+;Xk>&S-A)R2moUsumK}PumdA-uop!jAWOIa z4pB?622)yCurwR6C|O`;Ac|F3umUAvumMG5BVw=uBSf+b0R}3v3 literal 0 HcmV?d00001 diff --git a/docs/fonts/OpenSans-LightItalic-webfont.eot b/docs/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..8f445929ffb03b50e98c2a2f7d831a0cb1b276a2 GIT binary patch literal 20535 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 Z%0#`NexefPFV?Xj51H#Y#AC7WXn+Jg($4?@ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..43e8b9e6cc061ff17fd2903075cbde12715512b3 GIT binary patch literal 23400 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 + + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..6a775468784 --- /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 Mon Dec 18 2017 13:12:38 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..59c09392d93 --- /dev/null +++ b/docs/generators_add-generator.js.html @@ -0,0 +1,408 @@ + + + + + JSDoc: Source: generators/add-generator.js + + + + + + + + + + +
+ +

Source: generators/add-generator.js

+ + + + + + +
+
+
const Generator = require("yeoman-generator");
+const glob = require("glob-all");
+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");
+
+/**
+ *
+ * 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 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];
+
+		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(() => {
+				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: {}
+					};
+				}
+				// 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 => {
+				/*
+				 * 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;
+						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 Mon Dec 18 2017 13:12:38 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..91f774312d9 --- /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 Mon Dec 18 2017 13:12:38 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..b09cad1629b --- /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 Mon Dec 18 2017 13:12:38 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..c93d9e020d1 --- /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 Mon Dec 18 2017 13:12:38 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..e30eb82b102 --- /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 Mon Dec 18 2017 13:12:38 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..702b7edd5a5 --- /dev/null +++ b/docs/generators_utils_module.js.html @@ -0,0 +1,69 @@ + + + + + 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
+ *
+ * @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 Mon Dec 18 2017 13:12:38 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..b19864bcc31 --- /dev/null +++ b/docs/generators_utils_plugins.js.html @@ -0,0 +1,64 @@ + + + + + JSDoc: Source: generators/utils/plugins.js + + + + + + + + + + +
+ +

Source: generators/utils/plugins.js

+ + + + + + +
+
+
"use strict";
+
+/**
+ *
+ * Callable function with the initial plugins
+ *
+ * @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 Mon Dec 18 2017 13:12:38 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..c46e6e8a095 --- /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 Mon Dec 18 2017 13:12:38 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..b4772baf6c4 --- /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 Mon Dec 18 2017 13:12:38 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..169b6e60440 --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/global.html b/docs/global.html new file mode 100644 index 00000000000..97f54bbf5af --- /dev/null +++ b/docs/global.html @@ -0,0 +1,7032 @@ + + + + + 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 + + +
+
+ + + + + + + + + + + + + +

createEmptyCallableFunctionWithArguments(j, name) → {Node}

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

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 + + +
+
+ + + + + + + + + + + + + +

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 + + +
+
+ + + + + + + + + + + + + +

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 + + +
+
+ + + + + + + + + + + + + +

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 + + +
+
+ + + + + + + + + + + + + +

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 + + +
+
+ + + + + + + + + + + + + +

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 + + +
+
+ + + + + + + + + + + + + +

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 Mon Dec 18 2017 13:12:38 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..8a815a59fe6 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,65 @@ + + + + + JSDoc: Home + + + + + + + + + + +
+ +

Home

+ + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..27723fa5888 --- /dev/null +++ b/docs/index.js.html @@ -0,0 +1,105 @@ + + + + + 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.slice(2).pop();
+	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 "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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/init_index.js.html b/docs/init_index.js.html new file mode 100644 index 00000000000..7ffddabbce4 --- /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 Mon Dec 18 2017 13:12:38 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..24609670950 --- /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 Mon Dec 18 2017 13:12:38 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..8c9bb7dd829 --- /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 Mon Dec 18 2017 13:12:38 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..8924948e631 --- /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 Mon Dec 18 2017 13:12:38 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..1604b85a745 --- /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 Mon Dec 18 2017 13:12:38 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..f5c684a7e38 --- /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 Mon Dec 18 2017 13:12:38 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..06e79ac3def --- /dev/null +++ b/docs/init_transformations_index.js.html @@ -0,0 +1,199 @@ + + + + + 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");
+
+/**
+ *
+ * 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
+};
+
+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 Mon Dec 18 2017 13:12:38 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..422a6b5b707 --- /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 Mon Dec 18 2017 13:12:38 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..ad22d4c0d6d --- /dev/null +++ b/docs/init_transformations_module_module.js.html @@ -0,0 +1,84 @@ + + + + + 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(j, ast, webpackProperties, action) {
+	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 && action === "init") {
+		return ast
+			.find(j.ObjectExpression)
+			.filter(p => utils.isAssignment(null, p, createModuleProperties))
+			.forEach(p => createRules(p));
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..7a3178065a6 --- /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 Mon Dec 18 2017 13:12:38 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..9f1083809a1 --- /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 Mon Dec 18 2017 13:12:38 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..db8f5e94792 --- /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 Mon Dec 18 2017 13:12:38 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..4f781c1cb73 --- /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 Mon Dec 18 2017 13:12:38 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..008fa164f54 --- /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 Mon Dec 18 2017 13:12:38 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..6afe788118f --- /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 Mon Dec 18 2017 13:12:38 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..d6dc94c248b --- /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 Mon Dec 18 2017 13:12:38 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..b00eef23ce3 --- /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 Mon Dec 18 2017 13:12:38 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..69ad03c14c4 --- /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 Mon Dec 18 2017 13:12:38 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..c8d0d0475d7 --- /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 Mon Dec 18 2017 13:12:38 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..230b97df91c --- /dev/null +++ b/docs/init_transformations_output_output.js.html @@ -0,0 +1,93 @@ + + + + + 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 {any} j — jscodeshift API
+ * @param {any} 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 createOutputProperties(p) {
+		utils.pushCreateProperty(j, p, "output", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "output");
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createOutputProperties));
+		} else if (action === "add") {
+			if (utils.findRootNodesByName(j, ast, "output").size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.pushObjectKeys(j, p, webpackProperties, "output"));
+			} 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 Mon Dec 18 2017 13:12:38 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..230b529890d --- /dev/null +++ b/docs/init_transformations_performance_performance.js.html @@ -0,0 +1,101 @@ + + + + + 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 && typeof webpackProperties === "object") {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createPerformanceProperty));
+		} else if (action === "add") {
+			if (utils.findRootNodesByName(j, ast, "performance").size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.pushObjectKeys(j, p, webpackProperties, "performance")
+					);
+			} 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 Mon Dec 18 2017 13:12:38 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..6bbeea90897 --- /dev/null +++ b/docs/init_transformations_plugins_plugins.js.html @@ -0,0 +1,101 @@ + + + + + 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(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") {
+			return utils
+				.findRootNodesByName(j, ast, "plugins")
+				.filter(p =>
+					p.value.value.elements.push(
+						utils.createEmptyCallableFunctionWithArguments(j, webpackProperties)
+					)
+				);
+		} 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 Mon Dec 18 2017 13:12:38 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..2c6e138cad4 --- /dev/null +++ b/docs/init_transformations_resolve_resolve.js.html @@ -0,0 +1,96 @@ + + + + + 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 createResolveProperties(p) {
+		utils.pushCreateProperty(j, p, "resolve", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "resolve");
+	}
+	if (webpackProperties) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p => utils.isAssignment(null, p, createResolveProperties));
+		} else if (action === "add") {
+			if (utils.findRootNodesByName(j, ast, "resolve").size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p =>
+						utils.pushObjectKeys(j, p, webpackProperties, "resolve")
+					);
+			} 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 Mon Dec 18 2017 13:12:38 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..c8c4482f921 --- /dev/null +++ b/docs/init_transformations_stats_stats.js.html @@ -0,0 +1,106 @@ + + + + + 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") {
+			if (utils.findRootNodesByName(j, ast, "stats").size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.pushObjectKeys(j, p, webpackProperties, "stats"));
+			} 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 Mon Dec 18 2017 13:12:38 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..c5417e4c68c --- /dev/null +++ b/docs/init_transformations_target_target.js.html @@ -0,0 +1,98 @@ + + + + + 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 && webpackProperties.length) {
+		if (action === "init") {
+			return ast
+				.find(j.ObjectExpression)
+				.filter(p =>
+					utils.isAssignment(
+						j,
+						p,
+						utils.pushCreateProperty,
+						"target",
+						webpackProperties
+					)
+				);
+		} else if (action === "add") {
+			if (utils.findRootNodesByName(j, ast, "target").size() !== 0) {
+				return ast
+					.find(j.ObjectExpression)
+					.filter(p => utils.pushObjectKeys(j, p, webpackProperties, "target"));
+			} 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 Mon Dec 18 2017 13:12:38 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..fa182f28d1f --- /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 Mon Dec 18 2017 13:12:38 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..ff3fb392425 --- /dev/null +++ b/docs/init_transformations_watch_watch.js.html @@ -0,0 +1,84 @@ + + + + + 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(j, ast, webpackProperties, action) {
+	if (typeof webpackProperties === "boolean" && action === "init") {
+		return ast
+			.find(j.ObjectExpression)
+			.filter(p =>
+				utils.isAssignment(
+					j,
+					p,
+					utils.pushCreateProperty,
+					"watch",
+					webpackProperties
+				)
+			);
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..01367545c35 --- /dev/null +++ b/docs/init_transformations_watch_watchOptions.js.html @@ -0,0 +1,80 @@ + + + + + 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(j, ast, webpackProperties, action) {
+	function createWatchOptionsProperty(p) {
+		utils.pushCreateProperty(j, p, "watchOptions", j.objectExpression([]));
+		return utils.pushObjectKeys(j, p, webpackProperties, "watchOptions");
+	}
+	if (webpackProperties && action === "init") {
+		return ast
+			.find(j.ObjectExpression)
+			.filter(p => utils.isAssignment(null, p, createWatchOptionsProperty));
+	} else {
+		return ast;
+	}
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/module-A%20Set%20of%20all%20accepted%20properties.html b/docs/module-A%20Set%20of%20all%20accepted%20properties.html new file mode 100644 index 00000000000..4d4b80ba369 --- /dev/null +++ b/docs/module-A%20Set%20of%20all%20accepted%20properties.html @@ -0,0 +1,122 @@ + + + + + JSDoc: Module: A Set of all accepted properties + + + + + + + + + + +
+ +

Module: A Set of all accepted properties

+ + + + + + +
+ +
+ + + +
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:05:50 GMT+0100 (CET) +
+ + + + + \ No newline at end of file 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..d778bee5ff4 --- /dev/null +++ b/docs/utils_ast-utils.js.html @@ -0,0 +1,694 @@ + + + + + JSDoc: Source: utils/ast-utils.js + + + + + + + + + + +
+ +

Source: utils/ast-utils.js

+ + + + + + +
+
+
//      
+// eslint-disable-next-line node/no-unsupported-features
+             
+             
+       
+           
+          
+             
+                     
+                   
+                 
+                  
+
+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                                               ;
+	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        
+)      {
+	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])
+					);
+				} else if (Array.isArray(webpackProperties[webpackProp])) {
+					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 {
+					pushCreateProperty(j, prop, webpackProp, j.objectExpression([]));
+					return pushObjectKeys(
+						j,
+						prop,
+						webpackProperties[webpackProp],
+						webpackProp
+					);
+				}
+			});
+		});
+}
+
+/**
+ *
+ * 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 {String} name - Name for the given function
+ * @returns {Node} -  Returns the node for the created
+ * function
+ */
+
+function createEmptyCallableFunctionWithArguments(
+	j             ,
+	name        
+)      {
+	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,
+	createEmptyCallableFunctionWithArguments,
+	pushCreateProperty,
+	pushObjectKeys,
+	isAssignment,
+	loopThroughObjects
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..c8fd6b3ea51 --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/docs/utils_defineTest.js.html b/docs/utils_defineTest.js.html new file mode 100644 index 00000000000..0dd3e79aeaf --- /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 Mon Dec 18 2017 13:12:38 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..b76f669884c --- /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 Mon Dec 18 2017 13:12:38 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..64432abb9b7 --- /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 Mon Dec 18 2017 13:12:38 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..964905a9e37 --- /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");
+
+/**
+*
+* 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 Mon Dec 18 2017 13:12:38 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..8121fdd2d45 --- /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 Mon Dec 18 2017 13:12:38 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..08efec772c8 --- /dev/null +++ b/docs/utils_prop-types.js.html @@ -0,0 +1,85 @@ + + + + + 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"
+]);
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..0629e090a4e --- /dev/null +++ b/docs/utils_resolve-packages.js.html @@ -0,0 +1,119 @@ + + + + + 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
+ */
+
+module.exports = 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);
+			});
+	});
+};
+
+
+
+ + + + +
+ + + +
+ +
+ Documentation generated by JSDoc 3.5.5 on Mon Dec 18 2017 13:12:38 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..89d9e909b81 --- /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 Mon Dec 18 2017 13:12:38 GMT+0100 (CET) +
+ + + + + diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 00000000000..3cd052cecfd --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,10 @@ + +{ + "source": { + "include": [ + "dist/" + ], + "includePattern": "dist/.+\\.js$", + "excludePattern": "dist/migrate/.+\\.js$" + } +} diff --git a/lib/commands/add.js b/lib/commands/add.js index 6f7a73109c7..4d66abeb7f8 100644 --- a/lib/commands/add.js +++ b/lib/commands/add.js @@ -3,6 +3,14 @@ const defaultGenerator = require("../generators/add-generator"); const modifyHelper = require("../utils/modify-config-helper"); -module.exports = function() { +/** + * 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 index 7e63644d510..e3748d5dc85 100644 --- a/lib/commands/init.js +++ b/lib/commands/init.js @@ -3,16 +3,15 @@ const npmPackagesExists = require("../utils/npm-packages-exists"); const creator = require("../init/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 -*/ +/** + * + * 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) { diff --git a/lib/commands/migrate.js b/lib/commands/migrate.js index 1b51c50fbfd..33adb6aa830 100644 --- a/lib/commands/migrate.js +++ b/lib/commands/migrate.js @@ -9,7 +9,20 @@ const Listr = require("listr"); const runPrettier = require("../utils/run-prettier"); -module.exports = function transformFile( +/** +* +* 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 diff --git a/lib/commands/remove.js b/lib/commands/remove.js index 858869dffff..2b1b73607a6 100644 --- a/lib/commands/remove.js +++ b/lib/commands/remove.js @@ -3,6 +3,14 @@ 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/update.js b/lib/commands/update.js index a45b4b3893a..598cf7f13de 100644 --- a/lib/commands/update.js +++ b/lib/commands/update.js @@ -3,6 +3,14 @@ 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/generators/add-generator.js b/lib/generators/add-generator.js index ae58b6d3a9e..72fe424417c 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -10,12 +10,32 @@ const PROP_TYPES = require("../utils/prop-types"); const getPackageManager = require("../utils/package-manager").getPackageManager; const npmExists = require("../utils/npm-exists"); -// https://gist.github.com/efenacigiray/9367920 +/** + * + * 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); } -// Finds if an array has a given prop +/** + * + * 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 => { @@ -26,6 +46,15 @@ const traverseAndGetProperties = (arr, prop) => { 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); diff --git a/lib/generators/init-generator.js b/lib/generators/init-generator.js index b7d50f8f397..5375ee13a59 100644 --- a/lib/generators/init-generator.js +++ b/lib/generators/init-generator.js @@ -18,7 +18,16 @@ const getBabelPlugin = require("./utils/module"); const getDefaultPlugins = require("./utils/plugins"); const tooltip = require("./utils/tooltip"); -module.exports = class WebpackGenerator extends Generator { +/** + * + * 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; diff --git a/lib/generators/utils/entry.js b/lib/generators/utils/entry.js index 027499c9610..f9756014bde 100644 --- a/lib/generators/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 index 7b44b7e156b..43b706960af 100644 --- a/lib/generators/utils/module.js +++ b/lib/generators/utils/module.js @@ -1,3 +1,11 @@ +"use strict"; + +/** + * + * Returns an module.rule object that has the babel loader if invoked + * + * @returns {Function} A callable function that adds the babel-loader with env preset + */ module.exports = () => { return { test: new RegExp(/\.js$/), diff --git a/lib/generators/utils/plugins.js b/lib/generators/utils/plugins.js index bcd523ad462..288002c2459 100644 --- a/lib/generators/utils/plugins.js +++ b/lib/generators/utils/plugins.js @@ -1,3 +1,13 @@ +"use strict"; + +/** + * + * Callable function with the initial plugins + * + * @returns {Function} An function that returns an array + * that consists of the uglify plugin + */ + module.exports = () => { return ["new UglifyJSPlugin()"]; }; diff --git a/lib/generators/utils/tooltip.js b/lib/generators/utils/tooltip.js index 97bf748a009..2ffcccf3343 100644 --- a/lib/generators/utils/tooltip.js +++ b/lib/generators/utils/tooltip.js @@ -1,3 +1,12 @@ +"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 `/* diff --git a/lib/generators/utils/validate.js b/lib/generators/utils/validate.js index 9f8f932f7e8..e6d71a0cc6c 100644 --- a/lib/generators/utils/validate.js +++ b/lib/generators/utils/validate.js @@ -1,5 +1,13 @@ "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) { diff --git a/lib/index.js b/lib/index.js index 2a64f867bcc..5923ec0d9be 100644 --- a/lib/index.js +++ b/lib/index.js @@ -2,17 +2,16 @@ 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(); diff --git a/lib/init/index.js b/lib/init/index.js index 0a9df56d2f7..a3daf4681f9 100644 --- a/lib/init/index.js +++ b/lib/init/index.js @@ -6,15 +6,15 @@ const path = require("path"); 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); diff --git a/lib/init/transformations/context/context.js b/lib/init/transformations/context/context.js index 3c83cc6ae7a..5b4128f9bc8 100644 --- a/lib/init/transformations/context/context.js +++ b/lib/init/transformations/context/context.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/devServer/devServer.js b/lib/init/transformations/devServer/devServer.js index 001e6940c5d..2ebfdcee408 100644 --- a/lib/init/transformations/devServer/devServer.js +++ b/lib/init/transformations/devServer/devServer.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/devtool/devtool.js b/lib/init/transformations/devtool/devtool.js index e9759d7f251..05bea8ae4c5 100644 --- a/lib/init/transformations/devtool/devtool.js +++ b/lib/init/transformations/devtool/devtool.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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") { diff --git a/lib/init/transformations/entry/entry.js b/lib/init/transformations/entry/entry.js index 9652934b68a..184229179e9 100644 --- a/lib/init/transformations/entry/entry.js +++ b/lib/init/transformations/entry/entry.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/externals/externals.js b/lib/init/transformations/externals/externals.js index 508d7eebb60..ebc903bc272 100644 --- a/lib/init/transformations/externals/externals.js +++ b/lib/init/transformations/externals/externals.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/index.js b/lib/init/transformations/index.js index 73da909f0da..d3326e5616d 100644 --- a/lib/init/transformations/index.js +++ b/lib/init/transformations/index.js @@ -34,15 +34,15 @@ const topScopeTransform = require("./top-scope/top-scope"); const devServerTransform = require("./devServer/devServer"); const modeTransform = require("./mode/mode"); -/* -* @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 -*/ +/** + * + * 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, diff --git a/lib/init/transformations/mode/mode.js b/lib/init/transformations/mode/mode.js index e86fa9bd64b..3c92d2880f6 100644 --- a/lib/init/transformations/mode/mode.js +++ b/lib/init/transformations/mode/mode.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/module/module.js b/lib/init/transformations/module/module.js index 0e311908208..0c7abb32749 100644 --- a/lib/init/transformations/module/module.js +++ b/lib/init/transformations/module/module.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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(j, ast, webpackProperties, action) { function createModuleProperties(p) { diff --git a/lib/init/transformations/node/node.js b/lib/init/transformations/node/node.js index 6f5a820a287..e78961d6e34 100644 --- a/lib/init/transformations/node/node.js +++ b/lib/init/transformations/node/node.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/other/amd.js b/lib/init/transformations/other/amd.js index dbc278dec20..d606eba7eb3 100644 --- a/lib/init/transformations/other/amd.js +++ b/lib/init/transformations/other/amd.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/other/bail.js b/lib/init/transformations/other/bail.js index 5d4db06d737..474300f057e 100644 --- a/lib/init/transformations/other/bail.js +++ b/lib/init/transformations/other/bail.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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") { diff --git a/lib/init/transformations/other/cache.js b/lib/init/transformations/other/cache.js index 645af35c7f7..7c808ee88ff 100644 --- a/lib/init/transformations/other/cache.js +++ b/lib/init/transformations/other/cache.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/other/merge.js b/lib/init/transformations/other/merge.js index 6d93cdbd9b8..f77c77882a8 100644 --- a/lib/init/transformations/other/merge.js +++ b/lib/init/transformations/other/merge.js @@ -1,15 +1,16 @@ "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, action) { function createMergeProperty(p) { diff --git a/lib/init/transformations/other/parallelism.js b/lib/init/transformations/other/parallelism.js index d288af153f9..6cbe456f11d 100644 --- a/lib/init/transformations/other/parallelism.js +++ b/lib/init/transformations/other/parallelism.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/other/profile.js b/lib/init/transformations/other/profile.js index b2a4bc72536..a1454ff015b 100644 --- a/lib/init/transformations/other/profile.js +++ b/lib/init/transformations/other/profile.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/other/recordsInputPath.js b/lib/init/transformations/other/recordsInputPath.js index 15de524f24e..757d46bdb27 100644 --- a/lib/init/transformations/other/recordsInputPath.js +++ b/lib/init/transformations/other/recordsInputPath.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/other/recordsOutputPath.js b/lib/init/transformations/other/recordsOutputPath.js index 6f692a563fe..565c9021907 100644 --- a/lib/init/transformations/other/recordsOutputPath.js +++ b/lib/init/transformations/other/recordsOutputPath.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/other/recordsPath.js b/lib/init/transformations/other/recordsPath.js index 7da8d4a0a84..d9d3720a7b9 100644 --- a/lib/init/transformations/other/recordsPath.js +++ b/lib/init/transformations/other/recordsPath.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/output/output.js b/lib/init/transformations/output/output.js index 268984e6ebd..0772f837684 100644 --- a/lib/init/transformations/output/output.js +++ b/lib/init/transformations/output/output.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * Transform for output. Finds the output property from yeoman and creates a + * property based on what the user has given us. + * + * @param {any} j — jscodeshift API + * @param {any} 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 createOutputProperties(p) { utils.pushCreateProperty(j, p, "output", j.objectExpression([])); diff --git a/lib/init/transformations/performance/performance.js b/lib/init/transformations/performance/performance.js index 051b917a3f8..c84accdd034 100644 --- a/lib/init/transformations/performance/performance.js +++ b/lib/init/transformations/performance/performance.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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, diff --git a/lib/init/transformations/plugins/plugins.js b/lib/init/transformations/plugins/plugins.js index e35b827cf3c..15a10b6b3a4 100644 --- a/lib/init/transformations/plugins/plugins.js +++ b/lib/init/transformations/plugins/plugins.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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(j, ast, webpackProperties, action) { function createPluginsProperty(p) { diff --git a/lib/init/transformations/resolve/resolve.js b/lib/init/transformations/resolve/resolve.js index 7f570268f6c..c20ebe52539 100644 --- a/lib/init/transformations/resolve/resolve.js +++ b/lib/init/transformations/resolve/resolve.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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 createResolveProperties(p) { diff --git a/lib/init/transformations/stats/stats.js b/lib/init/transformations/stats/stats.js index d70dd53ed6b..679db8b5063 100644 --- a/lib/init/transformations/stats/stats.js +++ b/lib/init/transformations/stats/stats.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/target/target.js b/lib/init/transformations/target/target.js index 0533086dd30..a0314ceacbf 100644 --- a/lib/init/transformations/target/target.js +++ b/lib/init/transformations/target/target.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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 && webpackProperties.length) { diff --git a/lib/init/transformations/top-scope/top-scope.js b/lib/init/transformations/top-scope/top-scope.js index 6de089cc415..b897484157f 100644 --- a/lib/init/transformations/top-scope/top-scope.js +++ b/lib/init/transformations/top-scope/top-scope.js @@ -1,13 +1,14 @@ -/* -* -* 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 -*/ +/** + * + * 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) { diff --git a/lib/init/transformations/watch/watch.js b/lib/init/transformations/watch/watch.js index ba0e66d2c21..bc70ec1d67b 100644 --- a/lib/init/transformations/watch/watch.js +++ b/lib/init/transformations/watch/watch.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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(j, ast, webpackProperties, action) { if (typeof webpackProperties === "boolean" && action === "init") { diff --git a/lib/init/transformations/watch/watchOptions.js b/lib/init/transformations/watch/watchOptions.js index 96d42e4d1af..c417ae10f4c 100644 --- a/lib/init/transformations/watch/watchOptions.js +++ b/lib/init/transformations/watch/watchOptions.js @@ -2,16 +2,17 @@ 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 { Object } webpackProperties - Object containing transformation rules -* @returns ast - jscodeshift API -*/ +/** + * + * 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(j, ast, webpackProperties, action) { function createWatchOptionsProperty(p) { diff --git a/lib/utils/ast-utils.js b/lib/utils/ast-utils.js index 346d9ce91d0..f01303ed132 100644 --- a/lib/utils/ast-utils.js +++ b/lib/utils/ast-utils.js @@ -51,16 +51,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,16 +75,16 @@ function findPluginsByName( }); } -/* - * @function findRootNodesByName +/** * * Finds the path to the `name: []` node * - * @param j — jscodeshift API - * @param { Node } node - Node to start search from - * @param { String } propName - property to search for - * @returns Path - * */ + * @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<*>, @@ -92,16 +93,16 @@ function findRootNodesByName( 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, @@ -114,15 +115,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, @@ -141,15 +141,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 @@ -182,18 +181,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<*>, @@ -258,16 +258,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, @@ -282,14 +281,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; @@ -302,15 +300,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, @@ -325,16 +322,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, @@ -355,14 +351,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 @@ -370,16 +365,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, @@ -410,16 +405,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, @@ -460,15 +454,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, @@ -478,30 +472,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, @@ -520,16 +513,15 @@ function pushCreateProperty( ); } -/* -* @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, @@ -577,20 +569,20 @@ function pushObjectKeys( }); } -/* -* @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, @@ -608,15 +600,14 @@ function isAssignment( } } -/* -* @function createEmptyCallableFunctionWithArguments -* -* Creates a function call with arguments -* @param j — jscodeshift API -* @param name: Name for the given function -* @returns - { Function } Node - Returns the node for the created -* function -*/ +/** + * + * Creates a function call with arguments + * @param {any} j — jscodeshift API + * @param {String} name - Name for the given function + * @returns {Node} - Returns the node for the created + * function + */ function createEmptyCallableFunctionWithArguments( j: Ijscodeshit, diff --git a/lib/utils/defineTest.js b/lib/utils/defineTest.js index 39796961b1f..7a35efcbb48 100644 --- a/lib/utils/defineTest.js +++ b/lib/utils/defineTest.js @@ -25,7 +25,7 @@ const path = require("path"); * 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 {TBD} TBD + * @return {Function} Function that fires of the transforms */ function runSingleTansform( dirName, @@ -75,11 +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 + * @param {any} transformObject Object to be transformed with the transformations * @param {String} action init, update or remove, decides how to format the AST - * @return {TBD} TBD + * @return {Void} Jest makes sure to execute the globally defined functions */ -function defineTest(dirName, transformName, testFilePrefix, type, action) { +function defineTest( + dirName, + transformName, + testFilePrefix, + transformObject, + action +) { const testName = testFilePrefix ? `transforms correctly using "${testFilePrefix}" data` : "transforms correctly"; @@ -89,7 +95,7 @@ function defineTest(dirName, transformName, testFilePrefix, type, action) { dirName, transformName, testFilePrefix, - type, + transformObject, action ); expect(output).toMatchSnapshot(); diff --git a/lib/utils/modify-config-helper.js b/lib/utils/modify-config-helper.js index 4804c4284f2..cf2f8b81dfa 100644 --- a/lib/utils/modify-config-helper.js +++ b/lib/utils/modify-config-helper.js @@ -5,7 +5,17 @@ const path = require("path"); const yeoman = require("yeoman-environment"); const runTransform = require("../init/transformations/index"); -module.exports = function(action, generator) { +/** + * + * 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) { diff --git a/lib/utils/npm-exists.js b/lib/utils/npm-exists.js index 96bc56bf665..8a26ba394ff 100644 --- a/lib/utils/npm-exists.js +++ b/lib/utils/npm-exists.js @@ -3,15 +3,14 @@ const got = require("got"); 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) { const hostname = "https://www.npmjs.org"; diff --git a/lib/utils/npm-packages-exists.js b/lib/utils/npm-packages-exists.js index 0307ec63784..dd52953768b 100644 --- a/lib/utils/npm-packages-exists.js +++ b/lib/utils/npm-packages-exists.js @@ -3,15 +3,14 @@ const chalk = require("chalk"); const npmExists = require("./npm-exists"); const resolvePackages = require("./resolve-packages"); -/* -* @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 = []; 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 index 8fe34e139cf..ceac7567f59 100644 --- a/lib/utils/prop-types.js +++ b/lib/utils/prop-types.js @@ -1,3 +1,10 @@ +/** + * + * A Set of all accepted properties + * + * @returns {Set} A new set with accepted webpack properties + */ + module.exports = new Set([ "context", "devServer", diff --git a/lib/utils/resolve-packages.js b/lib/utils/resolve-packages.js index 35bd2f564c1..a38db2947ee 100644 --- a/lib/utils/resolve-packages.js +++ b/lib/utils/resolve-packages.js @@ -8,14 +8,13 @@ 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,15 +27,14 @@ 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) { Error.stackTraceLimit = 30; diff --git a/lib/utils/run-prettier.js b/lib/utils/run-prettier.js index d3aaddaaf25..3b9600cb875 100644 --- a/lib/utils/run-prettier.js +++ b/lib/utils/run-prettier.js @@ -4,14 +4,15 @@ 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, cb) { function validateConfig() { diff --git a/package.json b/package.json index 096c7e409a1..6919e0d3644 100644 --- a/package.json +++ b/package.json @@ -16,14 +16,15 @@ "node": ">=4.0.0" }, "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}/**/!(__testfixtures__)/*.js\" \"{lib,bin}/**.js\"", "precommit": "lint-staged", "prepare": "flow-remove-types lib/ -d dist/ && yarn format:dist", "pretest": "yarn lint", - "test": "jest --coverage" + "test": "jest --coverage", + "jsdoc": "jsdoc -c jsdoc.json -r -d docs" }, "lint-staged": { "{lib,bin}/**/!(__testfixtures__)/**.js": [ @@ -82,6 +83,7 @@ "husky": "^0.14.3", "jest": "^21.2.1", "jest-cli": "^21.2.1", + "jsdoc": "^3.5.5", "lint-staged": "^4.1.3", "prettier-eslint-cli": "^4.6.1" }, diff --git a/test/BinTestCases.test.js b/test/BinTestCases.test.js index a173d998b80..36048d6de04 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}`); } @@ -118,20 +142,20 @@ describe("BinTestCases", function() { 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 0175fec7931..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( - "bundle.js" - ); + expect(stdout[4]).toContain("bundle.js"); expect(stderr).toHaveLength(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/yarn.lock b/yarn.lock index c32038da84b..20a941f44d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -969,6 +969,10 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 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" @@ -1009,7 +1013,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.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" @@ -1254,6 +1258,12 @@ 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" @@ -1938,7 +1948,7 @@ 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.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" @@ -2626,7 +2636,7 @@ got@^7.0.0, got@^7.1.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.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" @@ -3513,6 +3523,12 @@ js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1: 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" @@ -3537,6 +3553,23 @@ jscodeshift@^0.4.0: 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" @@ -3628,6 +3661,12 @@ kind-of@^4.0.0: 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" @@ -3854,6 +3893,10 @@ 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" @@ -4038,7 +4081,7 @@ mississippi@^1.3.0: 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.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: @@ -5011,6 +5054,12 @@ 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" @@ -5578,6 +5627,10 @@ table@^4.0.1: 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" @@ -5786,10 +5839,20 @@ uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -underscore@~1.6.0: +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" @@ -6155,6 +6218,10 @@ 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" From f400c242125f042a0242b8f01042339506c881f4 Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 18 Dec 2017 13:24:18 +0100 Subject: [PATCH 063/109] remove jsdoc from npm dep --- .npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmignore b/.npmignore index 9e98340ece3..40bc15c1bd8 100644 --- a/.npmignore +++ b/.npmignore @@ -13,3 +13,4 @@ __testfixtures__ types.js *.spec.js docs +jsdoc.json From 017108b6551e9f5f84a627e44f8450a285ec131c Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 18 Dec 2017 13:38:54 +0100 Subject: [PATCH 064/109] add entry questions --- lib/generators/add-generator.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/generators/add-generator.js b/lib/generators/add-generator.js index 72fe424417c..9e47c7c4410 100644 --- a/lib/generators/add-generator.js +++ b/lib/generators/add-generator.js @@ -1,5 +1,6 @@ const Generator = require("yeoman-generator"); const glob = require("glob-all"); +const Confirm = require("webpack-addons").Confirm; const List = require("webpack-addons").List; const Input = require("webpack-addons").Input; @@ -9,6 +10,7 @@ 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"); /** * @@ -70,12 +72,13 @@ module.exports = class AddGenerator extends Generator { 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]; - this.prompt([ + return this.prompt([ List( "actionType", "What property do you want to add to?", @@ -91,6 +94,19 @@ module.exports = class AddGenerator extends Generator { 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; + }); + } const webpackSchemaProp = webpackSchema.definitions[action]; /* * https://github.com/webpack/webpack/blob/next/schemas/WebpackOptions.json @@ -222,6 +238,10 @@ module.exports = class AddGenerator extends Generator { 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 From 8b1ee4986273f0eda1017b0af464baa0b3aebadd Mon Sep 17 00:00:00 2001 From: Even Stensberg Date: Mon, 18 Dec 2017 13:54:12 +0100 Subject: [PATCH 065/109] underscore on empty params --- bin/process-options.js | 4 ++-- bin/webpack.js | 2 +- docs/AddGenerator.html | 4 ++-- docs/InitGenerator.html | 2 +- docs/LoaderGenerator.html | 2 +- docs/PluginGenerator.html | 2 +- docs/commands_add.js.html | 2 +- docs/commands_init.js.html | 2 +- docs/commands_migrate.js.html | 4 ++-- docs/commands_remove.js.html | 2 +- docs/commands_update.js.html | 2 +- docs/generate-loader_index.js.html | 2 +- docs/generate-plugin_index.js.html | 2 +- docs/generators_add-generator.js.html | 24 +++++++++++++++++-- docs/generators_init-generator.js.html | 2 +- docs/generators_loader-generator.js.html | 2 +- docs/generators_plugin-generator.js.html | 2 +- docs/generators_utils_entry.js.html | 2 +- docs/generators_utils_module.js.html | 5 ++-- docs/generators_utils_plugins.js.html | 5 ++-- docs/generators_utils_tooltip.js.html | 10 ++++---- docs/generators_utils_validate.js.html | 2 +- docs/generators_webpack-generator.js.html | 2 +- docs/global.html | 6 ++--- docs/index.html | 2 +- docs/index.js.html | 2 +- docs/init_index.js.html | 4 ++-- ...it_transformations_context_context.js.html | 2 +- ...ransformations_devServer_devServer.js.html | 2 +- ...it_transformations_devtool_devtool.js.html | 2 +- docs/init_transformations_entry_entry.js.html | 2 +- ...ransformations_externals_externals.js.html | 2 +- docs/init_transformations_index.js.html | 4 ++-- docs/init_transformations_mode_mode.js.html | 2 +- ...init_transformations_module_module.js.html | 2 +- docs/init_transformations_node_node.js.html | 2 +- docs/init_transformations_other_amd.js.html | 2 +- docs/init_transformations_other_bail.js.html | 2 +- docs/init_transformations_other_cache.js.html | 2 +- docs/init_transformations_other_merge.js.html | 2 +- ..._transformations_other_parallelism.js.html | 2 +- ...init_transformations_other_profile.js.html | 2 +- ...sformations_other_recordsInputPath.js.html | 2 +- ...formations_other_recordsOutputPath.js.html | 2 +- ..._transformations_other_recordsPath.js.html | 2 +- ...init_transformations_output_output.js.html | 2 +- ...formations_performance_performance.js.html | 2 +- ...it_transformations_plugins_plugins.js.html | 2 +- ...it_transformations_resolve_resolve.js.html | 2 +- docs/init_transformations_stats_stats.js.html | 2 +- ...init_transformations_target_target.js.html | 2 +- ...ransformations_top-scope_top-scope.js.html | 2 +- docs/init_transformations_watch_watch.js.html | 2 +- ...transformations_watch_watchOptions.js.html | 2 +- docs/utils_ast-utils.js.html | 2 +- docs/utils_copy-utils.js.html | 2 +- docs/utils_defineTest.js.html | 2 +- docs/utils_modify-config-helper.js.html | 2 +- docs/utils_npm-exists.js.html | 4 ++-- docs/utils_npm-packages-exists.js.html | 18 +++++++------- docs/utils_package-manager.js.html | 2 +- docs/utils_prop-types.js.html | 2 +- docs/utils_resolve-packages.js.html | 6 ++--- docs/utils_run-prettier.js.html | 2 +- lib/commands/migrate.js | 2 +- lib/generators/utils/module.js | 3 ++- lib/generators/utils/plugins.js | 3 ++- lib/generators/utils/tooltip.js | 8 +++---- lib/init/index.js | 2 +- lib/init/transformations/index.js | 2 +- lib/migrate/index.js | 4 ++-- lib/utils/npm-exists.js | 2 +- lib/utils/npm-packages-exists.js | 2 +- lib/utils/resolve-packages.js | 4 ++-- lib/utils/resolve-packages.spec.js | 2 +- 75 files changed, 129 insertions(+), 105 deletions(-) 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 4f9b3a3fce0..67f98e38f14 100755 --- a/bin/webpack.js +++ b/bin/webpack.js @@ -428,7 +428,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 index 2840e15a5b0..79ea1482997 100644 --- a/docs/AddGenerator.html +++ b/docs/AddGenerator.html @@ -93,7 +93,7 @@

new AddGe
Source:
@@ -192,7 +192,7 @@

Home

Classes

)CdQ3F!eKyF|9D2V!F-rhUpJ8J+l7g0OBBVM#THTI&O8)>EGR%u6Gd9D9pm5!S}%&6DxW}^f|7=Y zPoO3(pTZY#?(7(|!5}5Nn!D%DotZmlW)?smSMcEE<^aT$6gw#LlwubPI9BYTffL0! zyu-EPCnz{Y#ZR&1d{F!hr_NW!&#~mXis$jseXDo@U)-kR7sMBeUt-T&RQw9By@BF9 z3f?cpmw4m-R{RHncaC**(V--ipJ<~6LkW2fi6RVfh%vcYt9@z>&M0LBSf-Q|Et8wU zCt43_*JB)mHR71wb`K@~5Cizwp{`A2uuJ^_Bcl3k{7ree$8&@l?;^2nagS+NqCDBfkB?pJws=PbK~+A7|2 z{gCDJKI-i%m4LD$n{WIwWR|c+NRy`C1#)1sSBI7FiH6z-QkhY&Q_|%I3exQ zQ`X1M?cZH4^M&BSyr;2z$+^SZUMA*0001Z+HKHROw(}?!13=vX`$@Br+fGR zZ%e`5O6%Txi$Yrz0gF{}p>fY>OnlS0Uevf}oDXW;D{d2gcE<2)oFcV80@g$H)63L{HN*d{8kVzKVW(;E)$9N_%kx5Ku3R9WJbY?JW^G#k0Wdx>E$NBBVtKRLiL?sA*s%w`TdsNz1=+~FRNdB8&+@iBD0 zXFTC4C-8-Cwv(4U=LLQ~^Oa4^rG|OTr5?ItoaPMYxxh`%a*kVU z;HYGAjq6;IY{`*awo0DlOMw(hkrYdb(O28l;MYvSx*ChcQW4f^QL5UdE3HbqvbxB$pfSg`>Cj#;?~00;nMAg}==M6d%RaIhCe zARtS)01i=0um)3FSgr#ump{<1pq_<0a34Kp8x=7I1^|9 literal 0 HcmV?d00001 diff --git a/docs/fonts/OpenSans-Regular-webfont.eot b/docs/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..6bbc3cf58cb011a6b4bf3cb1612ce212608f7274 GIT binary patch literal 19836 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000000000000000000000000000000000000..e231183dce4c7b452afc9e7799586fd285e146f4 GIT binary patch literal 22660 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 ML;wL%uV=LY00kR;TmS$7 literal 0 HcmV?d00001 diff --git a/docs/generate-loader_index.js.html b/docs/generate-loader_index.js.html new file mode 100644 index 00000000000..2b2255e1444 --- /dev/null +++ b/docs/generate-loader_index.js.html @@ -0,0 +1,68 @@ + + + + + JSDoc: Source: generate-loader/index.js + + + + + + + + + + +