diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d1fe1d4a8 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +packages/docz-bundler-webpack/src/config.ts diff --git a/packages/docz-bundler-webpack/package.json b/packages/docz-bundler-webpack/package.json index 769dc58f0..b6dd62053 100644 --- a/packages/docz-bundler-webpack/package.json +++ b/packages/docz-bundler-webpack/package.json @@ -8,36 +8,40 @@ "typings": "./dist/index.d.ts", "license": "MIT", "scripts": { - "clean": "trash dist", - "compile": "tsc -p tsconfig.json", - "dev": "libundler watch --ts --external all", - "build": "libundler build --ts --external all --compress --sourcemap", - "fix": "run-s fix:*", + "dev": "libundler watch --ts -e all", + "build": "libundler build --ts -e all -c -sm", "fix:prettier": "prettier \"src/**/*.{ts,tsx}\" --write", - "fix:tslint": "tslint --fix --project ." + "fix:tslint": "yarn run tslint --fix", + "tslint": "tslint --project ." }, "dependencies": { "@babel/core": "^7.0.0-beta.44", "@babel/runtime": "^7.0.0-beta.44", - "babel-polyfill": "^7.0.0-beta.3", "babel-loader": "^8.0.0-beta.1", + "babel-polyfill": "^7.0.0-beta.3", "babel-preset-react-app": "^4.0.0-next.b2fd8db8", + "express": "^4.16.3", "deepmerge": "^2.1.0", + "docz-core": "^0.0.1", + "file-loader": "^1.1.11", "html-webpack-plugin": "^3.2.0", "load-cfg": "^0.0.1", - "docz-core": "^0.0.1", "react-dev-utils": "^5.0.1", "react-hot-loader": "^4.0.1", "thread-loader": "^1.1.5", + "url-loader": "^1.0.1", "webpack": "^4.5.0", + "webpack-chain": "^4.6.0", "webpack-dev-middleware": "^3.1.2", - "webpack-dev-server": "^3.1.3" + "webpack-dev-server": "^3.1.3", + "webpackbar": "^2.6.1" }, "devDependencies": { "@types/deepmerge": "^2.1.0", "@types/html-webpack-plugin": "^2.30.3", "@types/node": "9.6.4", "@types/webpack": "^4.1.3", + "@types/webpack-chain": "^4.0.2", "@types/webpack-dev-server": "^2.9.4" } } diff --git a/packages/docz-bundler-webpack/src/config.dev.ts b/packages/docz-bundler-webpack/src/config.dev.ts deleted file mode 100644 index d841c41a4..000000000 --- a/packages/docz-bundler-webpack/src/config.dev.ts +++ /dev/null @@ -1,81 +0,0 @@ -import * as path from 'path' -import { Configuration } from 'webpack' -import * as webpack from 'webpack' -import * as HtmlWebpackPlugin from 'html-webpack-plugin' -import * as WebpackDevServer from 'webpack-dev-server' -import { ConfigArgs as Config } from 'docz-core' -import webpackDevServerUtils from 'react-dev-utils/WebpackDevServerUtils' - -import { devServerConfig } from './config-devserver' -import * as loaders from './loaders' - -export const config = ({ paths, host }: Config) => (): Configuration => ({ - mode: 'development', - devtool: '#source-map', - context: paths.root, - entry: [ - require.resolve('babel-polyfill'), - require.resolve('react-dev-utils/webpackHotDevClient'), - paths.indexJs, - ], - output: { - pathinfo: true, - path: paths.dist, - publicPath: '/', - filename: 'static/js/[name].js', - sourceMapFilename: 'static/js/[name].js.map', - crossOriginLoading: 'anonymous', - devtoolModuleFilenameTemplate: (info: any) => - path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'), - }, - module: { - rules: [ - { - oneOf: [ - { - test: /\.(js|jsx|mjs)$/, - exclude: /node_modules/, - include: [paths.root, paths.docz], - use: [require.resolve('thread-loader'), loaders.babel], - }, - ], - }, - ], - }, - resolve: { - extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx'], - modules: ['node_modules', paths.root], - alias: { - '@babel/runtime': path.dirname( - require.resolve('@babel/runtime/package.json') - ), - }, - }, - plugins: [ - new webpack.NamedModulesPlugin(), - new webpack.HotModuleReplacementPlugin(), - new webpack.NoEmitOnErrorsPlugin(), - new HtmlWebpackPlugin({ - inject: true, - template: paths.indexHtml, - }), - ], -}) - -export const compiler = ({ paths, port, host, protocol }: Config) => ( - config: Configuration -) => { - const appName = require(paths.packageJson).name - const urls = webpackDevServerUtils.prepareUrls(protocol, host, port) - - return webpackDevServerUtils.createCompiler( - webpack, - config, - appName, - urls, - true - ) -} - -export const server = (config: Config) => (compiler: any): WebpackDevServer => - new WebpackDevServer(compiler, devServerConfig(config)) diff --git a/packages/docz-bundler-webpack/src/config.ts b/packages/docz-bundler-webpack/src/config.ts new file mode 100644 index 000000000..e78896af6 --- /dev/null +++ b/packages/docz-bundler-webpack/src/config.ts @@ -0,0 +1,197 @@ +import * as path from 'path' +import * as webpack from 'webpack' +import { Configuration } from 'webpack' +import { ConfigArgs } from 'docz-core' +import { load } from 'load-cfg' +import Webpackbar from 'webpackbar' +import HtmlWebpackPlugin from 'html-webpack-plugin' +import Config from 'webpack-chain' +import merge from 'deepmerge' + +const INLINE_LIMIT = 10000 + +export const createConfig = (args: ConfigArgs) => (): Configuration => { + const { paths, env, debug } = args + + const isProd = env === 'production' + const config = new Config() + + /** + * general + */ + config.context(paths.root) + config.set('mode', isProd && !debug ? 'production' : 'development') + + config.when(debug, cfg => cfg.devtool('source-map')) + config.when(!isProd, cfg => cfg.devtool('cheap-module-eval-source-map')) + + config.node.merge({ + child_process: 'empty', + dgram: 'empty', + fs: 'empty', + net: 'empty', + tls: 'empty', + }) + + /** + * output + */ + const outputProd = (output: Config.Output) => + output + .filename('static/js/[name].[chunkhash:8].js') + .sourceMapFilename('static/js/[name].[chunkhash:8].js.map') + .publicPath(paths.servedPath) + + const outputDev = (output: Config.Output) => + output + .filename('static/js/[name].js') + .sourceMapFilename('static/js/[name].js.map') + .publicPath('/') + + config.output + .pathinfo(true) + .path(paths.dist) + .when(isProd, outputProd, outputDev ) + .crossOriginLoading('anonymous') + + /** + * entries + */ + + const addHotClientEntry = (entry: Config.EntryPoint) => + entry.add(require.resolve('react-dev-utils/webpackHotDevClient')) + + config + .entry('app') + .when(!isProd, addHotClientEntry) + .add(require.resolve('babel-polyfill')) + .add(paths.indexJs) + + /** + * resolve + */ + + config.resolve + .set('symlinks', true) + .alias + .set('@babel/runtime', path.dirname( + require.resolve('@babel/runtime/package.json') + )) + + config.resolve + .extensions + .merge(['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx']) + .end() + .modules + .add('node_modules') + .add(paths.root) + + config.resolveLoader + .set('symlinks', true) + .modules + .add('node_modules') + .add(paths.root) + + /** + * loaders + */ + + const babelrc = merge(load('babel', null), { + babelrc: false, + cacheDirectory: true, + highlightCode: true, + plugins: [require.resolve('react-hot-loader/babel')], + presets: [require.resolve('babel-preset-react-app')], + }) + + config.module + .rule('js') + .test(/\.js?x$/) + .include + .add(paths.root) + .add(paths.docz) + .end() + .exclude + .add(/node_modules/) + .end() + .use('thread-loader') + .loader(require.resolve('thread-loader')) + .end() + .use('babel-loader') + .loader(require.resolve('babel-loader')) + .options(babelrc) + + config.module + .rule('images') + .test(/\.(png|jpe?g|gif)(\?.*)?$/) + .use('url-loader') + .loader(require.resolve('url-loader')) + .options({ + limit: INLINE_LIMIT, + name: `static/img/[name].[hash:8].[ext]`, + }) + + config.module + .rule('svg') + .test(/\.(svg)(\?.*)?$/) + .use('file-loader') + .loader(require.resolve('file-loader')) + .options({ + name: `static/img/[name].[hash:8].[ext]`, + }) + + config.module + .rule('media') + .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/) + .use('url-loader') + .loader(require.resolve('url-loader')) + .options({ + limit: INLINE_LIMIT, + name: `static/media/[name].[hash:8].[ext]`, + }) + + config.module + .rule('fonts') + .test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i) + .use('url-loader') + .loader(require.resolve('url-loader')) + .options({ + limit: INLINE_LIMIT, + name: `static/fonts/[name].[hash:8].[ext]`, + }) + + /** + * plugins + */ + + config.when(!isProd, cfg => + cfg + .plugin('hot-module-replacement-plugin') + .use(webpack.HotModuleReplacementPlugin) + ) + + config + .plugin('named-modules-plugin') + .use(webpack.NamedModulesPlugin) + .end() + .plugin('no-emit-errors') + .use(webpack.NoEmitOnErrorsPlugin) + .end() + .plugin('html-webpack-plugin') + .use(HtmlWebpackPlugin, [{ + inject: true, + template: paths.indexHtml, + }]) + + config.when(!debug, cfg => + cfg + .plugin('webpackbar') + .use(Webpackbar, [{ + color: '#41b883', + compiledIn: false, + name: 'Client', + }]) + ) + + return config.toConfig() +} diff --git a/packages/docz-bundler-webpack/src/config-devserver.ts b/packages/docz-bundler-webpack/src/devserver.ts similarity index 68% rename from packages/docz-bundler-webpack/src/config-devserver.ts rename to packages/docz-bundler-webpack/src/devserver.ts index 37cc47403..e351b6060 100644 --- a/packages/docz-bundler-webpack/src/config-devserver.ts +++ b/packages/docz-bundler-webpack/src/devserver.ts @@ -2,33 +2,30 @@ import { ConfigArgs } from 'docz-core' import { Application } from 'express' import errorOverlayMiddleware from 'react-dev-utils/errorOverlayMiddleware' -export const PROTOCOL = process.env.HTTPS === 'true' ? 'https' : 'http' -export const HOST = process.env.HOST || '0.0.0.0' - -export const devServerConfig = ({ paths }: ConfigArgs) => ({ - compress: true, +export const devServerConfig = ({ paths, host, protocol }: ConfigArgs) => ({ + host, + before(app: Application): void { + app.use(errorOverlayMiddleware()) + }, clientLogLevel: 'none', + compress: true, contentBase: paths.docz, - watchContentBase: true, + historyApiFallback: { + disableDotRule: true, + }, hot: true, - quiet: true, + https: protocol === 'https', noInfo: true, - publicPath: '/', - https: PROTOCOL === 'https', - host: HOST, overlay: false, - watchOptions: { - ignored: /node_modules/, - }, + publicPath: '/', + quiet: true, stats: { - colors: true, - chunks: false, chunkModules: false, + chunks: false, + colors: true, }, - historyApiFallback: { - disableDotRule: true, - }, - before(app: Application) { - app.use(errorOverlayMiddleware()) + watchContentBase: true, + watchOptions: { + ignored: /node_modules/, }, }) diff --git a/packages/docz-bundler-webpack/src/index.ts b/packages/docz-bundler-webpack/src/index.ts index 204befcb2..5551f94aa 100644 --- a/packages/docz-bundler-webpack/src/index.ts +++ b/packages/docz-bundler-webpack/src/index.ts @@ -1,15 +1,30 @@ import { Configuration } from 'webpack' -import { createBundler, IBundlerCreate } from 'docz-core' +import { ConfigArgs, createBundler, BundlerCreate } from 'docz-core' +import * as webpack from 'webpack' import * as WebpackDevServer from 'webpack-dev-server' +import WebpackDevServerUtils from 'react-dev-utils/WebpackDevServerUtils' -import { config, compiler, server } from './config.dev' +import { devServerConfig } from './devserver' +import { createConfig as config } from './config' -export const bundler: IBundlerCreate< +export const compiler = ({ paths, port, host, protocol }: ConfigArgs) => ( + cfg: Configuration +) => { + const appName = require(paths.packageJson).name + const urls = WebpackDevServerUtils.prepareUrls(protocol, host, port) + + return WebpackDevServerUtils.createCompiler(webpack, cfg, appName, urls, true) +} + +export const server = (cfg: ConfigArgs) => (comp: any): WebpackDevServer => + new WebpackDevServer(comp, devServerConfig(cfg)) + +export const bundler: BundlerCreate< Configuration, WebpackDevServer > = createBundler({ - id: 'webpack', + compiler, config, server, - compiler, + id: 'webpack', }) diff --git a/packages/docz-bundler-webpack/src/loaders.ts b/packages/docz-bundler-webpack/src/loaders.ts deleted file mode 100644 index 788942192..000000000 --- a/packages/docz-bundler-webpack/src/loaders.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Loader } from 'webpack' -import { load } from 'load-cfg' -import merge from 'deepmerge' - -export const babel: Loader = { - loader: require.resolve('babel-loader'), - options: merge(load('babel', null), { - babelrc: false, - cacheDirectory: true, - highlightCode: true, - presets: [require.resolve('babel-preset-react-app')], - plugins: [require.resolve('react-hot-loader/babel')], - }), -} diff --git a/packages/docz-bundler-webpack/src/types.d.ts b/packages/docz-bundler-webpack/src/types.d.ts index 940e35d3a..e7c740865 100644 --- a/packages/docz-bundler-webpack/src/types.d.ts +++ b/packages/docz-bundler-webpack/src/types.d.ts @@ -1,2 +1,3 @@ declare module 'react-dev-utils/errorOverlayMiddleware' declare module 'react-dev-utils/WebpackDevServerUtils' +declare module 'webpackbar' diff --git a/tslint.json b/tslint.json index 4598a818e..85ab75cff 100644 --- a/tslint.json +++ b/tslint.json @@ -7,9 +7,11 @@ // TODO: allow devDependencies only in **/*.spec.ts files: // waiting on https://github.com/palantir/tslint/pull/3708 + "no-unused-expression": [true, "allow-fast-null-checks"], "no-implicit-dependencies": [true, "dev"], "no-duplicate-imports": false, "no-submodule-imports": false, + "no-console": false, // Recommended built-in rules "no-var-keyword": true, diff --git a/yarn.lock b/yarn.lock index 7d42f9a5e..a01f4e567 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1440,6 +1440,12 @@ dependencies: source-map "^0.6.1" +"@types/webpack-chain@^4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@types/webpack-chain/-/webpack-chain-4.0.2.tgz#f7e91b0bb37ed3f4cf3b092f6733bcb1d60931ed" + dependencies: + "@types/webpack" "*" + "@types/webpack-dev-server@^2.9.4": version "2.9.4" resolved "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#cc3c398330ba87c0f1c7bfd020cfafb7bb895493" @@ -1522,7 +1528,7 @@ ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" -ajv-keywords@^3.1.0: +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" @@ -1542,6 +1548,15 @@ ajv@^5.2.3, ajv@^5.3.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.0.1: + version "6.4.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + uri-js "^3.0.2" + ajv@^6.1.0: version "6.3.0" resolved "https://registry.npmjs.org/ajv/-/ajv-6.3.0.tgz#1650a41114ef00574cac10b8032d8f4c14812da7" @@ -2484,6 +2499,15 @@ connect-history-api-fallback@^1.3.0: version "1.5.0" resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" +consola@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/consola/-/consola-1.3.0.tgz#b5effe41c4ecdce971d79268d72b8f9bde0a8c7a" + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + lodash "^4.17.5" + std-env "^1.1.0" + console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2905,6 +2929,10 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + deepmerge@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.0.tgz#511a54fff405fc346f0240bb270a3e9533a31102" @@ -3603,6 +3631,13 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -4443,7 +4478,7 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" -is-ci@^1.0.10: +is-ci@^1.0.10, is-ci@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: @@ -4575,6 +4610,10 @@ is-number@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" +is-number@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-5.0.0.tgz#c393bc471e65de1a10a6abcb20efeb12d2b88166" + is-obj@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -5044,7 +5083,7 @@ log-symbols@^2.1.0: dependencies: chalk "^2.0.1" -log-update@^2.1.0: +log-update@^2.1.0, log-update@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" dependencies: @@ -5258,6 +5297,10 @@ mime@1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" +mime@^2.0.3: + version "2.3.1" + resolved "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + mime@^2.1.0: version "2.2.0" resolved "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" @@ -5414,6 +5457,10 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +nanoseconds@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/nanoseconds/-/nanoseconds-1.0.1.tgz#596efc62110766be1ede671fedd861f5562318d3" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6006,6 +6053,13 @@ pretty-ms@^3.1.0: parse-ms "^1.0.0" plur "^2.1.2" +pretty-time@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.0.0.tgz#544784adecaa2cd7d045ff8a8f1d4791c8e06e23" + dependencies: + is-number "^5.0.0" + nanoseconds "^1.0.0" + private@^0.1.6: version "0.1.8" resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -6098,6 +6152,10 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + q@^1.4.1, q@^1.5.1: version "1.5.1" resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -6737,7 +6795,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -schema-utils@^0.4.2, schema-utils@^0.4.5: +schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5: version "0.4.5" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" dependencies: @@ -7098,6 +7156,12 @@ static-extend@^0.1.1: version "1.4.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" +std-env@^1.1.0, std-env@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-1.3.0.tgz#8ce754a401a61f1ac49c8eb55f2a8c0c63d54954" + dependencies: + is-ci "^1.1.0" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -7254,6 +7318,17 @@ table@4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +table@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + tapable@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" @@ -7656,6 +7731,12 @@ upper-case@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" +uri-js@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -7664,6 +7745,14 @@ url-join@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" +url-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^0.4.3" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -7799,6 +7888,12 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" +webpack-chain@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.6.0.tgz#3ff51bd6241ed78a62691b8da7b9dec3fcc346a0" + dependencies: + deepmerge "^1.5.2" + webpack-dev-middleware@3.1.2, webpack-dev-middleware@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.1.2.tgz#be4d0c36a4fa7d69d6904093418514caa9df3a40" @@ -7884,6 +7979,21 @@ webpack@^4.5.0: watchpack "^1.5.0" webpack-sources "^1.0.1" +webpackbar@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-2.6.1.tgz#d1aff0665c43635ff35672be2f2463d1176bdb6f" + dependencies: + chalk "^2.3.2" + consola "^1.2.0" + figures "^2.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + log-update "^2.3.0" + pretty-time "^1.0.0" + schema-utils "^0.4.5" + std-env "^1.3.0" + table "^4.0.3" + websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"