From 77b4b7eba5d678a4254bb448370a11c8b1ee9dcb Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Mon, 4 Dec 2017 11:40:14 -0500 Subject: [PATCH 1/3] Upgrade to v3 upgrades web pack to v3 and updates the webpack-utils api to be more consistent. --- packages/gatsby/package.json | 26 +- packages/gatsby/src/commands/develop-html.js | 1 + .../src/utils/webpack-modify-validate.js | 59 -- packages/gatsby/src/utils/webpack-plugins.js | 57 ++ packages/gatsby/src/utils/webpack-utils.js | 590 ++++++++++-------- packages/gatsby/src/utils/webpack.config.js | 31 +- yarn.lock | 511 ++++++++------- 7 files changed, 694 insertions(+), 581 deletions(-) delete mode 100644 packages/gatsby/src/utils/webpack-modify-validate.js create mode 100644 packages/gatsby/src/utils/webpack-plugins.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index baf134522a3ac..7f7af13b031e6 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -6,6 +6,10 @@ "bin": { "gatsby": "./dist/bin/gatsby.js" }, + "files": [ + "./cache-dir", + "./dist" + ], "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" }, @@ -14,7 +18,7 @@ "autoprefixer": "^7.1.2", "babel-code-frame": "^6.22.0", "babel-core": "^6.24.1", - "babel-loader": "^7.1.1", + "babel-loader": "^7.1.2", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-remove-graphql-queries": "^2.0.0-alpha.1", "babel-plugin-transform-object-assign": "^6.8.0", @@ -33,7 +37,7 @@ "convert-hrtime": "^2.0.0", "copyfiles": "^1.2.0", "core-js": "^2.5.0", - "css-loader": "^0.28.4", + "css-loader": "^0.28.7", "debug": "^2.6.0", "del": "^3.0.0", "detect-port": "^1.2.1", @@ -47,8 +51,8 @@ "friendly-errors-webpack-plugin": "^1.6.1", "front-matter": "^2.1.0", "fs-extra": "^4.0.1", - "gatsby-module-loader": "^2.0.0-alpha.1", "gatsby-cli": "^1.1.25", + "gatsby-module-loader": "^2.0.0-alpha.1", "gatsby-react-router-scroll": "^1.0.6", "glob": "^7.1.1", "graphql": "^0.11.7", @@ -59,7 +63,7 @@ "is-relative": "^0.2.1", "is-relative-url": "^2.0.0", "joi": "12.x.x", - "json-loader": "^0.5.2", + "json-loader": "^0.5.7", "json-stringify-safe": "^5.0.1", "json5": "^0.5.0", "lodash": "^4.17.4", @@ -102,16 +106,16 @@ "string-similarity": "^1.2.0", "style-loader": "^0.18.2", "type-of": "^2.0.1", - "url-loader": "^0.5.9", - "webpack": "^2.0.0", - "webpack-dev-middleware": "^1.11.0", + "uglifyjs-webpack-plugin": "^1.1.2", + "url-loader": "^0.6.2", + "webpack": "^3.9.1", + "webpack-dev-middleware": "^1.12.2", "webpack-dev-server": "^2.6.1", - "webpack-hot-middleware": "^2.18.2", + "webpack-hot-middleware": "^2.21.0", "webpack-md5-hash": "0.0.5", "webpack-merge": "^4.1.0", - "webpack-stats-plugin": "^0.1.4", - "webpack-validator": "^2.2.7", - "yaml-loader": "^0.4.0" + "webpack-stats-plugin": "^0.1.5", + "yaml-loader": "^0.5.0" }, "devDependencies": { "babel-cli": "^6.26.0", diff --git a/packages/gatsby/src/commands/develop-html.js b/packages/gatsby/src/commands/develop-html.js index 093f50f0efeda..cfc95e311a25b 100644 --- a/packages/gatsby/src/commands/develop-html.js +++ b/packages/gatsby/src/commands/develop-html.js @@ -27,6 +27,7 @@ module.exports = async (program: any) => { const outputFile = `${directory}/public/render-page.js` if (stats.hasErrors()) { let webpackErrors = stats.toJson().errors + console.log(`here`, webpackErrors[0]) return reject( createErrorFromString(webpackErrors[0], `${outputFile}.map`) ) diff --git a/packages/gatsby/src/utils/webpack-modify-validate.js b/packages/gatsby/src/utils/webpack-modify-validate.js deleted file mode 100644 index 4e3c64da5cc9c..0000000000000 --- a/packages/gatsby/src/utils/webpack-modify-validate.js +++ /dev/null @@ -1,59 +0,0 @@ -import _ from "lodash" -import invariant from "invariant" -import validate, { Joi } from "webpack-validator" -import stripIndent from "common-tags/lib/stripIndent" -import apiRunnerNode from "./api-runner-node" - -// We whitelist special config keys that are not part of a standard Webpack v1 -// config but are in common usage. We should be able to completely remove this -// once we're on Webpack v3. -// -// For info on whitelisting with webpack-validator see: -// https://github.com/js-dxtools/webpack-validator#customizing -const validationWhitelist = Joi.object({ - stylus: Joi.any(), - sassLoader: Joi.any(), - sassResources: [Joi.string(), Joi.array().items(Joi.string())], - responsiveLoader: Joi.any(), -}) - -export default (async function ValidateWebpackConfig(config, stage) { - // We don't care about the return as plugins just mutate the config directly. - await apiRunnerNode(`modifyWebpackConfig`, { config, stage }) - - // console.log(JSON.stringify(config, null, 4)) - - invariant( - _.isObject(config) && _.isFunction(config.resolve), - ` - You must return an webpack-configurator instance when modifying the Webpack config. - Returned: ${config} - stage: ${stage} - ` - ) - - const validationState = validate(config.resolve(), { - returnValidation: true, - schemaExtension: validationWhitelist, - }) - - if (!validationState.error) { - return config - } - - console.log(`There were errors with your webpack config:`) - validationState.error.details.forEach((err, index) => { - console.log(`[${index + 1}]`) - console.log(err.path) - console.log(err.type, `,`, err.message) - console.log(`\n`) - }) - - console.log(stripIndent` - Your Webpack config does not appear to be valid. This could be because of - something you added or a plugin. If you don't recognize the invalid keys listed - above try removing plugins and rebuilding to identify the culprit. - `) - - return process.exit(1) -}) diff --git a/packages/gatsby/src/utils/webpack-plugins.js b/packages/gatsby/src/utils/webpack-plugins.js new file mode 100644 index 0000000000000..b1ef1f0423715 --- /dev/null +++ b/packages/gatsby/src/utils/webpack-plugins.js @@ -0,0 +1,57 @@ +// @flow + +const webpack = require(`webpack`) + +const plugin = (name, optimize) => { + let Plugin = (optimize ? webpack.optimize : webpack)[name] + return (...args: any) => new Plugin(...args) +} + +const plugins = { + normalModuleReplacement: plugin(`NormalModuleReplacementPlugin`), + contextReplacement: plugin(`ContextReplacementPlugin`), + ignore: plugin(`IgnorePlugin`), + watchIgnore: plugin(`WatchIgnorePlugin`), + banner: plugin(`BannerPlugin`), + prefetch: plugin(`PrefetchPlugin`), + automaticPrefetch: plugin(`AutomaticPrefetchPlugin`), + define: plugin(`DefinePlugin`), + provide: plugin(`ProvidePlugin`), + hotModuleReplacement: plugin(`HotModuleReplacementPlugin`), + sourceMapDevTool: plugin(`SourceMapDevToolPlugin`), + evalSourceMapDevTool: plugin(`EvalSourceMapDevToolPlugin`), + evalDevToolModule: plugin(`EvalDevToolModulePlugin`), + cache: plugin(`CachePlugin`), + extendedAPI: plugin(`ExtendedAPIPlugin`), + externals: plugin(`ExternalsPlugin`), + jsonpTemplate: plugin(`JsonpTemplatePlugin`), + libraryTemplate: plugin(`LibraryTemplatePlugin`), + loaderTarget: plugin(`LoaderTargetPlugin`), + memoryOutputFile: plugin(`MemoryOutputFileSystem`), + progress: plugin(`ProgressPlugin`), + setVarMainTemplate: plugin(`SetVarMainTemplatePlugin`), + umdMainTemplate: plugin(`UmdMainTemplatePlugin`), + noErrors: plugin(`NoErrorsPlugin`), + noEmitOnErrors: plugin(`NoEmitOnErrorsPlugin`), + newWatching: plugin(`NewWatchingPlugin`), + environment: plugin(`EnvironmentPlugin`), + dll: plugin(`DllPlugin`), + dllReference: plugin(`DllReferencePlugin`), + loaderOptions: plugin(`LoaderOptionsPlugin`), + namedModules: plugin(`NamedModulesPlugin`), + namedChunks: plugin(`NamedChunksPlugin`), + hashedModuleIds: plugin(`HashedModuleIdsPlugin`), + moduleFilenameH: plugin(`ModuleFilenameHelpers`), + + aggressiveMerging: plugin(`AggressiveMergingPlugin`, true), + aggressiveSplitting: plugin(`AggressiveSplittingPlugin`, true), + commonsChunk: plugin(`CommonsChunkPlugin`, true), + chunkModuleIdRange: plugin(`ChunkModuleIdRangePlugin`, true), + dedupe: plugin(`DedupePlugin`, true), + limitChunkCount: plugin(`LimitChunkCountPlugin`, true), + minChunkSize: plugin(`MinChunkSizePlugin`, true), + occurrenceOrder: plugin(`OccurrenceOrderPlugin`, true), + moduleConcatenation: plugin(`ModuleConcatenationPlugin`, true), +} + +module.exports = plugins diff --git a/packages/gatsby/src/utils/webpack-utils.js b/packages/gatsby/src/utils/webpack-utils.js index 9e46cf603c7e3..84e37d8df99a5 100644 --- a/packages/gatsby/src/utils/webpack-utils.js +++ b/packages/gatsby/src/utils/webpack-utils.js @@ -1,97 +1,182 @@ // @flow +const os = require(`os`) const autoprefixer = require(`autoprefixer`) -const camelCase = require(`lodash/camelCase`) const ExtractTextPlugin = require(`extract-text-webpack-plugin`) const flexbugs = require(`postcss-flexbugs-fixes`) -const webpack = require(`webpack`) +const UglifyPlugin = require(`uglifyjs-webpack-plugin`) +const builtinPlugins = require(`./webpack-plugins`) const genBabelConfig = require(`./babel-config`) -const VENDOR_MODULE_REGEX = /(node_modules|bower_components)/ +type LoaderSpec = string | { loader: string, options?: Object } +type LoaderResolver = (options?: T) => LoaderSpec -type Stage = 'develop' | 'develop-html' | 'build-css' | 'build-html' | 'build-javascript'; - -type LoaderSpec = string | { loader: string, options?: Object }; -type LoaderResolver = (options: Object) => LoaderSpec; +type Condition = string | RegExp | RegExp[] type Rule = { - test: RegExp, - use: LoaderSpec | LoaderSpec[], - exclude?: RegExp, - include?: RegExp, -}; - -type PluginInstance = Object; - -type WebpackConfigUtils = { - loaders: {| - json: LoaderSpec, - yaml: LoaderSpec, - null: LoaderSpec, - file: LoaderResolver, - url: LoaderResolver, - - style: LoaderSpec, - css: LoaderResolver, - postcss: (options: { - browsers: string[], - plugins: Array | (loader: any) => Array, - }) => LoaderSpec, - - js: LoaderResolver, - |}, - - rules: {| - yaml: () => Rule, - js: (options: Object) => Rule, - images: (options: Object) => Rule, - assets: (options: Object) => Rule, - css: (options: Object) => Rule, - cssModules: (options: Object) => Rule, - |}, - - plugins: { - uglify: (options: Object) => PluginInstance, - loaderOptions: (options: Object) => PluginInstance, - extractText: (options: Object) => PluginInstance, - moment: (options: Object) => PluginInstance, - } -}; + test?: Condition, + use: LoaderSpec[], + exclude?: Condition, + include?: Condition, +} + +type RuleFactory = (options?: T) => Rule + +type ContextualRuleFactory = RuleFactory<*> & { + internal: RuleFactory<*>, + external: RuleFactory<*>, +} + +type PluginInstance = any +type PluginFactory = (...args?: any) => PluginInstance + +type BuiltinPlugins = typeof builtinPlugins + +type Stage = + | "develop" + | "develop-html" + | "build-css" + | "build-html" + | "build-javascript" + +/** + * Configuration options for `createUtils` + */ +export type WebpackUtilsOptions = { stage: Stage, program: any } + +/** + * Utils that produce webpack `loader` objects + */ +export type LoaderUtils = { + json: LoaderResolver<*>, + yaml: LoaderResolver<*>, + null: LoaderResolver<*>, + raw: LoaderResolver<*>, + + style: LoaderResolver<*>, + css: LoaderResolver<*>, + postcss: LoaderResolver<{ + browsers?: string[], + plugins?: Array | ((loader: any) => Array), + }>, + + file: LoaderResolver<*>, + url: LoaderResolver<*>, + js: LoaderResolver<*>, + + imports: LoaderResolver<*>, + exports: LoaderResolver<*>, +} + +/** + * Utils that prodcue webpack rule objects + */ +export type RuleUtils = { + /** + * Handles Javascript compilation via babel + */ + js: RuleFactory<*>, + yaml: RuleFactory<*>, + fonts: RuleFactory<*>, + images: RuleFactory<*>, + audioVideo: RuleFactory<*>, + + css: ContextualRuleFactory, + cssModules: RuleFactory<*>, + postcss: ContextualRuleFactory, +} + +export type PluginUtils = BuiltinPlugins & { + extractText: PluginFactory, + uglify: PluginFactory, + moment: PluginFactory, +} + +/** + * webpack atoms namespace + */ +export type WebpackUtils = { + loaders: LoaderUtils, + + rules: RuleUtils, + + plugins: PluginUtils, +} + +/** + * A factory method that produces an atoms namespace + */ +module.exports = async ({ + stage, + program, +}: { + stage: Stage, + program: any, +}): Promise => { + const assetRelativeRoot = `static/` + const vendorRegex = /(node_modules|bower_components)/ + const supportedBrowsers = program.browserlist -module.exports = async ( - { - stage, - program, - }: { stage: Stage, program: any } -): Promise => { const PRODUCTION = !stage.includes(`develop`) - const DEFAULT_BROWSERS = program.browserlist const babelConfig = await genBabelConfig(program, stage) + + const makeExternalOnly = (original: RuleFactory<*>) => ( + options = {} + ): Rule => { + let rule = original(options) + rule.include = vendorRegex + return rule + } + + const makeInternalOnly = (original: RuleFactory<*>) => ( + options = {} + ): Rule => { + let rule = original(options) + rule.exclude = vendorRegex + return rule + } + let ident = 0 - /** - * Loaders - */ - const loaders = { - json: { - loader: require.resolve(`json-loader`), + const loaders: LoaderUtils = { + json: (options = {}) => { + return { + options, + loader: require.resolve(`json-loader`), + } }, - yaml: { - loader: require.resolve(`yaml-loader`), + yaml: (options = {}) => { + return { + options, + loader: require.resolve(`yaml-loader`), + } }, - null: { - loader: require.resolve(`null-loader`), + null: (options = {}) => { + return { + options, + loader: require.resolve(`null-loader`), + } }, - style: { - loader: require.resolve(`style-loader`), + raw: (options = {}) => { + return { + options, + loader: require.resolve(`raw-loader`), + } }, - css: (opts = {}) => { + style: (options = {}) => { + return { + options, + loader: require.resolve(`style-loader`), + } + }, + + css: (options = {}) => { return { loader: require.resolve(`css-loader`), options: { @@ -100,21 +185,18 @@ module.exports = async ( camelCase: `dashesOnly`, // https://github.com/webpack-contrib/css-loader/issues/406 localIdentName: `[name]--[local]--[hash:base64:5]`, - ...opts, + ...options, }, } }, - postcss: ({ - plugins, - browsers = DEFAULT_BROWSERS, - ...rest - } = {}) => { + postcss: (options = {}) => { + let { plugins, browsers = supportedBrowsers, ...postcssOpts } = options + return { loader: require.resolve(`postcss-loader`), options: { ident: `postcss-${++ident}`, - sourceMap: !PRODUCTION, plugins: loader => { plugins = (typeof plugins === `function` ? plugins(loader) : plugins) || [] @@ -125,27 +207,31 @@ module.exports = async ( ...plugins, ] }, - ...rest, + ...postcssOpts, }, } }, - file: options => {return { - loader: require.resolve(`file-loader`), - options: { - name: `static/[name]-[hash:*].[ext]`, - ...options, - }, - }}, - - url: options => {return { - loader: require.resolve(`url-loader`), - options: { - limit: 10000, - name: `static/[name]-[hash:*].[ext]`, - ...options, - }, - }}, + file: (options = {}) => { + return { + loader: require.resolve(`url-loader`), + options: { + name: `${assetRelativeRoot}[name]-[hash].[ext]`, + ...options, + }, + } + }, + + url: (options = {}) => { + return { + loader: require.resolve(`url-loader`), + options: { + limit: 10000, + name: `${assetRelativeRoot}[name]-[hash].[ext]`, + ...options, + }, + } + }, js: (options = babelConfig) => { return { @@ -153,219 +239,183 @@ module.exports = async ( loader: require.resolve(`babel-loader`), } }, + + imports: (options = {}) => { + return { + options, + loader: require.resolve(`imports-loader`), + } + }, + + exports: (options = {}) => { + return { + options, + loader: require.resolve(`exports-loader`), + } + }, } /** * Rules */ - const rules = { - yaml: () => {return { + const rules = {} + + /** + * Javascript loader via babel, excludes node_modules + */ + { + let js = options => { + return { + test: /\.jsx?$/, + exclude: vendorRegex, + use: [loaders.js(options)], + } + } + + rules.js = js + } + + rules.yaml = () => { + return { test: /\.ya?ml/, - use: [loaders.json, loaders.yaml], - }}, + use: [loaders.json(), loaders.yaml()], + } + } - /** - * Javascript loader via babel, excludes node_modules - * - * @param {object=} options Options passed to babel-loader - */ - js: options => {return { - test: /\.jsx?$/, - exclude: VENDOR_MODULE_REGEX, - use: loaders.js(options), - }}, + /** + * Font loader + */ + rules.fonts = () => { + return { + use: [loaders.url()], + test: /\.(eot|otf|ttf|woff(2)?)(\?.*)?$/, + } + } - /** - * Loads image assets, inlines images via a data URI if they are below - * the size threshold - */ - images: options => {return { - use: loaders.url(options), - test: /\.(svg|jpg|jpeg|png|gif|mp4|webm|wav|mp3|m4a|aac|oga)(\?.*)?$/, - }}, + /** + * Loads image assets, inlines images via a data URI if they are below + * the size threshold + */ + rules.images = () => { + return { + use: [loaders.url()], + test: /\.(ico|svg|jpg|jpeg|png|gif|webp)(\?.*)?$/, + } + } - /** - * Web font loader - */ - assets: options => {return { - use: loaders.file(options), - test: /\.(ico|eot|otf|webp|pdf|ttf|woff(2)?)(\?.*)?$/, - }}, + /** + * Loads audio or video assets + */ + rules.audioVideo = () => { + return { + use: [loaders.file()], + test: /\.(mp4|webm|wav|mp3|m4a|aac|oga|flac)$/, + } + } - /** - * CSS style loader, excludes node_modules. Includes postCSS loader with - * some useful default plugins such as Autoprefixer. Borrowed from CRA. - */ - css: ({ plugins, browsers = DEFAULT_BROWSERS, ...rest } = {}) => { + /** + * CSS style loader. + */ + { + const css = ({ browsers, ...options } = {}) => { return { test: /\.css$/, - exclude: /\.module\.css$/, use: ExtractTextPlugin.extract({ - fallback: loaders.style, + fallback: loaders.style(), use: [ - loaders.css({ ...rest, importLoaders: 1 }), - loaders.postcss({ plugins, browsers }), + loaders.css({ ...options, importLoaders: 1 }), + loaders.postcss({ browsers }), ], }), } - }, + } /** - * CSS style loader, _includes_ node_modules. + * CSS style loader, _excludes_ node_modules. */ - cssModules: options => { - const rule = rules.css({ ...options, modules: true }) + css.internal = makeInternalOnly(css) + css.external = makeExternalOnly(css) + + const cssModules = options => { + const rule = css({ ...options, modules: true }) delete rule.exclude rule.test = /\.module\.css$/ return rule - }, + } + + rules.css = css + rules.cssModules = cssModules } - const pluginName = name => camelCase(name.replace(/Plugin$/, ``)) + /** + * PostCSS loader. + */ + { + const postcss = options => { + return { + test: /\.css$/, + use: ExtractTextPlugin.extract({ + fallback: loaders.style, + use: [loaders.css({ importLoaders: 1 }), loaders.postcss(options)], + }), + } + } - const plugins = { /** - * Minify javascript code without regard for IE8. Attempts - * to parallelize the work to save time. Generally only add in Production + * PostCSS loader, _excludes_ node_modules. */ - uglify: () => - new webpack.optimize.UglifyJsPlugin({ - sourceMap: true, + postcss.internal = makeInternalOnly(postcss) + postcss.external = makeExternalOnly(postcss) + rules.postcss = postcss + } + /** + * Plugins + */ + const plugins = { ...builtinPlugins } + + /** + * Minify javascript code without regard for IE8. Attempts + * to parallelize the work to save time. Generally only add in Production + */ + plugins.uglify = ({ uglifyOptions, ...options } = {}) => + new UglifyPlugin({ + parallel: { + cache: true, + workers: os.cpus().length - 1, + }, + exclude: /\.min\.js/, + sourceMap: true, + uglifyOptions: { compress: { - screw_ie8: true, // React doesn't support IE8 - warnings: false, - }, - mangle: { - screw_ie8: true, - }, - output: { - comments: false, - screw_ie8: true, + drop_console: true, }, - }), - - /** - * The webpack2 shim plugin for passing options to loaders. Sets - * the minize and debug options to `true` in production (used by various loaders) - */ - loaderOptions: options => - new webpack.LoaderOptionsPlugin({ - options, - minimize: PRODUCTION, - debug: !PRODUCTION, - }), + ie8: false, + ...uglifyOptions, + }, + ...options, + }) - /** - * Extracts css requires into a single file; - * includes some reasonable defaults - */ - extractText: options => - new ExtractTextPlugin({ - allChunks: true, - - // Useful when using css modules, it assert a dependency order for how - // css is concated together. AS it is the default heuristic for ordering - // is require() order, but that is rarely indicative of the proper cascade - // order for component css files, and will cause issues when using "helper" - // files containing a lot of small composable classes - ignoreOrder: true, - - // The extracted css is not needed for stage other than `build-css` - // but we extract at all build stages to avoid: - // - adding extra weight to the js bundle in `build-javascript` - // - errors in `build-html` caused by style-loader assuming a DOM exists - // - // TODO: these extra passes are costly on time and can be - // fixed in more optimal ways - disable: stage === `develop` || stage === `develop-html`, - - ...options, - }), - - - - // Moment.js includes 100s of KBs of extra localization data by - // default in Webpack that most sites don`t want. This line disables - // loading locale modules. This is a practical solution that requires - // the user to opt into importing specific locales. - // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack - moment: () => new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), - } + /** + * Extracts css requires into a single file; + * includes some reasonable defaults + */ + plugins.extractText = options => + new ExtractTextPlugin({ + filename: `[name]-[contenthash].css`, + allChunks: true, + disable: !PRODUCTION, + // Useful when using css modules + ignoreOrder: true, + ...options, + }) plugins.extractText.extract = (...args) => ExtractTextPlugin.extract(...args) - - // Re-export all the built-in plugins - ;[ - `DefinePlugin`, - `NormalModuleReplacementPlugin`, - `ContextReplacementPlugin`, - `IgnorePlugin`, - `WatchIgnorePlugin`, - `BannerPlugin`, - `PrefetchPlugin`, - `AutomaticPrefetchPlugin`, - `ProvidePlugin`, - `HotModuleReplacementPlugin`, - `SourceMapDevToolPlugin`, - `EvalSourceMapDevToolPlugin`, - `EvalDevToolModulePlugin`, - `CachePlugin`, - `ExtendedAPIPlugin`, - `ExternalsPlugin`, - `JsonpTemplatePlugin`, - `LibraryTemplatePlugin`, - `LoaderTargetPlugin`, - `MemoryOutputFileSystem`, - `ProgressPlugin`, - `SetVarMainTemplatePlugin`, - `UmdMainTemplatePlugin`, - `NoErrorsPlugin`, - `NoEmitOnErrorsPlugin`, - `NewWatchingPlugin`, - `EnvironmentPlugin`, - `DllPlugin`, - `DllReferencePlugin`, - `LoaderOptionsPlugin`, - `NamedModulesPlugin`, - `NamedChunksPlugin`, - `HashedModuleIdsPlugin`, - `ModuleFilenameHelpers`, - ].forEach(plugin => { - if (!plugins[pluginName(plugin)]) - plugins[pluginName(plugin)] = (...args) => new webpack[plugin](...args) - }) - ;[ - `AggressiveMergingPlugin`, - `AggressiveSplittingPlugin`, - `CommonsChunkPlugin`, - `ChunkModuleIdRangePlugin`, - `DedupePlugin`, - `LimitChunkCountPlugin`, - `MinChunkSizePlugin`, - `OccurrenceOrderPlugin`, - //`UglifyJsPlugin` - ].forEach(plugin => { - if (!plugins[pluginName(plugin)]) - plugins[pluginName(plugin)] = (...args) => - new webpack.optimize[plugin](...args) - }) - + plugins.moment = () => plugins.ignore(/^\.\/locale$/, /moment$/) return { loaders, - rules, - - /** - * Common and core webpack plugins. All core webpack plugins are reexported as - * function factories, where the name is camelCased without the trailing "Plugin". - * - * So `new webpack.CommonsChunkPlugin(...)` becomes -> `plugins.commonsChunk(...)` - * - * @example - * - * plugins.define({ DEV: true }) - */ - plugins, + rules: (rules: RuleUtils), + plugins: (plugins: PluginUtils), } } diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index 85711c432429b..4ef0d004498c2 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -1,10 +1,10 @@ -import { uniq, some } from 'lodash' -import fs from 'fs' -import path from 'path' -import dotenv from 'dotenv' -import StaticSiteGeneratorPlugin from 'static-site-generator-webpack-plugin' -import { StatsWriterPlugin } from 'webpack-stats-plugin' -import FriendlyErrorsWebpackPlugin from 'friendly-errors-webpack-plugin' +import { uniq, some } from "lodash" +import fs from "fs" +import path from "path" +import dotenv from "dotenv" +import StaticSiteGeneratorPlugin from "static-site-generator-webpack-plugin" +import { StatsWriterPlugin } from "webpack-stats-plugin" +import FriendlyErrorsWebpackPlugin from "friendly-errors-webpack-plugin" const { store } = require(`../redux`) const { actions } = require(`../redux/actions`) @@ -14,7 +14,7 @@ const GatsbyModulePlugin = require(`gatsby-module-loader/plugin`) const { withBasePath } = require(`./path`) const apiRunnerNode = require(`./api-runner-node`) -const createConfig = require(`./webpack-utils`) +const createUtils = require(`./webpack-utils`) // Five stages or modes: // 1) develop: for `gatsby develop` command, hot reload and CSS injection into page @@ -35,8 +35,7 @@ module.exports = async ( // We combine develop & develop-html stages for purposes of generating the // webpack config. const stage = suppliedStage - const webpackConfig = await createConfig({ stage, program }) - const { rules, loaders, plugins } = webpackConfig + const { rules, loaders, plugins } = await createUtils({ stage, program }) function processEnv(stage, defaultNodeEnv) { debug(`Building env for "${stage}"`) @@ -155,14 +154,11 @@ module.exports = async ( let configPlugins = [ plugins.moment(), - // There seems to be a bug in file-loader that assumes this will be set. - plugins.loaderOptions({ fileLoader: {} }), - // Add a few global variables. Set NODE_ENV to production (enables // optimizations for React) and whether prefixing links is enabled // (__PREFIX_PATHS__) and what the link prefix is (__PATH_PREFIX__). plugins.define({ - 'process.env': processEnv(stage, `development`), + "process.env": processEnv(stage, `development`), __PREFIX_PATHS__: program.prefixPaths, __PATH_PREFIX__: JSON.stringify(store.getState().config.pathPrefix), __POLYFILL__: store.getState().config.polyfill, @@ -265,7 +261,7 @@ module.exports = async ( // using a chunk name that doesn't exist creates a chunk with // just the runtime bits plugins.commonsChunk({ - name: `webpack-runtime`, + name: `@@webpack-runtime`, }), // Write out mapping between chunk names and their hashed names. We use // this to add the needed javascript files to each HTML page. @@ -310,10 +306,11 @@ module.exports = async ( let configRules = [ rules.js(), rules.yaml(), - rules.assets(), + rules.fonts(), rules.images(), + rules.audioVideo(), ] - + console.log(configRules[0]) switch (stage) { case `develop`: case `build-css`: diff --git a/yarn.lock b/yarn.lock index 7827c2ace5408..08514768816b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,22 +105,18 @@ ajax-request@^1.2.0: file-system "^2.1.1" utils-extend "^1.0.7" -ajv-keywords@^1.1.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" - -ajv-keywords@^2.1.0: +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.7.0, ajv@^4.9.1: +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.2.3, ajv@^5.3.0: +ajv@^5.0.0, ajv@^5.1.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: @@ -197,10 +193,6 @@ ansi-wrap@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" -ansi@^0.3.0, ansi@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/ansi/-/ansi-0.3.1.tgz#0c42d4fb17160d5a9af1e484bace1c66922c1b21" - anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -214,7 +206,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" @@ -441,7 +433,7 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" -autoprefixer@^7.1.1, autoprefixer@^7.1.2: +autoprefixer@^7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7" dependencies: @@ -452,6 +444,17 @@ autoprefixer@^7.1.1, autoprefixer@^7.1.2: postcss "^6.0.13" postcss-value-parser "^3.2.3" +autoprefixer@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.0.tgz#6bf29695ad19da447bba2b5737660e1e23eac72d" + dependencies: + browserslist "^2.9.1" + caniuse-lite "^1.0.30000777" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.14" + postcss-value-parser "^3.2.3" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -713,7 +716,7 @@ babel-jest@^20.0.3: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^20.0.3" -babel-loader@^7.1.1: +babel-loader@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" dependencies: @@ -1344,7 +1347,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1, babel-runtime@^6.9.2: +babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1497,10 +1500,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -basename@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/basename/-/basename-0.1.2.tgz#d6039bef939863160c78048cced3c5e7f88cb261" - bash-glob@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/bash-glob/-/bash-glob-1.0.2.tgz#95ac5631fdd7a8fc569f267167a84eb831979a1b" @@ -1837,7 +1836,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.0.0, browserslist@^2.1.2, browserslist@^2.5.1: +browserslist@^2.0.0, browserslist@^2.1.2, browserslist@^2.5.1, browserslist@^2.9.1: version "2.9.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.9.1.tgz#b72d3982ab01b5cd24da62ff6d45573886aff275" dependencies: @@ -1940,6 +1939,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" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2044,7 +2061,7 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000777" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000777.tgz#2e19adba63bdd7c501df637a862adead7f4bc054" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000770: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000770, caniuse-lite@^1.0.30000777: version "1.0.30000777" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000777.tgz#31c18a4a8cd49782ebb305c8e8a93e6b3b3e4f13" @@ -2216,6 +2233,10 @@ chokidar@^1.2.0, 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" @@ -2483,13 +2504,7 @@ command-join@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -commander@^2.11.0, commander@^2.12.1, commander@^2.8.1, commander@^2.9.0: +commander@^2.11.0, commander@^2.12.1, commander@^2.8.1, commander@^2.9.0, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" @@ -2509,12 +2524,6 @@ commander@~2.8.1: dependencies: graceful-readlink ">= 1.0.0" -common-tags@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-0.1.1.tgz#d893486ecc6df22cffe6c393c88c12f71e7e8871" - dependencies: - babel-runtime "^6.6.1" - common-tags@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.5.1.tgz#e2e39931a013cd02253defeed89a1ad615a27f07" @@ -2867,6 +2876,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" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2961,13 +2981,6 @@ create-react-class@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -cross-env@^3.1.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-3.2.4.tgz#9e0585f277864ed421ce756f81a980ff0d698aba" - dependencies: - cross-spawn "^5.1.0" - is-windows "^1.0.0" - cross-env@^5.0.5: version "5.1.1" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.1.tgz#b6d8ab97f304c0f71dae7277b75fe424c08dfa74" @@ -3059,7 +3072,7 @@ css-in-js-utils@^2.0.0: dependencies: hyphenate-style-name "^1.0.2" -css-loader@^0.28.4: +css-loader@^0.28.7: version "0.28.7" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" dependencies: @@ -3213,6 +3226,10 @@ cwebp-bin@^3.1.0: bin-wrapper "^3.0.1" logalot "^2.0.0" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -3773,7 +3790,7 @@ duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" -duplexify@^3.2.0: +duplexify@^3.1.2, duplexify@^3.2.0, duplexify@^3.4.2: version "3.5.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" dependencies: @@ -3848,7 +3865,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0: +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: @@ -3893,7 +3910,7 @@ engine.io@~3.1.0: optionalDependencies: uws "~0.14.4" -enhanced-resolve@^3.0.0, enhanced-resolve@^3.3.0: +enhanced-resolve@^3.0.0, enhanced-resolve@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" dependencies: @@ -3970,6 +3987,17 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + es6-promise@3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" @@ -3982,7 +4010,17 @@ es6-promise@^4.0.5, es6-promise@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" -es6-symbol@^3.1.1, es6-symbol@~3.1.1: +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: @@ -4017,6 +4055,15 @@ escodegen@^1.6.1: optionalDependencies: source-map "~0.5.6" +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-config-google@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.9.1.tgz#83353c3dba05f72bb123169a4094f4ff120391eb" @@ -4193,6 +4240,13 @@ eval@^0.1.0: dependencies: require-like ">= 0.1.1" +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + eventemitter3@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" @@ -4650,13 +4704,6 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-node-modules@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-1.0.4.tgz#b6deb3cccb699c87037677bcede2c5f5862b2550" - dependencies: - findup-sync "0.4.2" - merge "^1.2.0" - find-up@^1.0.0, find-up@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -4679,15 +4726,6 @@ find-versions@^1.0.0: meow "^3.5.0" semver-regex "^1.0.0" -findup-sync@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" - dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - findup-sync@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" @@ -4748,6 +4786,13 @@ flow-bin@^0.42.0: version "0.42.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.42.0.tgz#05dd754b6b052de7b150f9210e2160746961e3cf" +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" + follow-redirects@^1.2.3, follow-redirects@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.6.tgz#4dcdc7e4ab3dd6765a97ff89c3b4c258117c79bf" @@ -4839,6 +4884,13 @@ friendly-errors-webpack-plugin@^1.6.1: error-stack-parser "^2.0.0" string-length "^1.0.1" +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" + front-matter@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.3.0.tgz#7203af896ce357ee04e2aa45169ea91ed7f67504" @@ -4868,6 +4920,15 @@ 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" @@ -4904,16 +4965,6 @@ 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@~1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-1.2.7.tgz#e9cec5483d3d4ee0ef44b60a7d99e4935e136d93" - dependencies: - ansi "^0.3.0" - has-unicode "^2.0.0" - lodash.pad "^4.1.0" - lodash.padend "^4.1.0" - lodash.padstart "^4.1.0" - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -5800,6 +5851,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: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -6420,10 +6475,6 @@ isemail@1.x.x: version "1.2.0" resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" -isemail@2.x.x: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6" - isemail@3.x.x: version "3.0.0" resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.0.0.tgz#c89a46bb7a3361e1759f8028f9082488ecce3dff" @@ -6529,10 +6580,6 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -items@2.x.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198" - iterall@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9" @@ -6781,16 +6828,6 @@ joi@12.x.x: isemail "3.x.x" topo "2.x.x" -joi@9.0.0-0: - version "9.0.0-0" - resolved "https://registry.yarnpkg.com/joi/-/joi-9.0.0-0.tgz#a7ca4219602149ae0da7a7c5ca1d63d3c79e096b" - dependencies: - hoek "4.x.x" - isemail "2.x.x" - items "2.x.x" - moment "2.x.x" - topo "2.x.x" - joi@^6.10.1: version "6.10.1" resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" @@ -6870,7 +6907,7 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-loader@^0.5.2, json-loader@^0.5.4: +json-loader@^0.5.4, json-loader@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" @@ -7247,7 +7284,7 @@ load-bmfont@^1.2.3: xhr "^2.0.1" xtend "^4.0.0" -load-json-file@^1.0.0, load-json-file@^1.1.0: +load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" dependencies: @@ -7502,18 +7539,6 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" -lodash.pad@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" - -lodash.padend@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" - -lodash.padstart@^4.1.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" - lodash.pick@^4.0, lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" @@ -7588,10 +7613,6 @@ lodash@4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^ version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@4.11.1: - version "4.11.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.11.1.tgz#a32106eb8e2ec8e82c241611414773c9df15f8bc" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -7677,7 +7698,7 @@ lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -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: @@ -7885,7 +7906,7 @@ merge-stream@^1.0.0: dependencies: readable-stream "^2.0.1" -merge@^1.1.3, merge@^1.2.0: +merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -7989,15 +8010,11 @@ mime-types@2.1.17, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, m dependencies: mime-db "~1.30.0" -mime@1.3.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" - mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.2.11, mime@^1.3.4, mime@^1.3.6, mime@^1.5.0: +mime@^1.2.11, mime@^1.3.4, mime@^1.3.6, mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -8062,6 +8079,21 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +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" + mitt@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.1.2.tgz#380e61480d6a615b660f07abb60d51e0a4e4bed6" @@ -8134,6 +8166,17 @@ mongodb@^2.2.30: mongodb-core "2.1.17" readable-stream "2.2.7" +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" + mri@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a" @@ -8446,14 +8489,6 @@ npm-run-path@^2.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.3.tgz#020f99351f0c02e399c674ba256e7c4d3b3dd298" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" @@ -8588,7 +8623,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: @@ -8752,6 +8787,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" + param-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" @@ -9074,15 +9117,6 @@ pixrem@^4.0.0: postcss "^6.0.0" reduce-css-calc "^1.2.7" -pkg-conf@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-1.1.3.tgz#378e56d6fd13e88bfb6f4a25df7a83faabddba5b" - dependencies: - find-up "^1.0.0" - load-json-file "^1.1.0" - object-assign "^4.0.1" - symbol "^0.2.1" - pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -9847,6 +9881,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" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -9898,6 +9936,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" @@ -10224,6 +10277,18 @@ read@^1.0.7: dependencies: mute-stream "~0.0.4" +"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.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -10245,18 +10310,6 @@ readable-stream@2.2.7: string_decoder "~1.0.0" util-deprecate "~1.0.1" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -11017,6 +11070,12 @@ 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" @@ -11318,10 +11377,6 @@ serviceworker-cache-polyfill@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" -set-blocking@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-1.0.0.tgz#cd5e5d938048df1ac92dfe92e1f16add656f5ec5" - 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" @@ -11416,14 +11471,6 @@ shell-quote@1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.0.tgz#3f6f2e4965cec565f65ff3861d644f879281a576" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shelljs@^0.7.5: version "0.7.8" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" @@ -11833,6 +11880,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" + stack-trace@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -11914,6 +11967,13 @@ stream-combiner2@^1.1.1: duplexer2 "~0.1.0" 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" @@ -12174,7 +12234,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3: +supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -12235,10 +12295,6 @@ symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -symbol@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/symbol/-/symbol-0.2.3.tgz#3b9873b8a901e47c6efe21526a3ac372ef28bbc7" - table@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" @@ -12250,7 +12306,7 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" -tapable@^0.2.7, tapable@~0.2.5: +tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -12661,7 +12717,14 @@ ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" -uglify-js@^2.6, uglify-js@^2.8.27: +uglify-es@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.1.tgz#93de0aad8a1bb629c8a316f686351bc4d6ece687" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + +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: @@ -12674,6 +12737,26 @@ 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" + +uglifyjs-webpack-plugin@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.1.2.tgz#8a9abc238d01a33daaf86fa9a84c7ebc1e67b0f9" + dependencies: + cacache "^10.0.0" + find-cache-dir "^1.0.0" + schema-utils "^0.3.0" + source-map "^0.6.1" + uglify-es "^3.2.0" + webpack-sources "^1.0.1" + worker-farm "^1.4.1" + uid-number@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.5.tgz#5a3db23ef5dbd55b81fce0ec9a2ac6fccdebb81e" @@ -12767,6 +12850,18 @@ uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" +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" + unique-stream@^2.0.2: version "2.2.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" @@ -12925,12 +13020,13 @@ url-join@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78" -url-loader@^0.5.9: - version "0.5.9" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295" +url-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" dependencies: loader-utils "^1.0.2" - mime "1.3.x" + mime "^1.4.1" + schema-utils "^0.3.0" url-parse-lax@^1.0.0: version "1.0.0" @@ -13204,7 +13300,7 @@ watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" -watchpack@^1.3.1: +watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" dependencies: @@ -13244,7 +13340,7 @@ webpack-assets-manifest@^1.0.0: lodash.pick "^4.0" mkdirp "^0.5" -webpack-dev-middleware@^1.11.0: +webpack-dev-middleware@^1.11.0, webpack-dev-middleware@^1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" dependencies: @@ -13286,7 +13382,7 @@ webpack-dev-server@^2.6.1: webpack-dev-middleware "^1.11.0" yargs "^6.6.0" -webpack-hot-middleware@^2.18.2: +webpack-hot-middleware@^2.21.0: version "2.21.0" resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.21.0.tgz#7b3c113a7a4b301c91e0749573c7aab28b414b52" dependencies: @@ -13321,51 +13417,36 @@ webpack-sources@^1.0.1: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-stats-plugin@^0.1.4: +webpack-stats-plugin@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.1.5.tgz#29e5f12ebfd53158d31d656a113ac1f7b86179d9" -webpack-validator@^2.2.7: - version "2.3.0" - resolved "https://registry.yarnpkg.com/webpack-validator/-/webpack-validator-2.3.0.tgz#235c6ea69aa930a90262bbbf9bd45ad8bd497310" - dependencies: - basename "0.1.2" - chalk "1.1.3" - commander "2.9.0" - common-tags "0.1.1" - cross-env "^3.1.1" - find-node-modules "^1.0.1" - joi "9.0.0-0" - lodash "4.11.1" - npmlog "2.0.3" - shelljs "0.7.0" - yargs "4.7.1" - -webpack@^2.0.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.7.0.tgz#b2a1226804373ffd3d03ea9c6bd525067034f6b1" +webpack@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.9.1.tgz#9a60aa544ed5d4d454c069e3f521aa007e02643c" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" - ajv "^4.7.0" - ajv-keywords "^1.1.1" + ajv "^5.1.5" + ajv-keywords "^2.0.0" async "^2.1.2" - enhanced-resolve "^3.3.0" + enhanced-resolve "^3.4.0" + escope "^3.6.0" interpret "^1.0.0" json-loader "^0.5.4" json5 "^0.5.1" loader-runner "^2.3.0" - loader-utils "^0.2.16" + loader-utils "^1.1.0" memory-fs "~0.4.1" mkdirp "~0.5.0" node-libs-browser "^2.0.0" source-map "^0.5.3" - supports-color "^3.1.0" - tapable "~0.2.5" - uglify-js "^2.8.27" - watchpack "^1.3.1" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" webpack-sources "^1.0.1" - yargs "^6.0.0" + yargs "^8.0.2" websocket-driver@>=0.5.1: version "0.7.0" @@ -13455,7 +13536,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: @@ -13625,13 +13706,13 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yaml-loader@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.4.0.tgz#4aae447d13c1aa73a989d8a2a5309b0b1a3ca353" +yaml-loader@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.5.0.tgz#86b1982d84a8e429e6647d93de9a0169e1c15827" dependencies: js-yaml "^3.5.2" -yargs-parser@^2.4.0, yargs-parser@^2.4.1: +yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" dependencies: @@ -13662,24 +13743,6 @@ yargs-parser@^8.0.0: dependencies: camelcase "^4.1.0" -yargs@4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.7.1.tgz#e60432658a3387ff269c028eacde4a512e438dff" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - pkg-conf "^1.1.2" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - set-blocking "^1.0.0" - string-width "^1.0.1" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.0" - yargs@8.0.2, yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" @@ -13734,7 +13797,7 @@ yargs@^4.8.1: y18n "^3.2.1" yargs-parser "^2.4.1" -yargs@^6.0.0, yargs@^6.0.1, yargs@^6.6.0: +yargs@^6.0.1, yargs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: From 6eeead6763d63a1decd522d49a5bb25547924158 Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Mon, 4 Dec 2017 16:24:16 -0500 Subject: [PATCH 2/3] update TS tests --- .../src/__tests__/gatsby-node.js | 78 ++++++++++++------- .../src/__tests__/__snapshots__/index.js.snap | 4 +- .../__snapshots__/highlight-code.js.snap | 4 +- .../src/__tests__/__snapshots__/index.js.snap | 4 +- 4 files changed, 55 insertions(+), 35 deletions(-) diff --git a/packages/gatsby-plugin-typescript/src/__tests__/gatsby-node.js b/packages/gatsby-plugin-typescript/src/__tests__/gatsby-node.js index 6047f44e6f5ec..c53ce436b1c4f 100644 --- a/packages/gatsby-plugin-typescript/src/__tests__/gatsby-node.js +++ b/packages/gatsby-plugin-typescript/src/__tests__/gatsby-node.js @@ -1,7 +1,6 @@ -jest.mock(`../resolve`, () => ( - (module) => `/resolved/path/${module}` -)) +jest.mock(`../resolve`, () => module => `/resolved/path/${module}`) +const babelPluginRemoveQueries = require(`babel-plugin-remove-graphql-queries`) const { resolvableExtensions, modifyWebpackConfig, @@ -9,30 +8,48 @@ const { } = require(`../gatsby-node`) describe(`gatsby-plugin-typescript`, () => { - it(`returns correct extensions`, () => { - expect(resolvableExtensions()).toMatchSnapshot() - }) + let args - it(`modifies webpack config`, () => { + function getLoader() { + const call = args.boundActionCreators.setWebpackConfig.mock.calls[0] + return call[0].module.rules[0] + } + + beforeEach(() => { const boundActionCreators = { setWebpackConfig: jest.fn(), } - const loaders = { js: () => `babel-loader` } + const loaders = { js: jest.fn(() => `babel-loader`) } + args = { boundActionCreators, loaders } + }) - modifyWebpackConfig({ boundActionCreators, loaders }, { compilerOptions: {} }) + it(`returns correct extensions`, () => { + expect(resolvableExtensions()).toMatchSnapshot() + }) + + it(`modifies webpack config`, () => { + modifyWebpackConfig(args, { compilerOptions: {} }) - expect(boundActionCreators.setWebpackConfig).toHaveBeenCalledTimes(1) - const lastCall = boundActionCreators.setWebpackConfig.mock.calls.pop() + expect(args.boundActionCreators.setWebpackConfig).toHaveBeenCalledTimes(1) + const lastCall = args.boundActionCreators.setWebpackConfig.mock.calls.pop() expect(lastCall).toMatchSnapshot() }) + it(`adds the remove graphql queries plugin`, () => { + modifyWebpackConfig(args, { compilerOptions: {} }) + + expect(args.loaders.js).toHaveBeenCalledTimes(1) + const lastCall = args.loaders.js.mock.calls.pop() + + expect(lastCall[0]).toEqual({ + plugins: [babelPluginRemoveQueries], + }) + }) + it(`passes the configuration to the ts-loader plugin`, () => { - const config = { - loader: jest.fn(), - } const options = { compilerOptions: { foo: `bar` }, transpileOnly: false } - modifyWebpackConfig({ config }, options) + modifyWebpackConfig(args, options) const expectedOptions = { compilerOptions: { @@ -40,41 +57,44 @@ describe(`gatsby-plugin-typescript`, () => { experimentalDecorators: true, jsx: `react`, foo: `bar`, - module: `commonjs`, + module: `es6`, }, transpileOnly: false, } - expect(config.loader).toHaveBeenCalledWith(`typescript`, { + expect(getLoader()).toEqual({ test: /\.tsx?$/, - loaders: [ - `babel?${JSON.stringify({ plugins: [``] })}`, - `ts-loader?${JSON.stringify(expectedOptions)}`, + use: [ + `babel-loader`, + { + loader: `/resolved/path/ts-loader`, + options: expectedOptions, + }, ], }) }) it(`uses default configuration for the ts-loader plugin when no config is provided`, () => { - const config = { - loader: jest.fn(), - } - modifyWebpackConfig({ config }, { compilerOptions: {} }) + modifyWebpackConfig(args, { compilerOptions: {} }) const expectedOptions = { compilerOptions: { target: `esnext`, experimentalDecorators: true, jsx: `react`, - module: `commonjs`, + module: `es6`, }, transpileOnly: true, } - expect(config.loader).toHaveBeenCalledWith(`typescript`, { + expect(getLoader()).toEqual({ test: /\.tsx?$/, - loaders: [ - `babel?${JSON.stringify({ plugins: [``] })}`, - `ts-loader?${JSON.stringify(expectedOptions)}`, + use: [ + `babel-loader`, + { + loader: `/resolved/path/ts-loader`, + options: expectedOptions, + }, ], }) }) diff --git a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap index 22fe5ea155b09..2351ed03e900c 100644 --- a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap @@ -1000,11 +1000,11 @@ Object { }, "type": "html", "value": "
-
# Yarn
+        
# Yarn
 yarn init
 yarn add react react-dom
 
