From 33346a69568ea0cf6719e6fe14c784134ab804fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=ABck=20V=C3=A9zien?= Date: Fri, 12 Jan 2018 11:50:47 +0100 Subject: [PATCH] Add new webpack for internals (fork) scripts --- .eslintrc | 12 +- flow-defs/globals.js | 1 + package.json | 33 +++-- scripts/dist.sh | 4 + scripts/postbuild.js | 26 ---- scripts/postinstall.sh | 4 + scripts/start.sh | 5 + src/components/Wrapper.js | 2 +- src/components/base/Box.js | 2 +- src/globals.js | 2 +- src/internals/usb/devices.js | 28 +++++ src/internals/usb/index.js | 26 ++++ src/internals/usb/wallet.js | 27 ++++ src/main/bridge.js | 7 +- src/main/usb.js | 74 ----------- webpack/define.js | 8 ++ webpack/internals.config.js | 41 +++++++ .../renderer.config.js | 11 +- yarn.lock | 115 ++++++++++++++---- 19 files changed, 266 insertions(+), 162 deletions(-) create mode 100755 scripts/dist.sh delete mode 100644 scripts/postbuild.js create mode 100755 scripts/postinstall.sh create mode 100755 scripts/start.sh create mode 100644 src/internals/usb/devices.js create mode 100644 src/internals/usb/index.js create mode 100644 src/internals/usb/wallet.js delete mode 100644 src/main/usb.js create mode 100644 webpack/define.js create mode 100644 webpack/internals.config.js rename webpack.renderer.js => webpack/renderer.config.js (55%) diff --git a/.eslintrc b/.eslintrc index f64ba51d..1a96e1c9 100644 --- a/.eslintrc +++ b/.eslintrc @@ -6,19 +6,21 @@ "__ENV__": false, "__DEV__": false, "__PROD__": false, + "__static": false, }, "rules": { "camelcase": 0, - "no-shadow": 0, - "no-void": 0, + "jsx-a11y/anchor-is-valid": 0, "new-cap": 0, - "no-return-assign": 0, "no-nested-ternary": 0, + "no-param-reassign": 0, + "no-return-assign": 0, + "no-shadow": 0, "no-underscore-dangle": 0, - "react/jsx-filename-extension": 0, + "no-void": 0, "react/jsx-curly-brace-presence": 0, + "react/jsx-filename-extension": 0, "react/prefer-stateless-function": 0, - "jsx-a11y/anchor-is-valid": 0, }, "settings": { "import/resolver": { diff --git a/flow-defs/globals.js b/flow-defs/globals.js index e2e1e296..ee6bc5da 100644 --- a/flow-defs/globals.js +++ b/flow-defs/globals.js @@ -1,3 +1,4 @@ declare var __DEV__: boolean declare var __PROD__: boolean declare var __ENV__: string +declare var __static: string diff --git a/package.json b/package.json index d098eeee..06f4ba16 100644 --- a/package.json +++ b/package.json @@ -11,32 +11,27 @@ } }, "scripts": { - "start": "NODE_ENV=development electron-webpack dev", + "start": "bash ./scripts/start.sh", "compile": "electron-webpack", - "dist": "yarn compile && node scripts/postbuild && electron-builder", + "dist": "bash ./scripts/dist.sh && electron-builder", "dist:dir": "yarn dist --dir -c.compression=store -c.mac.identity=null", - "prettier": "prettier --write \"src/**/*.js\"", - "postinstall": "electron-rebuild && flow-typed install -s", + "prettier": "prettier --write \"{src,webpack}/**/*.js\"", + "postinstall": "bash ./scripts/postinstall.sh", "flow": "flow", - "lint": "eslint src" + "lint": "eslint src webpack" }, "electronWebpack": { "renderer": { - "webpackConfig": "webpack.renderer.js" + "webpackConfig": "./webpack/renderer.config.js" } }, - "resolutions": { - "webpack-sources": "1.0.1" - }, "dependencies": { - "@ledgerhq/hw-app-btc": "^1.0.4", - "@ledgerhq/hw-app-eth": "^1.0.4", - "@ledgerhq/hw-transport": "^1.0.4", - "@ledgerhq/hw-transport-node-hid": "^1.0.7", - "babel-loader": "^7.1.2", + "@ledgerhq/hw-app-btc": "^1.0.8", + "@ledgerhq/hw-app-eth": "^1.0.8", + "@ledgerhq/hw-transport": "^1.0.8", + "@ledgerhq/hw-transport-node-hid": "^1.0.8", "color": "^2.0.1", "electron-devtools-installer": "^2.2.3", - "file-loader": "^1.1.6", "history": "^4.7.2", "i18next": "^10.2.2", "i18next-node-fs-backend": "^1.0.0", @@ -58,14 +53,16 @@ }, "devDependencies": { "babel-eslint": "^8.2.1", + "babel-loader": "^7.1.2", "babel-plugin-module-resolver": "^3.0.0", "babel-preset-env": "^1.6.1", "babel-preset-flow": "^6.23.0", "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", + "concurrently": "^3.5.1", "electron": "1.7.10", "electron-builder": "^19.49.0", - "electron-rebuild": "^1.6.1", + "electron-rebuild": "^1.7.3", "electron-webpack": "1.11.0", "eslint": "^4.13.1", "eslint-config-airbnb": "^16.1.0", @@ -77,7 +74,9 @@ "eslint-plugin-react": "^7.5.1", "flow-bin": "^0.63.1", "flow-typed": "^2.2.3", + "node-loader": "^0.6.0", "prettier": "^1.10.2", - "react-hot-loader": "^4.0.0-beta.12" + "react-hot-loader": "^4.0.0-beta.12", + "webpack-node-externals": "^1.6.0" } } diff --git a/scripts/dist.sh b/scripts/dist.sh new file mode 100755 index 00000000..31d8567c --- /dev/null +++ b/scripts/dist.sh @@ -0,0 +1,4 @@ +#/bin/bash + +NODE_ENV=production webpack --config webpack/internals.config.js && +yarn compile diff --git a/scripts/postbuild.js b/scripts/postbuild.js deleted file mode 100644 index 98cc38de..00000000 --- a/scripts/postbuild.js +++ /dev/null @@ -1,26 +0,0 @@ -const path = require('path') -const fs = require('fs') - -function folderExists(p) { - try { - fs.accessSync(p, fs.constants.R_OK | fs.constants.W_OK) // eslint-disable-line no-bitwise - return true - } catch (err) { - return false - } -} - -try { - const DEST_FOLDER = path.resolve(__dirname, '../static') - const USB_FILE = path.resolve(__dirname, '../dist/main/usb.js') - const DEST_USB_FILE = path.join(DEST_FOLDER, 'usb.js') - if (!folderExists(DEST_FOLDER)) { - fs.mkdirSync(DEST_FOLDER) - } - const stream = fs.createReadStream(USB_FILE).pipe(fs.createWriteStream(DEST_USB_FILE)) - stream.on('error', err => { - throw err - }) -} catch (err) { - console.log(`x Something went wrong`, err) -} diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh new file mode 100755 index 00000000..cba9138d --- /dev/null +++ b/scripts/postinstall.sh @@ -0,0 +1,4 @@ +#/bin/bash + +electron-rebuild && +flow-typed install -s --overwrite diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100755 index 00000000..6dbdb1ab --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,5 @@ +#/bin/bash + +concurrently --raw \ + "NODE_ENV=development webpack --watch --config webpack/internals.config.js" \ + "NODE_ENV=development electron-webpack dev" diff --git a/src/components/Wrapper.js b/src/components/Wrapper.js index 2d108c6d..774d936f 100644 --- a/src/components/Wrapper.js +++ b/src/components/Wrapper.js @@ -16,7 +16,7 @@ import TopBar from 'components/TopBar' const Wrapper = () => ( - + diff --git a/src/components/base/Box.js b/src/components/base/Box.js index b6bf3314..419603e1 100644 --- a/src/components/base/Box.js +++ b/src/components/base/Box.js @@ -28,7 +28,7 @@ const Box = styled.div` ${borderWidth}; display: flex; - flex-shrink: ${p => (p.noShrink === true ? '0' : '')}; + flex-shrink: ${p => (p.noShrink === true ? '0' : p.shrink === true ? '1' : '')}; flex-grow: ${p => (p.grow === true ? '1' : p.grow || '')}; flex-direction: ${p => (p.horizontal ? 'row' : 'column')}; diff --git a/src/globals.js b/src/globals.js index f1a4fb70..f5d795b9 100644 --- a/src/globals.js +++ b/src/globals.js @@ -4,4 +4,4 @@ const { NODE_ENV } = process.env global.__ENV__ = NODE_ENV global.__DEV__ = global.__ENV__ === 'development' -global.__PROD__ = global.__ENV__ === 'production' +global.__PROD__ = !global.__DEV__ diff --git a/src/internals/usb/devices.js b/src/internals/usb/devices.js new file mode 100644 index 00000000..82b161df --- /dev/null +++ b/src/internals/usb/devices.js @@ -0,0 +1,28 @@ +// @flow + +import listenDevices from '@ledgerhq/hw-transport-node-hid/lib/listenDevices' +import getDevices from '@ledgerhq/hw-transport-node-hid/lib/getDevices' + +const isLedgerDevice = device => + (device.vendorId === 0x2581 && device.productId === 0x3b7c) || device.vendorId === 0x2c97 + +let isListenDevices = false + +export default (send: Function) => ({ + listen: () => { + if (isListenDevices) { + return + } + + isListenDevices = true + + const handleChangeDevice = eventName => device => + isLedgerDevice(device) && send(eventName, device, { kill: false }) + + listenDevices.start() + + listenDevices.events.on('add', handleChangeDevice('device.add')) + listenDevices.events.on('remove', handleChangeDevice('device.remove')) + }, + all: () => send('devices.update', getDevices().filter(isLedgerDevice)), +}) diff --git a/src/internals/usb/index.js b/src/internals/usb/index.js new file mode 100644 index 00000000..dd99da77 --- /dev/null +++ b/src/internals/usb/index.js @@ -0,0 +1,26 @@ +// @flow + +import objectPath from 'object-path' + +import devices from './devices' +import wallet from './wallet' + +process.title = 'ledger-wallet-desktop-usb' + +function send(type: string, data: any, options: Object = { kill: true }) { + process.send({ type, data, options }) +} + +const handlers = { + devices: devices(send), + wallet: wallet(send), +} + +process.on('message', payload => { + const { type, data } = payload + const handler = objectPath.get(handlers, type) + if (!handler) { + return + } + handler(data) +}) diff --git a/src/internals/usb/wallet.js b/src/internals/usb/wallet.js new file mode 100644 index 00000000..3118bdcf --- /dev/null +++ b/src/internals/usb/wallet.js @@ -0,0 +1,27 @@ +// @flow + +import CommNodeHid from '@ledgerhq/hw-transport-node-hid' +import Btc from '@ledgerhq/hw-app-btc' + +async function getWalletInfos(path, wallet) { + if (wallet === 'btc') { + const comm = new CommNodeHid(path, true, 0, false) + const btc = new Btc(comm) + const walletInfos = await btc.getWalletPublicKey(`44'/0'/0'/0`) + return walletInfos + } + throw new Error('invalid wallet') +} + +export default (send: Function) => ({ + infos: { + request: async ({ path, wallet }: { path: string, wallet: string }) => { + try { + const publicKey = await getWalletInfos(path, wallet) + send('wallet.infos.success', { path, publicKey }) + } catch (err) { + send('wallet.infos.fail', { path, err: err.stack || err }) + } + }, + }, +}) diff --git a/src/main/bridge.js b/src/main/bridge.js index 16f1a067..e68801c3 100644 --- a/src/main/bridge.js +++ b/src/main/bridge.js @@ -4,15 +4,10 @@ import { fork } from 'child_process' import { ipcMain } from 'electron' // eslint-disable-line import/no-extraneous-dependencies import { resolve } from 'path' -// $FlowFixMe -import usbBridge from 'file-loader?name=usb.js!babel-loader!./usb' // eslint-disable-line import/no-webpack-loader-syntax - ipcMain.on('msg', (event: any, payload) => { const { type, data } = payload - const compute = fork(usbBridge, { - cwd: resolve(__dirname, __DEV__ ? '../../dist/main' : '../static'), - }) + const compute = fork(resolve(__static, './usb')) compute.send({ type, data }) compute.on('message', payload => { diff --git a/src/main/usb.js b/src/main/usb.js deleted file mode 100644 index f839a3a4..00000000 --- a/src/main/usb.js +++ /dev/null @@ -1,74 +0,0 @@ -// @flow - -import objectPath from 'object-path' - -import CommNodeHid from '@ledgerhq/hw-transport-node-hid' -import listenDevices from '@ledgerhq/hw-transport-node-hid/lib/listenDevices' -import getDevices from '@ledgerhq/hw-transport-node-hid/lib/getDevices' - -import Btc from '@ledgerhq/hw-app-btc' - -process.title = 'ledger-wallet-desktop-usb' - -const isLedgerDevice = device => - (device.vendorId === 0x2581 && device.productId === 0x3b7c) || device.vendorId === 0x2c97 - -function send(type: string, data: any, options: Object = { kill: true }) { - process.send({ type, data, options }) -} - -async function getWalletInfos(path, wallet) { - if (wallet === 'btc') { - const comm = new CommNodeHid(path, true, 0, false) - const btc = new Btc(comm) - const walletInfos = await btc.getWalletPublicKey(`44'/0'/0'/0`) - return walletInfos - } - throw new Error('invalid wallet') -} - -let isListenDevices = false - -const handlers = { - devices: { - listen: () => { - if (isListenDevices) { - return - } - - isListenDevices = true - - const handleChangeDevice = eventName => device => - isLedgerDevice(device) && send(eventName, device, { kill: false }) - - listenDevices.start() - - listenDevices.events.on('add', handleChangeDevice('device.add')) - listenDevices.events.on('remove', handleChangeDevice('device.remove')) - }, - all: () => send('devices.update', getDevices().filter(isLedgerDevice)), - }, - wallet: { - infos: { - request: async ({ path, wallet }) => { - try { - const publicKey = await getWalletInfos(path, wallet) - send('wallet.infos.success', { path, publicKey }) - } catch (err) { - send('wallet.infos.fail', { path, err: err.stack || err }) - } - }, - }, - }, -} - -process.on('message', payload => { - const { type, data } = payload - - const handler = objectPath.get(handlers, type) - if (!handler) { - return - } - - handler(data) -}) diff --git a/webpack/define.js b/webpack/define.js new file mode 100644 index 00000000..b920d89c --- /dev/null +++ b/webpack/define.js @@ -0,0 +1,8 @@ +const webpack = require('webpack') + +require('../src/globals') + +module.exports = new webpack.DefinePlugin({ + __DEV__, + __PROD__, +}) diff --git a/webpack/internals.config.js b/webpack/internals.config.js new file mode 100644 index 00000000..519d31aa --- /dev/null +++ b/webpack/internals.config.js @@ -0,0 +1,41 @@ +const path = require('path') +const fs = require('fs') +const nodeExternals = require('webpack-node-externals') // eslint-disable-line import/no-extraneous-dependencies + +const define = require('./define') + +const dirs = p => + fs + .readdirSync(p) + .filter(f => fs.statSync(path.join(p, f)).isDirectory()) + .map(d => path.resolve(__dirname, `${p}/${d}`)) + .reduce((result, value) => { + const [key] = value.split('/').slice(-1) + result[key] = value + return result + }, {}) + +module.exports = { + target: 'node', + + entry: dirs(path.resolve(__dirname, '../src/internals')), + + externals: [nodeExternals()], + + output: { + path: path.resolve(__dirname, '../static'), + filename: '[name].js', + }, + + module: { + rules: [ + { + test: /\.js$/, + use: 'babel-loader', + exclude: /node_modules/, + }, + ], + }, + + plugins: [define], +} diff --git a/webpack.renderer.js b/webpack/renderer.config.js similarity index 55% rename from webpack.renderer.js rename to webpack/renderer.config.js index dc6c6f3a..8e60efce 100644 --- a/webpack.renderer.js +++ b/webpack/renderer.config.js @@ -1,14 +1,7 @@ -const webpack = require('webpack') - -require('./src/globals') +const define = require('./define') const config = { - plugins: [ - new webpack.DefinePlugin({ - __DEV__, - __PROD__, - }), - ], + plugins: [define], devServer: { historyApiFallback: true, }, diff --git a/yarn.lock b/yarn.lock index 17e4e937..27dead84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,28 +78,28 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" -"@ledgerhq/hw-app-btc@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-1.0.5.tgz#01689c1bf5baaf744a49183a2a54adee2ae10e1a" +"@ledgerhq/hw-app-btc@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-1.0.8.tgz#c7c1a4d97e1a206e177921edc3588a97b8971640" dependencies: - "@ledgerhq/hw-transport" "^1.0.5" + "@ledgerhq/hw-transport" "^1.0.8" -"@ledgerhq/hw-app-eth@^1.0.4": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-1.0.5.tgz#39524d2a0e12e3b772d19c4582fffd43a93ae563" +"@ledgerhq/hw-app-eth@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-1.0.8.tgz#a767fdc68a9b3bc049a6e9145137e79287c8da0e" dependencies: - "@ledgerhq/hw-transport" "^1.0.5" + "@ledgerhq/hw-transport" "^1.0.8" -"@ledgerhq/hw-transport-node-hid@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-1.0.7.tgz#93aa2d0ce868eb469c9a0f095c46f5b2a27bdce4" +"@ledgerhq/hw-transport-node-hid@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-1.0.8.tgz#70d8a93cdb30329cc5715aff7f1f4ecae6ee446a" dependencies: - "@ledgerhq/hw-transport" "^1.0.5" + "@ledgerhq/hw-transport" "^1.0.8" node-hid "^0.7.2" -"@ledgerhq/hw-transport@^1.0.4", "@ledgerhq/hw-transport@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-1.0.5.tgz#8bc40175eed66f0be6971340126e98d374fa01f4" +"@ledgerhq/hw-transport@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-1.0.8.tgz#abb6b66346b44c4a1aea3b81e4661f50785bd367" dependencies: invariant "^2.2.0" @@ -192,6 +192,10 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -200,6 +204,10 @@ ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1742,6 +1750,16 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" +chalk@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1976,6 +1994,10 @@ commander@2.12.x, commander@~2.12.1: version "2.12.2" resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" +commander@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2018,6 +2040,19 @@ concat-stream@1.6.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concurrently@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-3.5.1.tgz#ee8b60018bbe86b02df13e5249453c6ececd2521" + dependencies: + chalk "0.5.1" + commander "2.6.0" + date-fns "^1.23.0" + lodash "^4.5.1" + rx "2.3.24" + spawn-command "^0.0.2-1" + supports-color "^3.2.3" + tree-kill "^1.1.0" + configstore@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" @@ -2307,6 +2342,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.23.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -2668,9 +2707,9 @@ electron-publish@19.52.0: fs-extra-p "^4.5.0" mime "^2.1.0" -electron-rebuild@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.6.1.tgz#3c7ab64db31e5e78ef76fedd7a53aec087b723c5" +electron-rebuild@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.7.3.tgz#24ae06ad9dd61cb7e4d688961f49118c40a110eb" dependencies: colors "^1.1.2" debug "^2.6.3" @@ -2899,7 +2938,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3326,7 +3365,7 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@^1.1.5, file-loader@^1.1.6: +file-loader@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" dependencies: @@ -3761,6 +3800,12 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + dependencies: + ansi-regex "^0.2.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -4725,7 +4770,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -6558,6 +6603,10 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rx@2.3.24: + version "2.3.24" + resolved "https://registry.yarnpkg.com/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7" + rxjs@^5.1.1: version "5.5.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" @@ -6863,6 +6912,10 @@ sourcemapped-stacktrace@^1.1.6: dependencies: source-map "0.5.6" +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + spawn-rx@^2.0.10: version "2.0.12" resolved "https://registry.yarnpkg.com/spawn-rx/-/spawn-rx-2.0.12.tgz#b6285294499426089beea0c3c1ec32d7fc57a376" @@ -7009,6 +7062,12 @@ stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + dependencies: + ansi-regex "^0.2.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -7088,6 +7147,10 @@ sumchecker@^2.0.2: dependencies: debug "^2.2.0" +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -7289,6 +7352,10 @@ tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" +tree-kill@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7641,7 +7708,11 @@ webpack-merge@^4.1.0: dependencies: lodash "^4.17.4" -webpack-sources@1.0.1, webpack-sources@^1.0.1: +webpack-node-externals@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-1.6.0.tgz#232c62ec6092b100635a3d29d83c1747128df9bd" + +webpack-sources@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" dependencies: