diff --git a/examples/basic/package.json b/examples/basic/package.json index 27602df53..309bd2459 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "license": "MIT", "scripts": { - "dev": "docz dev" + "dev": "docz dev", + "build": "docz build" }, "dependencies": { "docz": "^0.0.1", diff --git a/packages/docz-core/librc.js b/packages/docz-core/librc.js index fc6060880..a7d95133b 100644 --- a/packages/docz-core/librc.js +++ b/packages/docz-core/librc.js @@ -2,6 +2,11 @@ const copy = require('rollup-plugin-cpy') const pkg = require('./package.json') module.exports = { + external: Object.keys(pkg.dependencies).concat([ + 'react-dev-utils/FileSizeReporter', + 'react-dev-utils/formatWebpackMessages', + 'react-dev-utils/printBuildError', + ]), plugins: [ copy([ { diff --git a/packages/docz-core/package.json b/packages/docz-core/package.json index f171903d8..54c39e66e 100644 --- a/packages/docz-core/package.json +++ b/packages/docz-core/package.json @@ -25,12 +25,12 @@ "@mdx-js/mdx": "^0.9.0", "@mdx-js/mdxast": "^0.7.2", "@sindresorhus/slugify": "^0.3.0", - "@types/shelljs": "^0.8.0", "art-template": "^4.12.2", "babel-loader": "^8.0.0-beta.3", "babel-plugin-react-docgen": "^1.9.0", "babel-polyfill": "^7.0.0-beta.3", "babel-preset-react-app": "^4.0.0-next.b2fd8db8", + "chalk": "^2.4.1", "chokidar": "^2.0.3", "connect-history-api-fallback": "^1.5.0", "deepmerge": "^2.1.0", @@ -39,6 +39,7 @@ "fast-glob": "^2.2.2", "file-loader": "^1.1.11", "friendly-errors-webpack-plugin": "^1.7.0", + "fs-extra": "^6.0.1", "happypack": "^5.0.0", "hast-util-to-string": "^1.0.1", "html-webpack-plugin": "^3.2.0", @@ -48,13 +49,15 @@ "load-cfg": "^0.0.1", "lodash.get": "^4.4.2", "prettier": "^1.12.0", + "react-dev-utils": "^5.0.1", "react-hot-loader": "4.2.0", "remark-frontmatter": "^1.2.0", "remark-parse": "^5.0.0", "remark-parse-yaml": "^0.0.1", "resolve": "^1.7.1", - "shelljs": "^0.8.2", + "signale": "^1.1.0", "to-vfile": "^4.0.0", + "uglifyjs-webpack-plugin": "^1.2.5", "ulid": "^2.3.0", "unified": "^7.0.0", "unist-util-find": "^1.0.1", @@ -64,17 +67,20 @@ "url-loader": "^1.0.1", "webpack": "^4.8.3", "webpack-chain": "^4.8.0", + "webpack-manifest-plugin": "^2.0.3", "webpack-serve": "^1.0.2", "webpackbar": "^2.6.1", "ws": "^5.2.0", "yargs": "^11.0.0" }, "devDependencies": { + "@types/chalk": "^2.2.0", "@types/chokidar": "^1.7.5", "@types/connect-history-api-fallback": "^1.3.1", "@types/deepmerge": "^2.1.0", "@types/del": "^3.0.1", "@types/express": "^4.11.1", + "@types/fs-extra": "^5.0.2", "@types/html-webpack-plugin": "^2.30.3", "@types/lodash.get": "^4.4.3", "@types/node": "10.1.2", diff --git a/packages/docz-core/src/DataServer.ts b/packages/docz-core/src/DataServer.ts index b70d0b02c..f2fecf5ea 100644 --- a/packages/docz-core/src/DataServer.ts +++ b/packages/docz-core/src/DataServer.ts @@ -57,7 +57,7 @@ export class DataServer { this.server.on('connection', handleConnection) this.server.on('close', () => watcher.close()) - await Entries.writeApp(config) + await Entries.writeApp(config, true) await Entries.writeImports(await entries.getMap()) } diff --git a/packages/docz-core/src/Entries.ts b/packages/docz-core/src/Entries.ts index 3ce6401e5..36e42fe9e 100644 --- a/packages/docz-core/src/Entries.ts +++ b/packages/docz-core/src/Entries.ts @@ -1,9 +1,10 @@ +import * as fs from 'fs-extra' import * as glob from 'fast-glob' import * as path from 'path' import * as paths from './config/paths' import { propOf } from './utils/helpers' -import { mkd, touch, compiled, readIfExist } from './utils/fs' +import { touch, compiled, readIfExist } from './utils/fs' import { Entry, parseMdx } from './Entry' import { Config } from './commands/args' @@ -11,7 +12,7 @@ import { Config } from './commands/args' const fromTemplates = (file: string) => path.join(paths.templates, file) const fromDocz = (file: string) => path.join(paths.docz, file) -const writeAppFiles = async (config: Config): Promise => { +const writeAppFiles = async (config: Config, dev: boolean): Promise => { const { plugins, title, description, theme } = config const wrappers = propOf(plugins, 'wrapper') @@ -27,6 +28,7 @@ const writeAppFiles = async (config: Config): Promise => { const rawRootJs = root({ theme, wrappers, + isProd: !dev, websocketUrl: `ws://${config.websocketHost}:${config.websocketPort}`, }) @@ -47,21 +49,36 @@ const writeAppFiles = async (config: Config): Promise => { await touch(paths.indexHtml, rawIndexHtml) } -const writeImports = async (entries: EntryMap): Promise => { +const writeImports = async (map: EntryMap): Promise => { const imports = await compiled(fromTemplates('imports.tpl.js')) - await touch(paths.importsJs, imports({ entries: Object.values(entries) })) + await touch(paths.importsJs, imports({ entries: Object.values(map) })) +} + +const writeData = async (map: EntryMap, config: Config): Promise => { + const configObj = { + title: config.title, + description: config.description, + ...config.themeConfig, + } + + await touch(paths.entriesJson, JSON.stringify(map, null, 2)) + await touch(paths.configJson, JSON.stringify(configObj, null, 2)) } export type EntryMap = Record export class Entries { - public static async writeApp(config: Config): Promise { - mkd(paths.app) - await writeAppFiles(config) + public static async writeApp(config: Config, dev?: boolean): Promise { + await fs.ensureDir(paths.app) + await writeAppFiles(config, Boolean(dev)) + } + + public static async writeImports(map: EntryMap): Promise { + await writeImports(map) } - public static async writeImports(entries: EntryMap): Promise { - await writeImports(entries) + public static async writeData(map: EntryMap, config: Config): Promise { + await writeData(map, config) } public all: EntryMap diff --git a/packages/docz-core/src/bundlers/webpack/config.ts b/packages/docz-core/src/bundlers/webpack/config.ts index 3251bf23f..3cee4c535 100644 --- a/packages/docz-core/src/bundlers/webpack/config.ts +++ b/packages/docz-core/src/bundlers/webpack/config.ts @@ -6,11 +6,14 @@ import Config from 'webpack-chain' import HappyPack from 'happypack' import friendlyErrors from 'friendly-errors-webpack-plugin' import htmlWebpackPlugin from 'html-webpack-plugin' +import manifestPlugin from 'webpack-manifest-plugin' +import UglifyJs from 'uglifyjs-webpack-plugin' import matter from 'remark-frontmatter' import { Config as ConfigObj } from '../../commands/args' import { plugin as mdastPlugin } from '../../utils/plugin-mdast' import { plugin as hastPlugin } from '../../utils/plugin-hast' +import { Env } from './' const INLINE_LIMIT = 10000 @@ -67,8 +70,8 @@ const setupHappypack = (config: Config, babelrc: any) => { config.plugin('happypack-mdx').use(HappyPack, mdx) } -export const createConfig = (args: ConfigObj): Config => { - const { paths, env, debug } = args +export const createConfig = (args: ConfigObj, env: Env): Config => { + const { paths, debug } = args const srcPath = path.resolve(paths.root, args.src) const isProd = env === 'production' @@ -78,7 +81,7 @@ export const createConfig = (args: ConfigObj): Config => { * general */ config.context(paths.root) - config.set('mode', isProd && !debug ? 'production' : 'development') + config.set('mode', env) config.when(debug, cfg => cfg.devtool('source-map')) config.when(!isProd, cfg => cfg.devtool('cheap-module-eval-source-map')) @@ -129,6 +132,38 @@ export const createConfig = (args: ConfigObj): Config => { }, }) + if (isProd) { + config.merge({ + optimization: { + minimizer: [ + new UglifyJs({ + uglifyOptions: { + parse: { + ecma: 8, + }, + compress: { + ecma: 5, + warnings: false, + comparisons: false, + }, + mangle: { + safari10: true, + }, + output: { + ecma: 5, + comments: false, + ascii_only: true, + }, + }, + parallel: true, + cache: true, + sourceMap: true, + }), + ], + }, + }) + } + /** * entries */ @@ -240,14 +275,34 @@ export const createConfig = (args: ConfigObj): Config => { setupHappypack(config, getBabelRc(args.debug)) + config.plugin('assets-plugin').use(manifestPlugin, [ + { + filename: 'assets.json', + }, + ]) + config.plugin('html-webpack-plugin').use(htmlWebpackPlugin, [ { inject: true, template: paths.indexHtml, + ...(isProd && { + minify: { + removeComments: true, + collapseWhitespace: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + removeStyleLinkTypeAttributes: true, + keepClosingSlash: true, + minifyJS: true, + minifyCSS: true, + minifyURLs: true, + }, + }), }, ]) - config.when(!debug, cfg => { + config.when(!debug && !isProd, cfg => { cfg.plugin('webpackbar').use(webpackBarPlugin, [ { color: '#41b883', @@ -258,5 +313,6 @@ export const createConfig = (args: ConfigObj): Config => { cfg.plugin('friendly-errors').use(friendlyErrors) }) + config.performance.hints(false) return config } diff --git a/packages/docz-core/src/bundlers/webpack/index.ts b/packages/docz-core/src/bundlers/webpack/index.ts index 0aa8f923d..3252a5f13 100644 --- a/packages/docz-core/src/bundlers/webpack/index.ts +++ b/packages/docz-core/src/bundlers/webpack/index.ts @@ -7,6 +7,8 @@ import { createConfig } from './config' import { Bundler, BundlerServer } from '../../Bundler' import { Config as Args } from '../../commands/args' +export type Env = 'production' | 'development' + export const server = (args: Args) => async ( config: CFG ): Promise => { @@ -26,8 +28,8 @@ export const server = (args: Args) => async ( } } -export const bundler = (args: Args): Bundler => { - const config: any = createConfig(args).toConfig() +export const bundler = (args: Args, env: Env): Bundler => { + const config: any = createConfig(args, env).toConfig() return new Bundler({ args, diff --git a/packages/docz-core/src/commands/args.ts b/packages/docz-core/src/commands/args.ts index dd4fdf346..61ecee6db 100644 --- a/packages/docz-core/src/commands/args.ts +++ b/packages/docz-core/src/commands/args.ts @@ -51,10 +51,6 @@ export const args = (yargs: any) => { type: 'string', default: 'docz-theme-default', }) - yargs.positional('env', { - type: 'boolean', - default: process.env.NODE_ENV || 'development', - }) yargs.positional('debug', { type: 'boolean', default: process.env.DEBUG || false, diff --git a/packages/docz-core/src/commands/build.ts b/packages/docz-core/src/commands/build.ts new file mode 100644 index 000000000..e163c00dd --- /dev/null +++ b/packages/docz-core/src/commands/build.ts @@ -0,0 +1,136 @@ +import * as fs from 'fs-extra' +import chalk from 'chalk' +import logger from 'signale' +import webpack, { Configuration } from 'webpack' +import FSR from 'react-dev-utils/FileSizeReporter' +import formatWebpackMessages from 'react-dev-utils/formatWebpackMessages' +import printBuildError from 'react-dev-utils/printBuildError' + +import * as paths from '../config/paths' +import { Entries } from '../Entries' +import { loadConfig } from '../utils/load-config' +import { webpack as webpackBundler } from '../bundlers' +import { Config } from './args' + +process.env.BABEL_ENV = process.env.BABEL_ENV || 'production' +process.env.NODE_ENV = process.env.NODE_ENV || 'production' + +const { measureFileSizesBeforeBuild, printFileSizesAfterBuild } = FSR +const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024 +const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024 + +const hasCiEnvVar = () => + process.env.CI && + (typeof process.env.CI !== 'string' || + process.env.CI.toLowerCase() !== 'false') + +const copyPublicFolder = async (): Promise => { + if (await fs.pathExists(paths.appPublic)) { + await fs.copySync(paths.appPublic, paths.distPublic, { + dereference: true, + filter: file => file !== paths.indexHtml, + }) + } +} + +const compile = (config: Configuration) => + new Promise((resolve, reject) => { + let compiler + try { + compiler = webpack(config) + } catch (err) { + onError(err) + } + compiler && + compiler.run((err, stats) => { + if (err) reject(err) + resolve(stats) + }) + }) + +const builder = async (config: Configuration, previousFileSizes: any) => { + logger.start('Creating an optimized production build...') + + return new Promise(async (resolve, reject) => { + try { + const stats: any = await compile(config) + const messages = formatWebpackMessages(stats.toJson({}, true)) + + if (messages.errors.length) { + return reject(new Error(messages.errors.join('\n\n'))) + } + + if (hasCiEnvVar() && messages.warnings.length) { + logger.warn( + '\nTreating warnings as errors because process.env.CI = true.\n' + + 'Most CI servers set it automatically.\n' + ) + return reject(new Error(messages.warnings.join('\n\n'))) + } + + return resolve({ + stats, + previousFileSizes, + warnings: messages.warnings, + }) + } catch (err) { + reject(err) + } + }) +} + +const onSuccess = ({ stats, previousFileSizes, warnings }: any) => { + if (warnings.length) { + logger.warn('Compiled with warnings.\n') + logger.warn(warnings.join('\n\n')) + logger.warn( + '\nSearch for the ' + + chalk.underline(chalk.yellow('keywords')) + + ' to learn more about each warning.' + ) + logger.warn( + 'To ignore, add ' + + chalk.cyan('// eslint-disable-next-line') + + ' to the line before.\n' + ) + } else { + logger.success(chalk.green('Compiled successfully.\n')) + } + + logger.log('File sizes after gzip:\n') + printFileSizesAfterBuild( + stats, + previousFileSizes, + paths.dist, + WARN_AFTER_BUNDLE_GZIP_SIZE, + WARN_AFTER_CHUNK_GZIP_SIZE + ) + logger.log() +} + +const onError = (err: Error) => { + logger.fatal(chalk.red('Failed to compile.\n')) + printBuildError(err) + process.exit(1) +} + +export const build = async (args: Config) => { + try { + const config = loadConfig(args) + const bundler = webpackBundler(config, 'production') + const previousFileSizes = await measureFileSizesBeforeBuild(paths.dist) + const entries = new Entries(config) + const map = await entries.getMap() + + await fs.emptyDir(paths.dist) + await copyPublicFolder() + await Entries.writeImports(map) + await Entries.writeApp(config) + await Entries.writeData(map, config) + + const result = await builder(bundler.getConfig(), previousFileSizes) + onSuccess(result) + } catch (err) { + onError(err) + } +} diff --git a/packages/docz-core/src/commands/dev.ts b/packages/docz-core/src/commands/dev.ts index c8250cbe6..f2faf08db 100644 --- a/packages/docz-core/src/commands/dev.ts +++ b/packages/docz-core/src/commands/dev.ts @@ -1,25 +1,16 @@ -import { load } from 'load-cfg' import detectPort from 'detect-port' -import * as paths from '../config/paths' import { Config } from './args' import { DataServer } from '../DataServer' import { webpack } from '../bundlers' +import { loadConfig } from '../utils/load-config' process.env.BABEL_ENV = process.env.BABEL_ENV || 'development' process.env.NODE_ENV = process.env.NODE_ENV || 'development' export const dev = async (args: Config) => { - const config = load('docz', { - ...args, - paths, - plugins: [], - mdPlugins: [], - hastPlugins: [], - themeConfig: {}, - }) - - const bundler = webpack(config) + const config = loadConfig(args) + const bundler = webpack(config, 'development') const server = await bundler.createServer(bundler.getConfig()) const app = await server.start() diff --git a/packages/docz-core/src/commands/index.ts b/packages/docz-core/src/commands/index.ts index 76dfd49e2..d6beca767 100644 --- a/packages/docz-core/src/commands/index.ts +++ b/packages/docz-core/src/commands/index.ts @@ -1,2 +1,3 @@ export { dev } from './dev' +export { build } from './build' export { args } from './args' diff --git a/packages/docz-core/src/config/paths.ts b/packages/docz-core/src/config/paths.ts index f75a05a3d..6a0e49808 100644 --- a/packages/docz-core/src/config/paths.ts +++ b/packages/docz-core/src/config/paths.ts @@ -42,6 +42,8 @@ export interface Paths { rootJs: string indexJs: string indexHtml: string + configJson: string + entriesJson: string } export const templates = path.join(resolve.sync('docz-core'), '../templates') @@ -51,9 +53,13 @@ export const servedPath = getServedPath(resolveApp('package.json')) export const docz = resolveApp('.docz') export const app = path.resolve(docz, 'app/') +export const appPublic = path.resolve(docz, 'public/') export const dist = path.resolve(docz, 'dist/') +export const distPublic = path.resolve(dist, 'public/') export const importsJs = path.resolve(app, 'imports.js') export const rootJs = path.resolve(app, 'root.jsx') export const indexJs = path.resolve(app, 'index.jsx') export const indexHtml = path.resolve(app, 'index.html') +export const entriesJson = path.resolve(app, 'entries.json') +export const configJson = path.resolve(app, 'config.json') diff --git a/packages/docz-core/src/types.d.ts b/packages/docz-core/src/types.d.ts index 8cbc1a30c..9d475b4f6 100644 --- a/packages/docz-core/src/types.d.ts +++ b/packages/docz-core/src/types.d.ts @@ -16,10 +16,16 @@ declare module 'remark-parse/lib/block-elements.json' declare module 'to-vfile' declare module 'art-template' declare module 'friendly-errors-webpack-plugin' +declare module 'webpack-manifest-plugin' +declare module 'uglifyjs-webpack-plugin' declare module 'lodash.get' +declare module 'signale' declare module 'webpackbar' declare module 'webpack-serve' declare module 'koa-mount' declare module 'koa-connect' declare module 'koa-static' declare module 'detect-port' +declare module 'react-dev-utils/FileSizeReporter' +declare module 'react-dev-utils/formatWebpackMessages' +declare module 'react-dev-utils/printBuildError' diff --git a/packages/docz-core/src/utils/fs.ts b/packages/docz-core/src/utils/fs.ts index 50745029b..e3e2f6ac9 100644 --- a/packages/docz-core/src/utils/fs.ts +++ b/packages/docz-core/src/utils/fs.ts @@ -1,14 +1,9 @@ import * as path from 'path' -import * as fs from 'fs' -import { test, mkdir } from 'shelljs' +import * as fs from 'fs-extra' import { compile } from 'art-template' import { format } from './format' -export const mkd = (dir: string): void => { - !test('-d', dir) && mkdir('-p', dir) -} - export const touch = (file: string, raw: string) => new Promise(async (resolve, reject) => { const content = /jsx?$/.test(path.extname(file)) ? await format(raw) : raw @@ -31,8 +26,8 @@ export const read = (file: string): Promise => }) export const readIfExist = async (file: string): Promise => { - if (!test('-f', file)) return Promise.resolve(null) - return read(file) + const exist = await fs.pathExists(file) + return exist ? read(file) : Promise.resolve(null) } export const compiled = async (file: string): Promise<(args: any) => string> => diff --git a/packages/docz-core/src/utils/load-config.ts b/packages/docz-core/src/utils/load-config.ts new file mode 100644 index 000000000..e4f454026 --- /dev/null +++ b/packages/docz-core/src/utils/load-config.ts @@ -0,0 +1,14 @@ +import { load } from 'load-cfg' + +import * as paths from '../config/paths' +import { Config } from '../commands/args' + +export const loadConfig = (args: Config) => + load('docz', { + ...args, + paths, + plugins: [], + mdPlugins: [], + hastPlugins: [], + themeConfig: {}, + }) diff --git a/packages/docz-core/templates/root.tpl.js b/packages/docz-core/templates/root.tpl.js index 5b831dcbf..44ec0435a 100644 --- a/packages/docz-core/templates/root.tpl.js +++ b/packages/docz-core/templates/root.tpl.js @@ -1,8 +1,10 @@ import React from 'react' import { hot } from 'react-hot-loader' import Theme from '<%- theme %>' +<% if (isProd) {%>import config from './config.json'<%}%> +<% if (isProd) {%>import entries from './entries.json'<%}%> -const socket = new WebSocket(`<%- websocketUrl %>`) +<% if (isProd) {%>const socket = new WebSocket(`<%- websocketUrl %>`)<%}%> const _wrappers = [<% if (wrappers) {%><%- wrappers %><%}%>] const recursiveWrappers = ([Wrapper, ...rest], props) => ( @@ -14,6 +16,7 @@ const recursiveWrappers = ([Wrapper, ...rest], props) => ( const Wrapper = props => _wrappers.length ? recursiveWrappers(_wrappers, props) : props.children +<% if (!isProd) {%> class Root extends React.Component { state = { config: {}, @@ -39,5 +42,15 @@ class Root extends React.Component { return } } +<%} else {%> +const Root = ({ imports }) => ( + +) +<%}%> export default hot(module)(Root) diff --git a/packages/docz/bin/index.js b/packages/docz/bin/index.js index 3c09501bb..3e9230c71 100755 --- a/packages/docz/bin/index.js +++ b/packages/docz/bin/index.js @@ -4,12 +4,8 @@ const yargs = require('yargs') const { commands } = require('docz-core') yargs - .command( - 'dev [files]', - 'initialize docz dev server', - commands.args, - commands.dev - ) + .command('dev', 'initialize docz dev server', commands.args, commands.dev) + .command('build', 'build dir as static site', commands.args, commands.build) .demandCommand() .help() .wrap(72) diff --git a/yarn.lock b/yarn.lock index 0f31d0d56..c4dd44f77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1331,6 +1331,12 @@ "@types/connect" "*" "@types/node" "*" +"@types/chalk@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@types/chalk/-/chalk-2.2.0.tgz#b7f6e446f4511029ee8e3f43075fb5b73fbaa0ba" + dependencies: + chalk "*" + "@types/chokidar@^1.7.5": version "1.7.5" resolved "https://registry.npmjs.org/@types/chokidar/-/chokidar-1.7.5.tgz#1fa78c8803e035bed6d98e6949e514b133b0c9b6" @@ -1396,6 +1402,12 @@ version "2.1.1" resolved "https://registry.npmjs.org/@types/find-up/-/find-up-2.1.1.tgz#1cd2d240f1ad1f48d32346074724dc3107248a11" +"@types/fs-extra@^5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz#235a7e2b56452cc0a6a4809b53e1d1eaffff9c96" + dependencies: + "@types/node" "*" + "@types/glob@*": version "5.0.35" resolved "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz#1ae151c802cece940443b5ac246925c85189f32a" @@ -1508,13 +1520,6 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" -"@types/shelljs@^0.8.0": - version "0.8.0" - resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.0.tgz#0caa56b68baae4f68f44e0dd666ab30b098e3632" - dependencies: - "@types/glob" "*" - "@types/node" "*" - "@types/tapable@*": version "1.0.2" resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd" @@ -1740,7 +1745,7 @@ add-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" -address@^1.0.1: +address@1.0.3, address@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" @@ -2013,7 +2018,7 @@ aws4@^1.2.1: version "1.7.0" resolved "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" -babel-code-frame@^6.22.0: +babel-code-frame@6.26.0, babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -2251,7 +2256,7 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -brace-expansion@^1.1.7: +brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: @@ -2483,7 +2488,15 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@*, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -2501,14 +2514,6 @@ chalk@^2.0.0, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.3.0: - version "2.4.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" @@ -3113,7 +3118,7 @@ cross-spawn-async@^2.1.1: lru-cache "^4.0.0" which "^1.2.8" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -3222,7 +3227,7 @@ debug@*, debug@^3.1.0: dependencies: ms "2.0.0" -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.6, debug@^2.6.8: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -3371,6 +3376,13 @@ detect-node@^2.0.3: version "2.0.3" resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + dependencies: + address "^1.0.1" + debug "^2.6.0" + detect-port@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.2.3.tgz#15bf49820d02deb84bfee0a74876b32d791bf610" @@ -3632,7 +3644,7 @@ escape-string-applescript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz#760bca838668e408fe5ee52ce42caf7cb46c5273" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3768,6 +3780,12 @@ events@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -3833,6 +3851,12 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + express@^4.16.3: version "4.16.3" resolved "https://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" @@ -3953,6 +3977,12 @@ fault@^1.0.1: dependencies: format "^0.2.2" +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + fbjs@^0.8.16: version "0.8.16" resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" @@ -3989,6 +4019,10 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" +filesize@3.5.11: + version "3.5.11" + resolved "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" + filesize@^3.5.11, filesize@^3.6.0: version "3.6.1" resolved "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -4158,6 +4192,14 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -4329,6 +4371,24 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" +global-modules@1.0.0, global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + global@^4.3.0: version "4.3.2" resolved "https://registry.npmjs.org/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -4418,6 +4478,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +gzip-size@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + dependencies: + duplexer "^0.1.1" + gzip-size@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz#8ae096257eabe7d69c45be2b67c448124ffb517c" @@ -4569,6 +4635,12 @@ hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1, hoist-non-react- version "2.5.0" resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: version "2.6.0" resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" @@ -4631,6 +4703,10 @@ http-errors@^1.2.8, http-errors@^1.6.1, http-errors@~1.6.1, http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-parser-js@>=0.4.0: + version "0.4.13" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -4719,7 +4795,7 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^3.0.6, inquirer@^3.2.2: +inquirer@3.3.0, inquirer@^3.0.6, inquirer@^3.2.2: version "3.3.0" resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: @@ -5038,6 +5114,10 @@ is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" +is-root@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5068,7 +5148,7 @@ is-whitespace-character@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" -is-windows@^1.0.0, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5166,6 +5246,10 @@ json-stringify-safe@5.0.1, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0. version "5.0.1" resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + json5@^0.5.0: version "0.5.1" resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -5549,7 +5633,7 @@ lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" -lodash@^4.14.0, lodash@^4.17.0, lodash@^4.17.3, lodash@^4.17.5: +"lodash@>=3.5 <5", lodash@^4.14.0, lodash@^4.17.0, lodash@^4.17.3, lodash@^4.17.5: version "4.17.10" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -5866,6 +5950,12 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" +minimatch@3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + dependencies: + brace-expansion "^1.0.0" + minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6324,6 +6414,12 @@ only@0.0.2: version "0.0.2" resolved "https://registry.npmjs.org/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" +opn@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + dependencies: + is-wsl "^1.1.0" + opn@^5.1.0: version "5.3.0" resolved "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" @@ -6348,6 +6444,12 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +original@>=0.0.5: + version "1.0.1" + resolved "https://registry.npmjs.org/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190" + dependencies: + url-parse "~1.4.0" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -6503,6 +6605,10 @@ parse-ms@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + parseurl@^1.3.0, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -6617,6 +6723,13 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" @@ -6800,6 +6913,10 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +querystringify@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" + quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" @@ -6846,6 +6963,29 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-dev-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-5.0.1.tgz#1f396e161fe44b595db1b186a40067289bf06613" + dependencies: + address "1.0.3" + babel-code-frame "6.26.0" + chalk "1.1.3" + cross-spawn "5.1.0" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.5.11" + global-modules "1.0.0" + gzip-size "3.0.0" + inquirer "3.3.0" + is-root "1.0.0" + opn "5.2.0" + react-error-overlay "^4.0.0" + recursive-readdir "2.2.1" + shell-quote "1.6.1" + sockjs-client "1.1.4" + strip-ansi "3.0.1" + text-table "0.2.0" + react-docgen@^3.0.0-beta11: version "3.0.0-beta9" resolved "https://registry.npmjs.org/react-docgen/-/react-docgen-3.0.0-beta9.tgz#6be987e640786ecb10ce2dd22157a022c8285e95" @@ -6874,6 +7014,10 @@ react-emotion@^9.1.3: babel-plugin-emotion "^9.1.2" create-emotion-styled "^9.1.2" +react-error-overlay@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4" + react-feather@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/react-feather/-/react-feather-1.1.0.tgz#f0aa692497de952237ca1f3b118ebcb5427152e1" @@ -7049,6 +7193,12 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +recursive-readdir@2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + dependencies: + minimatch "3.0.3" + redent@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -7335,12 +7485,23 @@ require-uncached@^1.0.3: caller-path "^0.1.0" resolve-from "^1.0.0" +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" dependencies: resolve-from "^3.0.0" +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -7677,7 +7838,7 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shell-quote@^1.6.1: +shell-quote@1.6.1, shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" dependencies: @@ -7694,18 +7855,18 @@ shelljs@^0.8.1: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.2: - version "0.8.2" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +signale@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/signale/-/signale-1.1.0.tgz#b2f6d20f09df83c07fe18a968260b628f9d3f0f8" + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + slash@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -7753,6 +7914,17 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" @@ -7980,7 +8152,7 @@ stringstream@~0.0.4: version "0.0.5" resolved "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: @@ -8139,7 +8311,7 @@ text-extensions@^1.0.0: version "1.7.0" resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" -text-table@^0.2.0, text-table@~0.2.0: +text-table@0.2.0, text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -8427,7 +8599,7 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uglifyjs-webpack-plugin@^1.2.4: +uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.5: version "1.2.5" resolved "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" dependencies: @@ -8690,6 +8862,13 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse@^1.1.8, url-parse@~1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.4.0.tgz#6bfdaad60098c7fe06f623e42b22de62de0d3d75" + dependencies: + querystringify "^2.0.0" + requires-port "^1.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -8884,6 +9063,14 @@ webpack-log@^1.0.1, webpack-log@^1.1.1, webpack-log@^1.1.2: loglevelnext "^1.0.1" uuid "^3.1.0" +webpack-manifest-plugin@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.3.tgz#b42c5b08a0319cedb3ec45d9375a9ecee0acf5eb" + dependencies: + fs-extra "^0.30.0" + lodash ">=3.5 <5" + tapable "^1.0.0" + webpack-serve@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/webpack-serve/-/webpack-serve-1.0.2.tgz#cd7f040cac63300e8fff79f1d45aa2f3e5825492" @@ -8962,6 +9149,17 @@ webpackbar@^2.6.1: 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" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + whatwg-fetch@>=0.10.0: version "2.0.4" resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" @@ -8970,6 +9168,12 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" +which@^1.2.14: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + which@^1.2.8, which@^1.2.9: version "1.3.0" resolved "https://registry.npmjs.org/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"