-# NPM
+# NPM
 npm init
 npm install --save react react-dom
 
diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap index f548d6d028e57..3eda4defb7ef6 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap @@ -24,10 +24,10 @@ exports[`highlight code and lines with PrismJS for language jsx 1`] = ` <div> <h1>Counter</h1> <p>current count: {this.state.count}</p> - <button onClick={() => this.setState({ count: this.state.count + 1 })}> + <button onClick={() => this.setState({ count: this.state.count + 1 })}> plus </button> - <button onClick={() => this.setState({ count: this.state.count - 1 })}> + <button onClick={() => this.setState({ count: this.state.count - 1 })}> minus </button> </div> diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap index 5b2e7c22e5abb..c351f0b286f18 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap @@ -23,7 +23,7 @@ Object { }, "type": "html", "value": "
-
// Fake
+      
// Fake
 
", }, @@ -67,7 +67,7 @@ Object { }, "type": "html", "value": "
-
// Fake
+      
// Fake
 
", }, From bfb558bb6dedadb9dac7f2c130710e495d42ac1a Mon Sep 17 00:00:00 2001 From: Jason Quense Date: Tue, 5 Dec 2017 08:33:26 -0500 Subject: [PATCH 3/3] fix uglify option --- packages/gatsby/src/utils/webpack-utils.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/gatsby/src/utils/webpack-utils.js b/packages/gatsby/src/utils/webpack-utils.js index 84e37d8df99a5..36ae994171365 100644 --- a/packages/gatsby/src/utils/webpack-utils.js +++ b/packages/gatsby/src/utils/webpack-utils.js @@ -379,10 +379,8 @@ module.exports = async ({ */ plugins.uglify = ({ uglifyOptions, ...options } = {}) => new UglifyPlugin({ - parallel: { - cache: true, - workers: os.cpus().length - 1, - }, + cache: true, + parallel: os.cpus().length - 1, exclude: /\.min\.js/, sourceMap: true, uglifyOptions: {