diff --git a/pack.js b/pack.js
new file mode 100644
index 0000000..9452f9b
--- /dev/null
+++ b/pack.js
@@ -0,0 +1,40 @@
+const cp = require('child_process')
+const os = require('os')
+const path = require('path')
+
+const pkg = require('pkg')
+
+const nodeTargets = {
+ darwin: "node8-macos-x64",
+ linux: "node8-linux-x64",
+ win32: "node8-win-x64",
+}
+
+const nativeModules = {
+ darwin: [
+ 'node_modules/measurement-kit/build/Release/measurement-kit.node',
+ 'node_modules/sqlite3/lib/binding/node-v57-darwin-x64/node_sqlite3.node'
+ ],
+ win32: [],
+ linux: []
+}
+
+const platform = os.platform()
+
+if (!nodeTargets[platform]) {
+ console.log('this platform is not supported')
+ process.exit(0)
+}
+
+console.log('- building packed/ooni for ' + nodeTargets[platform])
+pkg.exec([ 'dist/ooni.js', '--target', nodeTargets[platform], '-o', 'packed/ooni' ])
+.then(() => {
+ nativeModules[platform].forEach(dotNodePath => {
+ console.log('- copying ' + dotNodePath)
+ cp.spawnSync('cp', [
+ dotNodePath,
+ 'packed/' + path.basename(dotNodePath)
+ ], {shell: true})
+ })
+ process.exit(0)
+})
diff --git a/package.json b/package.json
index 4959bd7..b251e8b 100644
--- a/package.json
+++ b/package.json
@@ -6,21 +6,12 @@
"license": "MIT",
"scripts": {
"dev": "webpack -w",
- "pack": "webpack && pkg dist/ooni.js -c package.json -o packed/ooni",
+ "pack": "webpack && node pack.js",
"clean-home": "rm -rf ~/.ooni/measurements && rm -rf ~/.ooni/*.ldb"
},
- "pkg": {
- "scripts": [
- "dist/*"
- ],
- "targets": [
- "node7-linux-x64",
- "node7-macos-x64",
- "node7-win-x64"
- ]
- },
"devDependencies": {
"ansi-escapes": "^3.0.0",
+ "axios": "^0.17.1",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-es2015": "^6.24.1",
@@ -49,9 +40,10 @@
"webpack": "^3.6.0",
"webpack-node-externals": "^1.6.0",
"window-size": "^1.1.0",
- "wrap-ansi": "^3.0.1"
+ "wrap-ansi": "^3.0.1",
+ "zlib": "^1.0.5"
},
"dependencies": {
- "measurement-kit": "^0.1.0-alpha.5"
+ "measurement-kit": "^0.1.0-alpha.8"
}
}
diff --git a/scripts/gen-nettests.py b/scripts/gen-nettests.py
new file mode 100644
index 0000000..7f53f6b
--- /dev/null
+++ b/scripts/gen-nettests.py
@@ -0,0 +1,102 @@
+import os
+import pystache
+# pip install https://github.com/okunishinishi/python-stringcase/archive/cc7d5eb58ff4a959a508c3f2296459daf7c3a1f2.zip
+import stringcase
+
+PKG_TMPL = """
+{
+ "name": "ooni-{{nettest_dash_case}}",
+ "version": "0.3.0",
+ "description": "Official OONI test for running {{nettest_name}}",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
+"""
+
+INDEX_TMPL = """
+import { {{nettest_pascal_case}} } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ Cli.log(Cli.output.labelValue('Label', uploadMbit, {unit: 'Mbit'}))
+ } else if (React) {
+ /*
+ XXX this is broken currently as it depends on react
+ const {
+ Container,
+ Heading
+ } = Components
+ return class extends React.Component {
+ render() {
+ return
+ Results for NDT
+ {uploadMbit}
+
+ }
+ }
+ */
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+})
+
+export const run = ({ooni, argv}) => {
+ const {{nettest_camel_case}} = {{nettest_pascal_case}}(ooni.mkOptions)
+ ooni.init({{nettest_camel_case}})
+
+ {{nettest_camel_case}}.on('begin', () => ooni.onProgress(0.0, 'starting {{nettest_dash_case}}'))
+ {{nettest_camel_case}}.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message, persist)
+ })
+ return ooni.run({{nettest_camel_case}}.run)
+}
+"""
+
+nettests = [
+ ['Web Connectivity', 'web-connectivity'],
+ ['HTTP Invalid Request Line', 'http-invalid-request-line'],
+ ['HTTP Header Field Manipulation', 'http-header-field-manipulation'],
+ #['NDT', 'ndt'],
+ ['Dash', 'dash'],
+ ['Facebook Messenger', 'facebook-messenger'],
+ ['Telegram', 'telegram'],
+ ['WhatsApp', 'whatsapp']
+]
+
+def gen():
+ for nettest_name, nettest_dash_case in nettests:
+ nettest_camel_case = stringcase.camelcase(nettest_dash_case)
+ nettest_pascal_case = stringcase.pascalcase(nettest_dash_case)
+ partials = dict(
+ nettest_dash_case=nettest_dash_case,
+ nettest_camel_case=nettest_camel_case,
+ nettest_pascal_case=nettest_pascal_case,
+ nettest_name=nettest_name
+ )
+ dst_path = os.path.join(os.path.dirname(__file__), '..', 'src', 'nettests', nettest_dash_case)
+ if not os.path.exists(dst_path):
+ os.mkdir(dst_path)
+
+ index_path = os.path.join(dst_path, 'index.js')
+ package_path = os.path.join(dst_path, 'package.json')
+ with open(index_path, 'w+') as out_file:
+ out_file.write(pystache.render(INDEX_TMPL, partials))
+ print('wrote {}'.format(index_path))
+ with open(package_path, 'w+') as out_file:
+ out_file.write(pystache.render(PKG_TMPL, partials))
+ print('wrote {}'.format(package_path))
+
+def main():
+ gen()
+
+if __name__ == '__main__':
+ main()
diff --git a/src/cli/make-cli.js b/src/cli/make-cli.js
index ffc1d90..e56a038 100644
--- a/src/cli/make-cli.js
+++ b/src/cli/make-cli.js
@@ -2,6 +2,8 @@ export const makeCli = (log = console.log) => ({
output: {
toMbit: require('./output/to-mbit').default,
labelValue: require('./output/label-value').default,
+ ok: require('./output/ok'),
+ notok: require('./output/notok'),
},
log
})
diff --git a/src/cli/output/test-results.js b/src/cli/output/test-results.js
index 36cd932..8a832e8 100644
--- a/src/cli/output/test-results.js
+++ b/src/cli/output/test-results.js
@@ -55,9 +55,10 @@ import labelValue from './label-value'
*/
const testResults = async (results, getMeta) => {
- const colWidth = 50
+ const colWidth = 76
let o = '┏' + '━'.repeat(colWidth) + '┓\n'
- let totalDataUsage = 0
+ let totalDataUsageUp = 0
+ let totalDataUsageDown = 0
let totalRows = 0
let allAsns = []
let allCountries = []
@@ -79,23 +80,26 @@ const testResults = async (results, getMeta) => {
if (allAsns.indexOf(meta.asn) === -1) {
allAsns.push(meta.asn)
}
- totalDataUsage += meta.dataUsage
+ if (meta.dataUsageUp && meta.dataUsageDown) {
+ totalDataUsageUp += meta.dataUsageUp
+ totalDataUsageDown += meta.dataUsageDown
+ }
totalRows += 1
let firstRow = `${chalk.bold(`#${r.id}`)} - ${moment(meta.date).fromNow()}`
firstRow += rightPad(firstRow, innerWidth)
let secondRow = meta.name
- secondRow += rightPad(secondRow, 26)
+ secondRow += rightPad(secondRow, colWidth/2)
secondRow += meta.summary[0] || ''
secondRow += rightPad(secondRow, innerWidth)
let thirdRow = meta.network
- thirdRow += rightPad(thirdRow, 26)
+ thirdRow += rightPad(thirdRow, colWidth/2)
thirdRow += meta.summary[1] || ''
thirdRow += rightPad(thirdRow, innerWidth)
let fourthRow = `${chalk.cyan(meta.asn)} (${chalk.cyan(meta.country)})`
- fourthRow += rightPad(fourthRow, 26)
+ fourthRow += rightPad(fourthRow, colWidth/2)
fourthRow += meta.summary[2] || ''
fourthRow += rightPad(fourthRow, innerWidth)
@@ -110,8 +114,11 @@ const testResults = async (results, getMeta) => {
results.map(getContentRow)
)
- let dataUsageCell = `${humanize.filesize(totalDataUsage)}`
- dataUsageCell += rightPad(dataUsageCell, 12)
+ let dataUsageDownCell = `U ${humanize.filesize(totalDataUsageDown)}`
+ dataUsageDownCell += rightPad(dataUsageDownCell, 12)
+
+ let dataUsageUpCell = `D ${humanize.filesize(totalDataUsageUp)}`
+ dataUsageUpCell += rightPad(dataUsageUpCell, 12)
let networksCell = `${allAsns.length} nets`
networksCell += rightPad(networksCell, 12)
@@ -120,10 +127,16 @@ const testResults = async (results, getMeta) => {
msmtsCell += rightPad(msmtsCell, 12)
o += contentRows.join('┢' + '━'.repeat(colWidth) + '┪\n')
- o += '└┬──────────────┬──────────────┬──────────────┬'+'─'.repeat(colWidth - 46)+'┘\n'
- o += ` │ ${msmtsCell} │ ${networksCell} │ ${dataUsageCell} │
- ╰──────────────┴──────────────┴──────────────╯
-`
+
+ if (totalDataUsageDown && totalDataUsageUp) {
+ o += '└┬──────────────┬──────────────┬──────────────┬──────────────┬'+'─'.repeat(colWidth - 61)+'┘\n'
+ o += ` │ ${msmtsCell} │ ${networksCell} │ ${dataUsageDownCell} │ ${dataUsageUpCell} │\n`
+ o += ' ╰──────────────┴──────────────┴──────────────┴──────────────╯'
+ } else {
+ o += '└┬──────────────┬──────────────┬'+'─'.repeat(colWidth - 31)+'┘\n'
+ o += ` │ ${msmtsCell} │ ${networksCell} │\n`
+ o += ' ╰──────────────┴──────────────╯'
+ }
return o
}
diff --git a/src/commands/list.js b/src/commands/list.js
index 3776426..539ada8 100644
--- a/src/commands/list.js
+++ b/src/commands/list.js
@@ -87,13 +87,14 @@ const listAction = async ctx => {
summary.push(m)
})
// XXX we should figure out how this will work when we have many measurements
- nettest.renderSummary([measurement], {Cli, chalk})
+ if (measurement.summary) {
+ nettest.renderSummary([measurement], {Cli, chalk})
+ }
return {
name: measurement.name,
network: measurement.asn,
asn: measurement.asn,
country: measurement.country,
- dataUsage: measurement.dataUsage,
date: measurement.startTime,
summary: summary
}
@@ -118,7 +119,8 @@ const listAction = async ctx => {
network: measurements[0].asn,
asn: measurements[0].asn,
country: measurements[0].country,
- dataUsage: measurements.map(m => m.dataUsage).reduce((a,b) => a += b),
+ dataUsageUp: result.dataUsageUp,
+ dataUsageDown: result.dataUsageDown,
date: result.startTime,
summary: summary
}
diff --git a/src/commands/nettest.js b/src/commands/nettest.js
index 5b361f5..23dc9d0 100644
--- a/src/commands/nettest.js
+++ b/src/commands/nettest.js
@@ -118,7 +118,6 @@ const main = async ctx => {
}
await exit(1)
}
-
}
export default main
diff --git a/src/commands/run.js b/src/commands/run.js
index 018fc3f..a954eec 100644
--- a/src/commands/run.js
+++ b/src/commands/run.js
@@ -18,8 +18,14 @@ import {
Result
} from '../config/db'
+import {
+ notify
+} from '../config/ipc'
+
import makeCli from '../cli/make-cli'
+import { getGeoipPaths } from '../config/geoip'
+
const debug = require('debug')('commands.run')
const help = () => {
@@ -66,30 +72,51 @@ const run = async ({camelName, argv}) => {
})
dbOperations.push(result.save())
+ notify({key: 'ooni.run.nettest.starting', value: camelName})
console.log(info('Running '+
chalk.bold(`${nettestType.nettests.length} ${nettestType.name} `) +
`test${sOrNot}`))
+ let dataUsageUp = 0
+ let dataUsageDown = 0
+ const geoip = await getGeoipPaths()
+
for (const nettestLoader of nettestType.nettests) {
const loader = nettestLoader()
const { nettest, meta } = loader
+ notify({key: 'ooni.run.nettest.running', value: meta})
console.log(info(`${chalk.bold(meta.name)}`))
- const measurements = await nettest.run({ooni: makeOoni(loader), argv})
+ const [measurements, dataUsage] = await nettest.run({
+ ooni: makeOoni(loader, geoip),
+ argv
+ })
+ debug('setting data usage', dataUsage)
+ dataUsageUp += dataUsage.up || 0
+ dataUsageDown += dataUsage.down || 0
nettest.renderSummary(measurements, {
Cli: makeCli(),
chalk: chalk,
Components: null,
React: null,
})
- dbOperations.push(result.setMeasurements(measurements))
+
+ for (const measurement of measurements) {
+ dbOperations.push(result.addMeasurements(measurement))
+ }
}
await Promise.all(dbOperations)
const measurements = await result.getMeasurements()
+ debug('updating the result table')
+ debug(measurements)
+ const summary = nettestType.makeSummary(measurements)
+ debug('summary: ', summary)
await result.update({
- summary: nettestType.makeSummary(measurements),
endTime: moment.utc().toDate(),
- done: true
+ done: true,
+ dataUsageUp: dataUsageUp,
+ dataUsageDown: dataUsageDown,
+ summary
})
}
@@ -140,6 +167,7 @@ const main = async ctx => {
await exit(0)
} else {
await run({camelName, argv})
+ await exit(0)
}
} catch(err) {
if (err.usageError) {
diff --git a/src/config/db.js b/src/config/db.js
index f0bc44c..fd3eac0 100644
--- a/src/config/db.js
+++ b/src/config/db.js
@@ -31,7 +31,6 @@ export const Measurement = sequelize.define('measurement', {
name: Sequelize.STRING,
startTime: Sequelize.DATE,
endTime: Sequelize.DATE,
- dataUsage: Sequelize.INTEGER,
// This is an opaque JSON that is test dependent
summary: Sequelize.JSON,
@@ -66,7 +65,9 @@ export const Result = sequelize.define('result', {
startTime: Sequelize.DATE,
endTime: Sequelize.DATE,
summary: Sequelize.JSON,
- done: Sequelize.BOOLEAN
+ done: Sequelize.BOOLEAN,
+ dataUsageUp: Sequelize.INTEGER,
+ dataUsageDown: Sequelize.INTEGER
})
Result.hasMany(Measurement, { as: 'Measurements' })
sequelize.sync()
diff --git a/src/config/geoip.js b/src/config/geoip.js
new file mode 100644
index 0000000..84ae304
--- /dev/null
+++ b/src/config/geoip.js
@@ -0,0 +1,75 @@
+import * as fs from 'fs-extra'
+import path from 'path'
+
+import axios from 'axios'
+import zlib from 'zlib'
+
+import wait from '../cli/output/wait'
+import { getOoniDir } from './global-path'
+
+const BASE_URL = 'https://github.com/OpenObservatory/ooni-resources/releases/download/'
+const LATEST_VERSION = '21'
+const GEOIP_ASN_FILENAME = 'maxmind-geoip.GeoIPASNum.dat'
+const GEOIP_COUNTRY_FILENAME = 'maxmind-geoip.GeoIP.dat'
+
+const downloadFile = ({url, dst, uncompress}) => {
+ return new Promise((resolve, reject) => {
+ axios({
+ method: 'get',
+ url: url,
+ responseType: 'stream'
+ }).then(response => {
+ let outputStream
+ if (uncompress) {
+ outputStream = zlib.createGunzip()
+ outputStream.pipe(fs.createWriteStream(dst))
+ response.data.pipe(outputStream)
+ } else {
+ outputStream = response.data
+ outputStream.pipe(fs.createWriteStream(dst))
+ }
+ outputStream.on('end', () => {
+ resolve()
+ })
+ })
+ })
+}
+
+export const getGeoipPaths = async () => {
+ let progress
+ const geoipDir = path.join(getOoniDir(), 'geoip')
+
+ // XXX exception handling
+ const geoipDirExists = await fs.pathExists(geoipDir)
+ if (!geoipDirExists) {
+ await fs.ensureDir(geoipDir)
+ }
+
+ const geoipCountryPath = path.join(geoipDir, GEOIP_COUNTRY_FILENAME)
+ const geoipCountryExists = await fs.pathExists(geoipCountryPath)
+ if (!geoipCountryExists) {
+ progress = wait('downloading GeoIP country file')
+ await downloadFile({
+ url: `${BASE_URL}${LATEST_VERSION}/${GEOIP_COUNTRY_FILENAME}.gz`,
+ dst: geoipCountryPath,
+ uncompress: true
+ })
+ progress()
+ }
+
+ const geoipAsnPath = path.join(geoipDir, GEOIP_ASN_FILENAME)
+ const geoipAsnExists = await fs.pathExists(geoipAsnPath)
+ if (!geoipAsnExists) {
+ progress = wait('downloading GeoIP ASN file')
+ await downloadFile({
+ url: `${BASE_URL}${LATEST_VERSION}/${GEOIP_ASN_FILENAME}.gz`,
+ dst: geoipAsnPath,
+ uncompress: true
+ })
+ progress()
+ }
+ return {
+ countryPath: geoipCountryPath,
+ asnPath: geoipAsnPath,
+ }
+}
diff --git a/src/config/ipc.js b/src/config/ipc.js
new file mode 100644
index 0000000..d9b48e3
--- /dev/null
+++ b/src/config/ipc.js
@@ -0,0 +1,26 @@
+const process = require('process')
+
+let ipcEnabled = false
+
+export const enableIpc = () => {
+ if (ipcEnabled === true) {
+ throw Error('IPC cannot be enabled twice')
+ }
+ ipcEnabled = true
+ listenForMessages()
+}
+
+const listenForMessages = () => {
+ process.on('message', m => {
+ console.log('got message', m)
+ })
+}
+
+export const notify = ({key, value}) =>{
+ if (ipcEnabled === true && process.send) {
+ process.send({
+ key,
+ value
+ })
+ }
+}
diff --git a/src/nettests/dash/index.js b/src/nettests/dash/index.js
new file mode 100644
index 0000000..361b8f2
--- /dev/null
+++ b/src/nettests/dash/index.js
@@ -0,0 +1,45 @@
+
+import { Dash } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ Cli.log(Cli.output.labelValue('Label', uploadMbit, {unit: 'Mbit'}))
+ } else if (React) {
+ /*
+ XXX this is broken currently as it depends on react
+ const {
+ Container,
+ Heading
+ } = Components
+ return class extends React.Component {
+ render() {
+ return
+ Results for NDT
+ {uploadMbit}
+
+ }
+ }
+ */
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+})
+
+export const run = ({ooni, argv}) => {
+ const dash = Dash(ooni.mkOptions)
+ ooni.init(dash)
+
+ dash.on('begin', () => ooni.onProgress(0.0, 'starting dash'))
+ dash.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message, persist)
+ })
+ return ooni.run(dash.run)
+}
diff --git a/src/nettests/dash/package.json b/src/nettests/dash/package.json
new file mode 100644
index 0000000..8a9e16a
--- /dev/null
+++ b/src/nettests/dash/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-dash",
+ "version": "0.3.0",
+ "description": "Official OONI test for running Dash",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/nettests/facebook-messenger/index.js b/src/nettests/facebook-messenger/index.js
new file mode 100644
index 0000000..c00acb8
--- /dev/null
+++ b/src/nettests/facebook-messenger/index.js
@@ -0,0 +1,65 @@
+
+import { FacebookMessenger } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ if (summary.facebookDnsBlocking === true) {
+ Cli.log(Cli.output.notok('Facebook is blocked via DNS'))
+ } else {
+ Cli.log(Cli.output.ok('Facebook is not blocked via DNS'))
+ }
+ if (summary.facebookTcpBlocking === true) {
+ Cli.log(Cli.output.notok('Facebook is blocked via TCP'))
+ } else {
+ Cli.log(Cli.output.ok('Facebook is not blocked via TCP'))
+ }
+ } else if (React) {
+ // XXX this is broken currently as it depends on react
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+ facebookTcpBlocking: test_keys.facebook_tcp_blocking,
+ facebookDnsBlocking: test_keys.facebook_dns_blocking,
+ /*
+ XXX do we want to expose these too?
+ facebook_b_api_dns_consistent
+ facebook_b_api_reachable
+
+ facebook_b_graph_dns_consistent
+ facebook_b_graph_reachable
+
+ facebook_edge_dns_consistent
+ facebook_edge_reachable
+
+ facebook_external_cdn_dns_consistent
+ facebook_external_cdn_reachable
+
+ facebook_scontent_cdn_dns_consistent
+ facebook_scontent_cdn_reachable
+
+ facebook_star_dns_consistent
+ facebook_star_reachable
+
+ facebook_stun_dns_consistent
+ facebook_stun_reachable
+ */
+})
+
+export const run = ({ooni, argv}) => {
+ const facebookMessenger = FacebookMessenger(ooni.mkOptions)
+ ooni.init(facebookMessenger)
+
+ facebookMessenger.on('begin', () => ooni.onProgress(0.0, 'starting facebook-messenger'))
+ facebookMessenger.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(facebookMessenger.run)
+}
diff --git a/src/nettests/facebook-messenger/package.json b/src/nettests/facebook-messenger/package.json
new file mode 100644
index 0000000..b08bdf4
--- /dev/null
+++ b/src/nettests/facebook-messenger/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-facebook-messenger",
+ "version": "0.3.0",
+ "description": "Official OONI test for running Facebook Messenger",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/nettests/http-header-field-manipulation/index.js b/src/nettests/http-header-field-manipulation/index.js
new file mode 100644
index 0000000..798c816
--- /dev/null
+++ b/src/nettests/http-header-field-manipulation/index.js
@@ -0,0 +1,38 @@
+
+import { HttpHeaderFieldManipulation } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ if (summary.foundMiddlebox === true) {
+ Cli.log(Cli.output.notok('Detected the presence of a Middle Box'))
+ } else {
+ Cli.log(Cli.output.ok('No Middle Box detected'))
+ }
+ } else if (React) {
+ // XXX this is broken currently as it depends on react
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+ foundMiddlebox: (test_keys.tampering.header_field_name ||
+ test_keys.tampering.request_line_capitalization ||
+ test_keys.tampering.total)
+})
+
+export const run = ({ooni, argv}) => {
+ const httpHeaderFieldManipulation = HttpHeaderFieldManipulation(ooni.mkOptions)
+ ooni.init(httpHeaderFieldManipulation)
+
+ httpHeaderFieldManipulation.on('begin', () => ooni.onProgress(0.0, 'starting http-header-field-manipulation'))
+ httpHeaderFieldManipulation.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(httpHeaderFieldManipulation.run)
+}
diff --git a/src/nettests/http-header-field-manipulation/package.json b/src/nettests/http-header-field-manipulation/package.json
new file mode 100644
index 0000000..b4ba4d9
--- /dev/null
+++ b/src/nettests/http-header-field-manipulation/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-http-header-field-manipulation",
+ "version": "0.3.0",
+ "description": "Official OONI test for running HTTP Header Field Manipulation",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/nettests/http-invalid-request-line/index.js b/src/nettests/http-invalid-request-line/index.js
new file mode 100644
index 0000000..82883e0
--- /dev/null
+++ b/src/nettests/http-invalid-request-line/index.js
@@ -0,0 +1,36 @@
+
+import { HttpInvalidRequestLine } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ if (summary.foundMiddlebox === true) {
+ Cli.log(Cli.output.notok('Detected the presence of a Middle Box'))
+ } else {
+ Cli.log(Cli.output.ok('No Middle Box detected'))
+ }
+ } else if (React) {
+ // XXX this is broken currently as it depends on react
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+ foundMiddlebox: test_keys.tampering
+})
+
+export const run = ({ooni, argv}) => {
+ const httpInvalidRequestLine = HttpInvalidRequestLine(ooni.mkOptions)
+ ooni.init(httpInvalidRequestLine)
+
+ httpInvalidRequestLine.on('begin', () => ooni.onProgress(0.0, 'starting http-invalid-request-line'))
+ httpInvalidRequestLine.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(httpInvalidRequestLine.run)
+}
diff --git a/src/nettests/http-invalid-request-line/package.json b/src/nettests/http-invalid-request-line/package.json
new file mode 100644
index 0000000..890b504
--- /dev/null
+++ b/src/nettests/http-invalid-request-line/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-http-invalid-request-line",
+ "version": "0.3.0",
+ "description": "Official OONI test for running HTTP Invalid Request Line",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/nettests/index.js b/src/nettests/index.js
index 296bf0a..eaf5c4f 100644
--- a/src/nettests/index.js
+++ b/src/nettests/index.js
@@ -8,12 +8,12 @@ import wait from '../cli/output/wait'
import { Measurement } from '../config/db'
import { getOoniDir } from '../config/global-path'
+import { notify } from '../config/ipc'
import iso8601 from '../util/iso8601'
import randInt from '../util/randInt'
const debug = require('debug')('nettests.index')
-
const OONI_DIR = getOoniDir()
const makeReportFile = (name) => {
@@ -24,13 +24,17 @@ const makeReportFile = (name) => {
)
}
-export const makeOoni = (loader) => {
+export const makeOoni = (loader, geoip) => {
let dbOperations = [],
measurements = [],
mkOptions = {},
progress = null,
reportId = null,
reportFile = null,
+ dataUsage = {
+ up: 0,
+ down: 0
+ },
measurementName = camelCase(loader.meta.name),
uploaded = false,
localReportId = null,
@@ -50,6 +54,10 @@ export const makeOoni = (loader) => {
if (isMk) {
nt.test.set_options('no_file_report', '0')
nt.test.set_output_filepath(reportFile)
+ nt.setOptions({
+ geoipCountryPath: geoip.countryPath,
+ geoipAsnPath: geoip.asnPath
+ })
nt.on('log', (severity, message) => {
debug('<'+severity+'>'+message)
// XXX this a workaround due to a bug in MK
@@ -65,6 +73,10 @@ export const makeOoni = (loader) => {
nt.on('end', () => {
debug('ending test')
})
+ nt.on('overall-data-usage', ({down, up}) => {
+ dataUsage.up = up
+ dataUsage.down = down
+ })
nt.on('entry', entry => {
// XXX This is a bit of a hack
// When we don't have a reportId with the collector we set the
@@ -77,6 +89,11 @@ export const makeOoni = (loader) => {
uploaded = false
reportId = `LOCAL-${entry.id}`
}
+ debug('generating summary for ' + reportFile)
+ const summary = loader.nettest.makeSummary(entry)
+ const startTime = moment(entry['measurement_start_time'] + 'Z').toDate()
+ const endTime = new Date(startTime.getTime() + entry['test_runtime'] * 1000)
+ debug('generated summary: ', summary)
let measurement = Measurement.build({
state: 'active',
reportId: reportId,
@@ -87,8 +104,9 @@ export const makeOoni = (loader) => {
name: measurementName,
reportFile: reportFile,
// We append the Z to make moment understand it's UTC
- startTime: moment(entry['measurement_start_time'] + 'Z').toDate(),
- summary: loader.nettest.makeSummary(entry)
+ startTime,
+ endTime,
+ summary
})
dbOperations.push(measurement.save())
measurements.push(measurement)
@@ -99,9 +117,8 @@ export const makeOoni = (loader) => {
const onProgress = (percent, message, persist) => {
progress && progress()
progress = wait(`${percentage(percent)}: ${message}`, persist)
- }
-
- const setSummary = (measurementId, summary) => {
+ notify({key: 'ooni.run.progress.percent', value: percent})
+ notify({key: 'ooni.run.progress.message', value: message})
}
const run = async (runner) => {
@@ -109,23 +126,21 @@ export const makeOoni = (loader) => {
// XXX Here I make the assumption that either it all failed or not.
// This is a lie.
+ // The endTime is also not correct
for (const measurement of measurements) {
dbOperations.push(measurement.update({
- state: uploaded ? 'uploaded' : 'done',
- endTime: moment().utc().toDate(),
- dataUsage: 1024**2*randInt(1, 20) // XXX we currently fill this with some random data
+ state: uploaded ? 'uploaded' : 'done'
}))
}
await Promise.all(dbOperations)
progress && progress()
- return measurements
+ return [measurements, dataUsage]
}
return {
init,
onProgress,
- setSummary,
mkOptions,
run
}
@@ -148,14 +163,12 @@ export const nettests = {
httpInvalidRequestLine: makeNettestLoader('http-invalid-request-line'),
httpHeaderFieldManipulation: makeNettestLoader('http-header-field-manipulation'),
ndt: makeNettestLoader('ndt'),
-
- // Missing wrapper
dash: makeNettestLoader('dash'),
facebookMessenger: makeNettestLoader('facebook-messenger'),
telegram: makeNettestLoader('telegram'),
+ whatsapp: makeNettestLoader('whatsapp'),
// These don't exist in MK
- whatsapp: makeNettestLoader('whatsapp'),
captivePortal: makeNettestLoader('captive-portal'),
httpHost: makeNettestLoader('http-host'),
traceroute: makeNettestLoader('traceroute'),
@@ -217,13 +230,22 @@ export const nettestTypes = {
nettests.httpInvalidRequestLine,
nettests.httpHeaderFieldManipulation
],
- name: 'Middleboxes',
- shortDescription: 'Detect the presence of "Middle boxes"',
+ name: 'Middle Boxes',
+ shortDescription: 'Detect the presence of Middle Boxes',
help: 'No help for you',
makeSummary: (measurements) => {
- return {}
+ return {
+ foundMiddlebox: (measurements[0].summary.foundMiddlebox ||
+ measurements[1].summary.foundMiddlebox)
+ }
},
- renderSummary: (measurement, {Cli, chalk}) => {}
+ renderSummary: (result, {Cli, chalk}) => {
+ if (result.summary.foundMiddlebox === true) {
+ Cli.log(Cli.output.notok('Found Middle Box'))
+ } else {
+ Cli.log(Cli.output.ok('No Middle Box'))
+ }
+ }
},
imBlocking: {
nettests: [
@@ -235,9 +257,34 @@ export const nettestTypes = {
shortDescription: 'Check if Instant Messagging apps are blocked.',
help: 'No help for you',
makeSummary: (measurements) => {
- return {}
+ return {
+ whatsappBlocked: (measurements[0].summary.whatsappEndpointsBlocked ||
+ measurements[0].summary.whatsappWebBlocked ||
+ measurements[0].summary.registrationServerBlocked),
+ facebookMessengerBlocked: (measurements[1].summary.facebookTcpBlocking ||
+ measurements[1].summary.facebookDnsBlocking),
+ telegramBlocked: (measurements[2].summary.telegramWebBlocked ||
+ measurements[2].summary.telegramHttpBlocked ||
+ measurements[2].summary.telegramTcpBlocked)
+ }
},
- renderSummary: (measurement, {Cli, chalk}) => {}
+ renderSummary: (result, {Cli, chalk}) => {
+ if (result.summary.whatsappBlocked === true) {
+ Cli.log(Cli.output.notok('WhatsApp NOT ok'))
+ } else {
+ Cli.log(Cli.output.ok('WhatsApp is OK'))
+ }
+ if (result.summary.facebookMessengerBlocked === true) {
+ Cli.log(Cli.output.notok('Facebook NOT ok'))
+ } else {
+ Cli.log(Cli.output.ok('Facebook is OK'))
+ }
+ if (result.summary.telegramBlocked === true) {
+ Cli.log(Cli.output.ok('Telegram NOT ok'))
+ } else {
+ Cli.log(Cli.output.ok('Telegram is OK'))
+ }
+ }
},
circumvention: {
nettests: [
diff --git a/src/nettests/ndt/index.js b/src/nettests/ndt/index.js
index 74e42e8..d28f5dd 100644
--- a/src/nettests/ndt/index.js
+++ b/src/nettests/ndt/index.js
@@ -23,21 +23,7 @@ export const renderSummary = (measurements, {React, Cli, Components, chalk}) =>
Cli.log(Cli.output.labelValue('MSS', mss))
Cli.log(Cli.output.labelValue('Timeouts', timeouts))
} else if (React) {
- /*
- XXX this is broken currently as it depends on react
- const {
- Container,
- Heading
- } = Components
- return class extends React.Component {
- render() {
- return
- Results for NDT
- {uploadMbit}
-
- }
- }
- */
+ // XXX this is broken currently as it depends on react
}
}
@@ -63,9 +49,11 @@ export const run = ({ooni, argv}) => {
ndt.on('begin', () => ooni.onProgress(0.0, 'starting ndt'))
ndt.on('progress', (percent, message) => {
- const persist = !(message.startsWith('upload-speed') ||
- message.startsWith('download-speed'))
- ooni.onProgress(percent, message, persist)
+ /*
+ const persist = (message.startsWith('upload-speed') ||
+ message.startsWith('download-speed'))
+ */
+ ooni.onProgress(percent, message)
})
return ooni.run(ndt.run)
}
diff --git a/src/nettests/telegram/index.js b/src/nettests/telegram/index.js
new file mode 100644
index 0000000..f110854
--- /dev/null
+++ b/src/nettests/telegram/index.js
@@ -0,0 +1,51 @@
+
+import { Telegram } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+
+ if (summary.telegramHttpBlocked === true) {
+ Cli.log(Cli.output.notok('Telegram via HTTP is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Telegram via HTTP is not blocked'))
+ }
+
+ if (summary.telegramTcpBlocked === true) {
+ Cli.log(Cli.output.notok('Telegram via TCP is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Telegram via TCP is not blocked'))
+ }
+
+ if (summary.telegramWebBlocked === true) {
+ Cli.log(Cli.output.notok('Telegram Web is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Telegram Web is not blocked'))
+ }
+ } else if (React) {
+ // XXX this is broken currently as it depends on react
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+ telegramWebBlocked: test_keys.telegram_web_status === 'blocked',
+ telegramHttpBlocked: test_keys.telegram_http_blocking,
+ telegramTcpBlocked: test_keys.telegram_tcp_blocking,
+})
+
+export const run = ({ooni, argv}) => {
+ const telegram = Telegram(ooni.mkOptions)
+ ooni.init(telegram)
+
+ telegram.on('begin', () => ooni.onProgress(0.0, 'starting telegram'))
+ telegram.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(telegram.run)
+}
diff --git a/src/nettests/telegram/package.json b/src/nettests/telegram/package.json
new file mode 100644
index 0000000..188a96b
--- /dev/null
+++ b/src/nettests/telegram/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-telegram",
+ "version": "0.3.0",
+ "description": "Official OONI test for running Telegram",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/nettests/web-connectivity/index.js b/src/nettests/web-connectivity/index.js
index 39c5b59..d4d1382 100644
--- a/src/nettests/web-connectivity/index.js
+++ b/src/nettests/web-connectivity/index.js
@@ -1,58 +1,45 @@
-import chalk from 'chalk'
-import exit from '../../util/exit'
-import wait from '../../cli/output/wait'
-import ok from '../../cli/output/ok'
-import notok from '../../cli/output/notok'
-import error from '../../cli/output/error'
-
-import nettestHelp from '../../cli/output/nettest-help'
-import rightPad from '../../cli/output/right-pad'
-import sleep from '../../util/sleep'
-
-exports.renderRunSummary = (measurements, {React, Cli, Components, chalk}) => {
-}
-
-exports.makeSummary = (test_keys) => {
+import { WebConnectivity } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ Cli.log(Cli.output.labelValue('Label', uploadMbit, {unit: 'Mbit'}))
+ } else if (React) {
+ /*
+ XXX this is broken currently as it depends on react
+ const {
+ Container,
+ Heading
+ } = Components
+ return class extends React.Component {
+ render() {
+ return
+ Results for NDT
+ {uploadMbit}
+
+ }
+ }
+ */
+ }
}
-exports.renderHelp = () => {
- const meta = {
- name: WebConnectivity.name,
- shortDescription: WebConnectivity.shortDescription
- }
- return nettestHelp(meta, 'webConnectivity', [
- {
- option: '-h, --help',
- description: 'Display usage information'
- },
- {
- option: `-f, --file ${chalk.bold.underline('FILE')}`,
- description: 'The path to a list of websites to test'
- }
- ])
+export const renderHelp = () => {
}
-exports.run = async ({ooni, argv}) => {
- let currentUrl
- if (argv.file) {
- // Handle testing input file
- } else {
- currentUrl = argv._.slice(1)
- if (currentUrl.length == 0) {
- console.log(
- error(
- 'Your must specify either a URL or an input file'
- )
- )
- return exit(1)
- }
- }
+export const makeSummary = ({test_keys}) => ({
+})
- const testDone = wait(`testing ${currentUrl}`)
- await sleep(10000)
- testDone()
+export const run = ({ooni, argv}) => {
+ const webConnectivity = WebConnectivity(ooni.mkOptions)
+ ooni.init(webConnectivity)
- console.log(ok(`${currentUrl} is OK`))
- console.log(notok(`${currentUrl} is NOT OK`))
+ webConnectivity.on('begin', () => ooni.onProgress(0.0, 'starting web-connectivity'))
+ webConnectivity.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(webConnectivity.run)
}
diff --git a/src/nettests/web-connectivity/package.json b/src/nettests/web-connectivity/package.json
index 85f6bd0..78fec1f 100644
--- a/src/nettests/web-connectivity/package.json
+++ b/src/nettests/web-connectivity/package.json
@@ -1,3 +1,4 @@
+
{
"name": "ooni-web-connectivity",
"version": "0.3.0",
diff --git a/src/nettests/whatsapp/index.js b/src/nettests/whatsapp/index.js
new file mode 100644
index 0000000..7affe53
--- /dev/null
+++ b/src/nettests/whatsapp/index.js
@@ -0,0 +1,50 @@
+
+import { Whatsapp } from 'measurement-kit'
+
+export const renderSummary = (measurements, {React, Cli, Components, chalk}) => {
+ const summary = measurements[0].summary
+
+ // When this function is called from the Cli the Cli will be set, when it's
+ // called from the Desktop app we have React set instead.
+ if (Cli) {
+ if (summary.whatsappEndpointsBlocked === true) {
+ Cli.log(Cli.output.notok('Whatapp is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Whatapp is not blocked'))
+ }
+
+ if (summary.whatsappWebBlocked === true) {
+ Cli.log(Cli.output.notok('Whatapp Web is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Whatapp Web is not blocked'))
+ }
+
+ if (summary.registrationServerBlocked === true) {
+ Cli.log(Cli.output.notok('Registration server is blocked'))
+ } else {
+ Cli.log(Cli.output.ok('Registration server is not blocked'))
+ }
+ } else if (React) {
+ // XXX this is broken currently as it depends on react
+ }
+}
+
+export const renderHelp = () => {
+}
+
+export const makeSummary = ({test_keys}) => ({
+ whatsappEndpointsBlocked: test_keys.whatsapp_endpoints_status === 'blocked',
+ whatsappWebBlocked: test_keys.whatsapp_web_status === 'blocked',
+ registrationServerBlocked: test_keys.registration_server_status === 'blocked'
+})
+
+export const run = ({ooni, argv}) => {
+ const whatsapp = Whatsapp(ooni.mkOptions)
+ ooni.init(whatsapp)
+
+ whatsapp.on('begin', () => ooni.onProgress(0.0, 'starting whatsapp'))
+ whatsapp.on('progress', (percent, message) => {
+ ooni.onProgress(percent, message)
+ })
+ return ooni.run(whatsapp.run)
+}
diff --git a/src/nettests/whatsapp/package.json b/src/nettests/whatsapp/package.json
new file mode 100644
index 0000000..1361c94
--- /dev/null
+++ b/src/nettests/whatsapp/package.json
@@ -0,0 +1,9 @@
+
+{
+ "name": "ooni-whatsapp",
+ "version": "0.3.0",
+ "description": "Official OONI test for running WhatsApp",
+ "dependencies": {
+ "measurement-kit": "0.1.0"
+ }
+}
diff --git a/src/ooni.js b/src/ooni.js
index 9286b83..3df9cd5 100644
--- a/src/ooni.js
+++ b/src/ooni.js
@@ -16,17 +16,22 @@ import {
writeToConfigFile
} from './config/config-files'
+import { enableIpc } from './config/ipc'
+
+const debug = require('debug')('ooni')
+
const OONI_DIR = getOoniDir()
const OONI_CONFIG_PATH = getConfigFilePath()
const main = async (argv_) => {
const argv = mri(argv_, {
- boolean: ['help', 'version', 'verbose'],
+ boolean: ['help', 'version', 'verbose', 'ipc'],
string: [],
alias: {
help: 'h'
}
})
+ debug(argv)
let subcommand = argv._[2]
@@ -132,8 +137,20 @@ const main = async (argv_) => {
}
}
+ if (argv.ipc) {
+ try {
+ debug('enabling IPC')
+ enableIpc()
+ } catch(err) {
+ console.error(error('An error occurred while starting IPC subsystem ' +
+ `ooni config file in "${OONI_CONFIG_PATH}"` + err.message
+ ))
+ return 1
+ }
+ }
+
const ctx = {
- argv: argv_
+ argv: argv._
}
if (subcommand === 'help' && argv._[3]) {
diff --git a/yarn.lock b/yarn.lock
index a858d31..806a4d4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,8 +7,8 @@
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf"
"@types/node@*":
- version "8.0.48"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.48.tgz#4e7da6e849d9e50be5865effaa55b1870ae4eede"
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5"
abbrev@1:
version "1.1.1"
@@ -29,12 +29,12 @@ acorn@^4.0.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7"
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
ajv-keywords@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
ajv@^4.9.1:
version "4.11.8"
@@ -43,24 +43,15 @@ ajv@^4.9.1:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ajv@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
+ajv@^5.1.0, ajv@^5.1.5:
+ version "5.5.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
co "^4.6.0"
fast-deep-equal "^1.0.0"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
-ajv@^5.1.5:
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.3.tgz#c06f598778c44c6b161abafe3466b81ad1814ed2"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- json-schema-traverse "^0.3.0"
- json-stable-stringify "^1.0.1"
-
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -106,7 +97,7 @@ anymatch@^1.3.0:
micromatch "^2.1.5"
normalize-path "^2.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"
@@ -141,9 +132,13 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
asn1.js@^4.0.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
dependencies:
bn.js "^4.0.0"
inherits "^2.0.1"
@@ -176,8 +171,8 @@ async-each@^1.0.0:
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
async@^2.1.2:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
dependencies:
lodash "^4.14.0"
@@ -197,6 +192,13 @@ aws4@^1.2.1, aws4@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+axios@^0.17.1:
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d"
+ dependencies:
+ follow-redirects "^1.2.5"
+ is-buffer "^1.1.5"
+
babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
@@ -640,8 +642,8 @@ big.js@^3.1.3:
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
binary-extensions@^1.0.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
bindings@^1.2.1, bindings@^1.3.0:
version "1.3.0"
@@ -653,11 +655,7 @@ block-stream@*:
dependencies:
inherits "~2.0.0"
-bluebird@^2.10.2:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
-
-bluebird@^3.4.6:
+bluebird@^3.4.6, bluebird@^3.5.0:
version "3.5.1"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
@@ -703,8 +701,8 @@ brorand@^1.0.1:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
dependencies:
buffer-xor "^1.0.3"
cipher-base "^1.0.0"
@@ -748,11 +746,11 @@ browserify-sign@^4.0.0:
inherits "^2.0.1"
parse-asn1 "^5.0.0"
-browserify-zlib@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
dependencies:
- pako "~0.2.0"
+ pako "~1.0.5"
buffer-xor@^1.0.3:
version "1.0.3"
@@ -782,6 +780,24 @@ byline@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
+cacache@^10.0.1:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.2.tgz#105a93a162bbedf3a25da42e1939ed99ffb145f8"
+ 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"
+
camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
@@ -801,7 +817,7 @@ center-align@^0.1.1:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chalk@2.1.0, chalk@^2.0.0, chalk@^2.1.0:
+chalk@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
dependencies:
@@ -819,6 +835,18 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
+chalk@^2.0.0, chalk@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+
child-process-promise@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074"
@@ -842,6 +870,10 @@ 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"
+
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
@@ -856,8 +888,8 @@ cli-cursor@^2.1.0:
restore-cursor "^2.0.0"
cli-spinners@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.1.tgz#2675321c100f195b02877ac499e9911fa34b9783"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.1.0.tgz#f1847b168844d917a671eb9d147e3df497c90d06"
cli-width@^2.0.0:
version "2.2.0"
@@ -880,8 +912,8 @@ cliui@^3.2.0:
wrap-ansi "^2.0.0"
cls-bluebird@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.0.1.tgz#c259a480ae02c0e506134307bb13db30446ee2e7"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz#37ef1e080a8ffb55c2f4164f536f1919e7968aee"
dependencies:
is-bluebird "^1.0.2"
shimmer "^1.1.0"
@@ -895,8 +927,8 @@ code-point-at@^1.0.0:
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
color-convert@^1.9.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
dependencies:
color-name "^1.1.1"
@@ -922,6 +954,14 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+concat-stream@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
console-browserify@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
@@ -937,25 +977,38 @@ constants-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
convert-source-map@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+
+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-webpack-plugin@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.1.0.tgz#292a040318fe8ae3b1d7996ef05dfb483eb0b647"
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.3.1.tgz#19ba6370bf6f8e263cbd66185a2b79f2321a9302"
dependencies:
- bluebird "^2.10.2"
- fs-extra "^0.26.4"
- glob "^6.0.4"
- is-glob "^3.1.0"
+ cacache "^10.0.1"
+ find-cache-dir "^1.0.0"
+ globby "^7.1.1"
+ is-glob "^4.0.0"
loader-utils "^0.2.15"
lodash "^4.3.0"
- minimatch "^3.0.0"
- node-dir "^0.1.10"
+ minimatch "^3.0.4"
+ p-limit "^1.0.0"
+ pify "^3.0.0"
+ serialize-javascript "^1.4.0"
core-js@^2.4.0, core-js@^2.5.0:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -1016,8 +1069,8 @@ cryptiles@3.x.x:
boom "5.x.x"
crypto-browserify@^3.11.0:
- version "3.11.1"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f"
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
dependencies:
browserify-cipher "^1.0.0"
browserify-sign "^4.0.0"
@@ -1029,6 +1082,11 @@ crypto-browserify@^3.11.0:
pbkdf2 "^3.0.3"
public-encrypt "^4.0.0"
randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+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"
@@ -1102,8 +1160,8 @@ detect-indent@^4.0.0:
repeating "^2.0.0"
detect-libc@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
diffie-hellman@^5.0.0:
version "5.0.2"
@@ -1113,6 +1171,13 @@ diffie-hellman@^5.0.0:
miller-rabin "^4.0.0"
randombytes "^2.0.0"
+dir-glob@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034"
+ dependencies:
+ arrify "^1.0.1"
+ path-type "^3.0.0"
+
domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
@@ -1121,6 +1186,15 @@ dottie@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.0.tgz#da191981c8b8d713ca0115d5898cf397c2f0ddd0"
+duplexify@^3.4.2, duplexify@^3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e"
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
@@ -1143,6 +1217,12 @@ emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
+ dependencies:
+ once "^1.4.0"
+
enhanced-resolve@^3.4.0:
version "3.4.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
@@ -1153,10 +1233,10 @@ enhanced-resolve@^3.4.0:
tapable "^0.2.7"
errno@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
dependencies:
- prr "~0.0.0"
+ prr "~1.0.1"
error-ex@^1.2.0:
version "1.3.1"
@@ -1164,20 +1244,20 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
-es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.30"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939"
+es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.37"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.37.tgz#0ee741d148b80069ba27d020393756af257defc3"
dependencies:
- es6-iterator "2"
- es6-symbol "~3.1"
+ es6-iterator "~2.0.1"
+ es6-symbol "~3.1.1"
-es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
dependencies:
d "1"
- es5-ext "^0.10.14"
- es6-symbol "^3.1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
es6-map@^0.1.3:
version "0.1.5"
@@ -1200,7 +1280,7 @@ es6-set@~0.1.5:
es6-symbol "3.1.1"
event-emitter "~0.3.5"
-es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+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:
@@ -1314,11 +1394,11 @@ extend@~3.0.0, extend@~3.0.1:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
external-editor@^2.0.4:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
dependencies:
+ chardet "^0.4.0"
iconv-lite "^0.4.17"
- jschardet "^1.4.2"
tmp "^0.0.33"
extglob@^0.3.1:
@@ -1327,10 +1407,14 @@ extglob@^0.3.1:
dependencies:
is-extglob "^1.0.0"
-extsprintf@1.3.0, extsprintf@^1.2.0:
+extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+
fast-deep-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
@@ -1378,16 +1462,29 @@ find-up@^2.0.0, find-up@^2.1.0:
locate-path "^2.0.0"
flow-babel-webpack-plugin@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.0.tgz#a8dfa7430fc88d18d7d28acc96edf0e2a2329510"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flow-babel-webpack-plugin/-/flow-babel-webpack-plugin-1.1.1.tgz#7dd41110b96045eab8d8af6df48883310de54e91"
dependencies:
babel-plugin-transform-flow-comments "^6.17.0"
flow-bin ">=0.44.2 <1"
lodash.merge "^4.6.0"
"flow-bin@>=0.44.2 <1":
- version "0.56.0"
- resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.56.0.tgz#ce43092203a344ba9bf63c0cabe95d95145f6cad"
+ version "0.63.1"
+ resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.63.1.tgz#ab00067c197169a5fb5b4996c8f6927b06694828"
+
+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.5:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.3.0.tgz#f684871fc116d2e329fda55ef67687f4fabc905c"
+ dependencies:
+ debug "^3.1.0"
for-in@^1.0.1:
version "1.0.2"
@@ -1419,6 +1516,13 @@ form-data@~2.3.1:
combined-stream "^1.0.5"
mime-types "^2.1.12"
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
fs-extra@4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880"
@@ -1427,34 +1531,33 @@ fs-extra@4.0.1:
jsonfile "^3.0.0"
universalify "^0.1.0"
-fs-extra@^0.26.4:
- version "0.26.7"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.26.7.tgz#9ae1fdd94897798edab76d0918cf42d0c3184fa9"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
- klaw "^1.0.0"
- path-is-absolute "^1.0.0"
- rimraf "^2.2.8"
-
fs-extra@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b"
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94"
dependencies:
graceful-fs "^4.1.2"
jsonfile "^4.0.0"
universalify "^0.1.0"
+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"
fsevents@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
dependencies:
nan "^2.3.0"
- node-pre-gyp "^0.6.36"
+ node-pre-gyp "^0.6.39"
fstream-ignore@^1.0.5:
version "1.0.5"
@@ -1487,8 +1590,8 @@ gauge@~2.7.3:
wide-align "^1.1.0"
generic-pool@^3.1.8:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.2.0.tgz#c1d485ecbd6f18c0513d4741d098a6715eaeeca8"
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.4.0.tgz#6b76fc201bb49a0ff381450f585352378fb1c08f"
get-caller-file@^1.0.1:
version "1.0.2"
@@ -1517,17 +1620,7 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
-glob@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.3, glob@^7.0.5:
+glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@@ -1552,7 +1645,18 @@ globby@6.1.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+globby@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
+ dependencies:
+ array-union "^1.0.1"
+ dir-glob "^2.0.0"
+ glob "^7.1.2"
+ ignore "^3.3.5"
+ pify "^3.0.0"
+ slash "^1.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
@@ -1673,9 +1777,9 @@ http-signature@~1.2.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
-https-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
humanize@^0.0.9:
version "0.0.9"
@@ -1689,6 +1793,18 @@ 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.3.5:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
in-publish@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
@@ -1717,8 +1833,8 @@ inherits@2.0.1:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
inquirer@^3.3.0:
version "3.3.0"
@@ -1740,8 +1856,8 @@ inquirer@^3.3.0:
through "^2.3.6"
interpret@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
invariant@^2.2.2:
version "2.2.2"
@@ -1753,11 +1869,11 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
dependencies:
- kind-of "^3.0.2"
+ kind-of "^6.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
@@ -1774,8 +1890,8 @@ is-bluebird@^1.0.2:
resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2"
is-buffer@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
is-builtin-module@^1.0.0:
version "1.0.0"
@@ -1783,19 +1899,19 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
dependencies:
- kind-of "^3.0.2"
+ kind-of "^6.0.0"
is-descriptor@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.1.tgz#2c6023599bde2de9d5d2c8b9a9d94082036b6ef2"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
is-dotfile@^1.0.0:
version "1.0.3"
@@ -1815,7 +1931,7 @@ is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-is-extglob@^2.1.0:
+is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -1841,11 +1957,11 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies:
is-extglob "^1.0.0"
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
dependencies:
- is-extglob "^2.1.0"
+ is-extglob "^2.1.1"
is-number@^2.1.0:
version "2.1.0"
@@ -1905,10 +2021,6 @@ jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-jschardet@^1.4.2:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9"
-
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
@@ -1943,12 +2055,6 @@ json5@^0.5.0, json5@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
jsonfile@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
@@ -1990,15 +2096,9 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-
-klaw@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
- optionalDependencies:
- graceful-fs "^4.1.9"
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
lazy-cache@^1.0.3:
version "1.0.4"
@@ -2082,7 +2182,7 @@ loose-envify@^1.0.0:
dependencies:
js-tokens "^3.0.0"
-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:
@@ -2090,10 +2190,10 @@ lru-cache@^4.0.1:
yallist "^2.1.2"
make-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
dependencies:
- pify "^2.3.0"
+ pify "^3.0.0"
md5.js@^1.3.4:
version "1.3.4"
@@ -2102,9 +2202,9 @@ md5.js@^1.3.4:
hash-base "^3.0.0"
inherits "^2.0.1"
-measurement-kit@^0.1.0-alpha.5:
- version "0.1.0-alpha.5"
- resolved "https://registry.yarnpkg.com/measurement-kit/-/measurement-kit-0.1.0-alpha.5.tgz#f0be2b3bb2e5dcf0aea40265837376a63ff79297"
+measurement-kit@^0.1.0-alpha.8:
+ version "0.1.0-alpha.8"
+ resolved "https://registry.yarnpkg.com/measurement-kit/-/measurement-kit-0.1.0-alpha.8.tgz#27ac3040a08ecf0951084b449fed07680af988dd"
dependencies:
any-promise "^1.3.0"
bindings "^1.3.0"
@@ -2172,7 +2272,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
+minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
@@ -2186,6 +2286,21 @@ minimist@1.2.0, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+mississippi@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-1.3.0.tgz#d201583eb12327e3c5c1642a404a9cacf94e34f5"
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^1.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
@@ -2199,8 +2314,19 @@ moment-timezone@^0.5.4:
moment ">= 2.9.0"
"moment@>= 2.9.0", moment@^2.13.0, moment@^2.19.1:
- version "2.19.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.1.tgz#56da1a2d1cbf01d38b7e1afc31c10bcfa1929167"
+ version "2.20.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
+
+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"
@@ -2221,16 +2347,14 @@ mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-nan@^2.0.9, nan@^2.3.0, nan@^2.7.0, nan@~2.7.0:
+nan@^2.0.9, nan@^2.3.0, nan@^2.7.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+
+nan@~2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
-node-dir@^0.1.10:
- version "0.1.17"
- resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5"
- dependencies:
- minimatch "^3.0.2"
-
node-gyp@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60"
@@ -2250,49 +2374,34 @@ node-gyp@^3.6.2:
which "1"
node-libs-browser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
dependencies:
assert "^1.1.1"
- browserify-zlib "^0.1.4"
+ browserify-zlib "^0.2.0"
buffer "^4.3.0"
console-browserify "^1.1.0"
constants-browserify "^1.0.0"
crypto-browserify "^3.11.0"
domain-browser "^1.1.1"
events "^1.0.0"
- https-browserify "0.0.1"
- os-browserify "^0.2.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
path-browserify "0.0.0"
- process "^0.11.0"
+ process "^0.11.10"
punycode "^1.2.4"
querystring-es3 "^0.2.0"
- readable-stream "^2.0.5"
+ readable-stream "^2.3.3"
stream-browserify "^2.0.1"
- stream-http "^2.3.1"
- string_decoder "^0.10.25"
- timers-browserify "^2.0.2"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
tty-browserify "0.0.0"
url "^0.11.0"
util "^0.10.3"
vm-browserify "0.0.4"
-node-pre-gyp@^0.6.36:
- version "0.6.38"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d"
- dependencies:
- hawk "3.1.3"
- mkdirp "^0.5.1"
- nopt "^4.0.1"
- npmlog "^4.0.2"
- rc "^1.1.7"
- request "2.81.0"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^2.2.1"
- tar-pack "^3.4.0"
-
-node-pre-gyp@~0.6.38:
+node-pre-gyp@^0.6.39, node-pre-gyp@~0.6.38:
version "0.6.39"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
dependencies:
@@ -2374,7 +2483,7 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
-once@^1.3.0, once@^1.3.3:
+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:
@@ -2406,9 +2515,9 @@ ora@^1.3.0:
cli-spinners "^1.0.0"
log-symbols "^1.0.2"
-os-browserify@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
os-homedir@^1.0.0:
version "1.0.2"
@@ -2437,9 +2546,11 @@ p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-p-limit@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+p-limit@^1.0.0, p-limit@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
+ dependencies:
+ p-try "^1.0.0"
p-locate@^2.0.0:
version "2.0.0"
@@ -2447,9 +2558,21 @@ p-locate@^2.0.0:
dependencies:
p-limit "^1.1.0"
-pako@~0.2.0:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+
+pako@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+
+parallel-transform@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06"
+ dependencies:
+ cyclist "~0.2.2"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
parse-asn1@^5.0.0:
version "5.1.0"
@@ -2502,6 +2625,12 @@ path-type@^2.0.0:
dependencies:
pify "^2.0.0"
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ dependencies:
+ pify "^3.0.0"
+
pbkdf2@^3.0.3:
version "3.0.14"
resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
@@ -2520,10 +2649,14 @@ performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-pify@^2.0.0, pify@^2.3.0:
+pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
@@ -2540,9 +2673,9 @@ pkg-dir@^2.0.0:
dependencies:
find-up "^2.1.0"
-pkg-fetch@2.3.10:
- version "2.3.10"
- resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-2.3.10.tgz#1e81123c0c3b01731347e71afae3e05b1b4bc998"
+pkg-fetch@2.3.11:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-2.3.11.tgz#f1a194d86f4a802403d0e644b59aefb3cec565be"
dependencies:
babel-runtime "6.25.0"
byline "5.0.0"
@@ -2558,8 +2691,8 @@ pkg-fetch@2.3.10:
unique-temp-dir "1.0.0"
pkg@^4.2.4:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/pkg/-/pkg-4.2.4.tgz#7781490f9339a8f5cc8eea737e94c37c4e8ed4c8"
+ version "4.2.6"
+ resolved "https://registry.yarnpkg.com/pkg/-/pkg-4.2.6.tgz#3e12f3b3202573d6efceb477629cf010ab1b9270"
dependencies:
acorn "5.1.1"
babel-runtime "6.25.0"
@@ -2567,10 +2700,9 @@ pkg@^4.2.4:
escodegen "1.8.1"
fs-extra "4.0.1"
globby "6.1.0"
- in-publish "2.0.0"
minimist "1.2.0"
multistream "2.1.0"
- pkg-fetch "2.3.10"
+ pkg-fetch "2.3.11"
progress "2.0.0"
resolve "1.4.0"
simple-bufferstream "1.0.0"
@@ -2592,14 +2724,14 @@ prettyjson@^1.2.1:
minimist "^1.2.0"
private@^0.1.6, private@^0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-process@^0.11.0:
+process@^0.11.10:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@@ -2607,13 +2739,17 @@ 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-polyfill@^6.0.1:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.0.2.tgz#d9c86d3dc4dc2df9016e88946defd69b49b41162"
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057"
-prr@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
pseudomap@^1.0.2:
version "1.0.2"
@@ -2629,6 +2765,28 @@ 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"
+
+pump@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.0.tgz#7946da1c8d622b098e2ceb2d3476582470829c9d"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.6.tgz#00d40e5ded0a3bf1e0788b1c0cf426a42882ab64"
+ dependencies:
+ duplexify "^3.5.3"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
@@ -2660,15 +2818,22 @@ randomatic@^1.1.3:
is-number "^3.0.0"
kind-of "^4.0.0"
-randombytes@^2.0.0, randombytes@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
dependencies:
+ randombytes "^2.0.5"
safe-buffer "^5.1.0"
rc@^1.1.7:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b"
dependencies:
deep-extend "~0.4.0"
ini "~1.3.0"
@@ -2690,7 +2855,7 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
path-type "^2.0.0"
-readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6:
+"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.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
dependencies:
@@ -2720,8 +2885,8 @@ regenerator-runtime@^0.10.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
regenerator-runtime@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1"
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
regenerator-transform@^0.10.0:
version "0.10.1"
@@ -2867,7 +3032,7 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
@@ -2886,6 +3051,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"
@@ -2916,8 +3087,8 @@ semver@~5.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
sequelize@^4.22.5:
- version "4.22.5"
- resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.22.5.tgz#5771f8dc2173c61366d77b9fb89aeb34b0522435"
+ version "4.31.0"
+ resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.31.0.tgz#6826bc0e8d0b31571f927ca89d956999e612fa7c"
dependencies:
bluebird "^3.4.6"
cls-bluebird "^2.0.1"
@@ -2937,6 +3108,10 @@ sequelize@^4.22.5:
validator "^9.1.0"
wkx "^0.4.1"
+serialize-javascript@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005"
+
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"
@@ -2971,8 +3146,8 @@ shebang-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
shimmer@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.1.0.tgz#97d7377137ffbbab425522e429fe0aa89a488b35"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.0.tgz#f966f7555789763e74d8841193685a5e78736665"
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
@@ -3008,7 +3183,7 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
-source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3:
+source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
@@ -3018,6 +3193,10 @@ source-map@~0.2.0:
dependencies:
amdefine ">=0.0.4"
+source-map@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -3053,6 +3232,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"
+
stream-browserify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
@@ -3060,7 +3245,14 @@ stream-browserify@^2.0.1:
inherits "~2.0.1"
readable-stream "^2.0.2"
-stream-http@^2.3.1:
+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"
dependencies:
@@ -3076,6 +3268,10 @@ stream-meter@1.0.4:
dependencies:
readable-stream "^2.1.4"
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
stream-splitter@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/stream-splitter/-/stream-splitter-0.3.2.tgz#e2f28262e53c2d8bbc492e72f2960fc19857984d"
@@ -3104,11 +3300,7 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string_decoder@^0.10.25:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-string_decoder@~1.0.3:
+string_decoder@^1.0.0, string_decoder@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
dependencies:
@@ -3147,8 +3339,8 @@ supports-color@^2.0.0:
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
supports-color@^4.0.0, supports-color@^4.2.1:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
dependencies:
has-flag "^2.0.0"
@@ -3157,8 +3349,8 @@ tapable@^0.2.7:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
tar-pack@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984"
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
dependencies:
debug "^2.2.0"
fstream "^1.0.10"
@@ -3193,11 +3385,18 @@ throttleit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
+through2@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-timers-browserify@^2.0.2:
+timers-browserify@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
dependencies:
@@ -3251,6 +3450,10 @@ type-check@~0.3.2:
dependencies:
prelude-ls "~1.1.2"
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
uglify-js@^2.8.29:
version "2.8.29"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
@@ -3280,6 +3483,18 @@ uid2@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
+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-temp-dir@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385"
@@ -3321,8 +3536,8 @@ validate-npm-package-license@^3.0.1:
spdx-expression-parse "~1.0.0"
validator@^9.1.0:
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/validator/-/validator-9.1.1.tgz#3bdd1065cbd28f9d96ac806dee01030d32fd97ef"
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/validator/-/validator-9.2.0.tgz#ad216eed5f37cac31a6fe00ceab1f6b88bded03e"
verror@1.10.0:
version "1.10.0"
@@ -3351,15 +3566,15 @@ webpack-node-externals@^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"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
dependencies:
source-list-map "^2.0.0"
- source-map "~0.5.3"
+ source-map "~0.6.1"
webpack@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.6.0.tgz#a89a929fbee205d35a4fa2cc487be9cbec8898bc"
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
@@ -3443,7 +3658,7 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-xtend@^4.0.0:
+xtend@^4.0.0, xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -3487,3 +3702,7 @@ yargs@~3.10.0:
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
+
+zlib@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/zlib/-/zlib-1.0.5.tgz#6e7c972fc371c645a6afb03ab14769def114fcc0"