diff --git a/.gitignore b/.gitignore
index 51d845ab..881f70f1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
node_modules
coverage
dist
+tmp
.DS_Store
yarn.lock
+.idea
diff --git a/README.md b/README.md
index 5e8bdc38..710dd670 100644
--- a/README.md
+++ b/README.md
@@ -20,21 +20,22 @@ PySyft acts as the parent node, instructing child nodes \(Syft.js instances runn
If you're using a package manage like NPM:
```text
-npm install --save syft.js @tensorflow/tfjs
+npm install --save syft.js @tensorflow/tfjs webrtc-adapter
```
Or if Yarn is your cup of tea:
```text
-yarn add syft.js @tensorflow/tfjs
+yarn add syft.js @tensorflow/tfjs webrtc-adapter
```
-When using a package manager, TensorFlow.js will be automatically installed.
+When using a package manager, [TensorFlow.js](https://www.tensorflow.org/js) and the [WebRTC adapter](https://github.com/webrtc/adapter) will be automatically installed.
If you're not using a package manager, you can also include Syft.js within a `
+
```
diff --git a/copy-examples.sh b/copy-examples.sh
new file mode 100755
index 00000000..66c03473
--- /dev/null
+++ b/copy-examples.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+rm -rf ./tmp
+mkdir tmp
+
+for directory in $(find ./examples -type d -mindepth 1 -maxdepth 1);
+do
+ directory="$directory/dist/"
+ name="$(cut -d'/' -f3 <<<$directory)"
+
+ rsync -avzh "$directory" "./tmp/$name"
+done
\ No newline at end of file
diff --git a/examples/basic-example/index.js b/examples/basic-example/index.js
deleted file mode 100644
index 6a95ebf2..00000000
--- a/examples/basic-example/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import syft from 'syft.js';
-
-const fromPySyft = `
-(18,
- (((6,
- (1,
- (6,
- ((6,
- ((5, (b'__add__',)),
- (19,
- (23885703668, 30300883787, 85156589176, None, (13, (2,)), False)),
- (6,
- ((19,
- (23885703668,
- 30300883787,
- 85156589176,
- None,
- (13, (2,)),
- False)),)),
- (0, ()))),
- (6, (53361601662,)))))),
- (6,
- (1,
- (6,
- ((6,
- ((5, (b'torch.abs',)),
- None,
- (6,
- ((19, (50671613206, 53361601662, 85156589176, None, None, True)),)),
- (0, ()))),
- (6, (68554228008,)))))),
- (6, (9, 53361601662))),
- 85156589176,
- (1, (30300883787,)),
- (6, (68554228008,)),
- (5, (b'plan_double_abs',)),
- None,
- None,
- True))
-`;
-
-const mySyft = new syft({ verbose: true });
-
-const detailed = mySyft.detail(fromPySyft);
-const simplified = mySyft.simplify(detailed);
-
-console.log('DETAILED', detailed);
-
-console.log('ORIG', fromPySyft.replace(/\s/g, ''));
-console.log('SIMP', simplified.replace(/\s/g, ''));
diff --git a/examples/basic-example/webpack.config.js b/examples/basic-example/webpack.config.js
deleted file mode 100644
index d0e6e3df..00000000
--- a/examples/basic-example/webpack.config.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-
-module.exports = {
- entry: './index.js',
- output: {
- filename: 'index.js',
- path: __dirname + '/dist'
- },
- module: {
- rules: [
- {
- test: /\.js$/,
- exclude: /node_modules/,
- loaders: ['babel-loader']
- }
- ]
- },
- plugins: [
- new HtmlWebpackPlugin({
- title: 'syft.js Example'
- })
- ]
-};
diff --git a/examples/basic-example/README.md b/examples/with-grid/README.md
similarity index 92%
rename from examples/basic-example/README.md
rename to examples/with-grid/README.md
index 312c43bc..50bcf733 100644
--- a/examples/basic-example/README.md
+++ b/examples/with-grid/README.md
@@ -1,4 +1,4 @@
-# syft.js Example
+# syft.js/grid.js Example
In order to get this running, you simply need to run the following:
diff --git a/examples/with-grid/_helpers.js b/examples/with-grid/_helpers.js
new file mode 100644
index 00000000..f7df0c65
--- /dev/null
+++ b/examples/with-grid/_helpers.js
@@ -0,0 +1,35 @@
+export const getQueryVariable = variable => {
+ const query = window.location.search.substring(1),
+ vars = query.split('&');
+
+ for (let i = 0; i < vars.length; i++) {
+ const pair = vars[i].split('=');
+
+ if (decodeURIComponent(pair[0]) === variable) {
+ return decodeURIComponent(pair[1]);
+ }
+ }
+
+ return null;
+};
+
+export const writeLinksToDOM = links => {
+ document.getElementById('participant-links').innerHTML = `
+
+ `;
+};
+
+export const writeIdentityToDOM = text => {
+ document.getElementById('identity').innerHTML = text;
+};
diff --git a/examples/with-grid/index.html b/examples/with-grid/index.html
new file mode 100644
index 00000000..12bb127a
--- /dev/null
+++ b/examples/with-grid/index.html
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+ syft.js Example
+
+
+
+ Millionaire's problem
+
+ This is a demo using
+ syft.js from OpenMined
+ to display secure multi-party computation in the browser. Please open
+ your Javascript console to see what's going on (instructions for
+ Chrome
+ and
+ Firefox ) .
+
+
+ Connect to Grid.js instance
+
+
Disconnect
+
+
+
+
Send message
+
+
+
diff --git a/examples/with-grid/index.js b/examples/with-grid/index.js
new file mode 100644
index 00000000..958c8664
--- /dev/null
+++ b/examples/with-grid/index.js
@@ -0,0 +1,111 @@
+/*
+The following is a step-by-step explanation of what's going on below:
+
+1. Initiate syft.js and connect to grid.js
+2. Get the list of plans that this user is supposed to work on
+ - If there is no instanceId, grid.js will generate one for us
+ - If there is no scopeId, grid.js will generate a scope and make this user the creator
+ - Altogether, grid.js will send back this user's information, their list of plans, and the instanceId's of the other participants
+3. Links are created whereby other participants may join
+ - These links are to be shared with the other participants
+ - Note that each user will need to request their list of plans from the grid... they won't have access to another user's list of plans
+4. Create a direct peer-to-peer connection with the other participants
+ - This is done using WebRTC under the hood using a mesh network by which every peer has a private data connection to every other peer
+ - This is an asynchronous action, meaning that peers may come and go at any point
+ - The syft.js library is capable of handling connections, disconnections, and reconnections without issue
+*/
+
+// In the real world: import syft from 'syft.js';
+import syft from '../../src';
+import {
+ getQueryVariable,
+ writeIdentityToDOM,
+ writeLinksToDOM
+} from './_helpers';
+
+const gridInstance = document.getElementById('grid-instance');
+const connectButton = document.getElementById('connect');
+const disconnectButton = document.getElementById('disconnect');
+const appContainer = document.getElementById('app');
+const textarea = document.getElementById('message');
+const submitButton = document.getElementById('message-send');
+
+appContainer.style.display = 'none';
+
+connectButton.onclick = () => {
+ appContainer.style.display = 'block';
+ gridInstance.style.display = 'none';
+ connectButton.style.display = 'none';
+
+ startSyft(gridInstance.value);
+};
+
+const startSyft = url => {
+ const instanceId = getQueryVariable('instance_id');
+ const scopeId = getQueryVariable('scope_id');
+
+ // 1. Initiate syft.js and create socket connection
+ const mySyft = new syft({
+ verbose: true,
+ url,
+ instanceId,
+ scopeId,
+ protocolId: 'millionaire-problem'
+ });
+
+ submitButton.onclick = () => {
+ mySyft.sendToParticipants(textarea.value);
+
+ textarea.value = '';
+ };
+
+ disconnectButton.onclick = () => {
+ mySyft.disconnectFromParticipants();
+ mySyft.disconnectFromGrid();
+
+ appContainer.style.display = 'none';
+ gridInstance.style.display = 'block';
+ connectButton.style.display = 'block';
+ };
+
+ mySyft.onSocketStatus(async ({ connected }) => {
+ if (connected) {
+ // 2. Get the plans that are assigned to me
+ const plans = await mySyft.getPlans();
+
+ console.log('PLANS', plans);
+
+ // Write my identity to the screen - not required
+ writeIdentityToDOM(
+ `You are ${mySyft.role} "${mySyft.instanceId}" in scope "${mySyft.scopeId}"`
+ );
+
+ // Push the instanceId and scopeId onto the current URL if they aren't already there
+ // This isn't strictly necessary, but if a user is a creator of a scope (instead of a participant),
+ // then they won't be able to refresh and rejoin the scope they created
+ if (!instanceId && !scopeId) {
+ window.history.pushState(
+ {},
+ null,
+ `?instance_id=${mySyft.instanceId}&scope_id=${mySyft.scopeId}`
+ );
+ }
+
+ // 3. Create links for the other participants
+ if (mySyft.role === 'creator') {
+ writeLinksToDOM(
+ mySyft.participants.map(
+ id =>
+ `${window.location.origin +
+ window.location.pathname}?instance_id=${id}&scope_id=${
+ mySyft.scopeId
+ }`
+ )
+ );
+ }
+
+ // 4. Create a direct P2P connection with the other participants
+ mySyft.connectToParticipants();
+ }
+ });
+};
diff --git a/examples/basic-example/package-lock.json b/examples/with-grid/package-lock.json
similarity index 93%
rename from examples/basic-example/package-lock.json
rename to examples/with-grid/package-lock.json
index 3130fd5c..53c168ac 100644
--- a/examples/basic-example/package-lock.json
+++ b/examples/with-grid/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "basic-example",
+ "name": "with-grid",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
@@ -28,9 +28,9 @@
"dev": true
},
"@types/node": {
- "version": "12.6.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz",
- "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==",
+ "version": "12.7.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.3.tgz",
+ "integrity": "sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ==",
"dev": true
},
"@webassemblyjs/ast": {
@@ -232,9 +232,9 @@
}
},
"acorn": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",
- "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
"dev": true
},
"ajv": {
@@ -416,6 +416,12 @@
"integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
"dev": true
},
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -496,9 +502,9 @@
}
},
"base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"dev": true
},
"batch": {
@@ -735,9 +741,9 @@
"dev": true
},
"cacache": {
- "version": "11.3.3",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz",
- "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==",
+ "version": "12.0.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+ "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
"dev": true,
"requires": {
"bluebird": "^3.5.5",
@@ -745,6 +751,7 @@
"figgy-pudding": "^3.5.1",
"glob": "^7.1.4",
"graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
"lru-cache": "^5.1.1",
"mississippi": "^3.0.0",
"mkdirp": "^0.5.1",
@@ -812,9 +819,9 @@
}
},
"chokidar": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz",
- "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
@@ -987,6 +994,14 @@
"on-headers": "~1.0.2",
"safe-buffer": "5.1.2",
"vary": "~1.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"concat-map": {
@@ -1022,6 +1037,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -1061,6 +1082,14 @@
"dev": true,
"requires": {
"safe-buffer": "5.1.2"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"content-type": {
@@ -1228,10 +1257,18 @@
"dev": true
},
"deep-equal": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
- "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
- "dev": true
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz",
+ "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
},
"default-gateway": {
"version": "4.2.0",
@@ -1388,13 +1425,21 @@
}
},
"dom-serializer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
- "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
+ "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
"dev": true,
"requires": {
- "domelementtype": "^1.3.0",
- "entities": "^1.1.1"
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==",
+ "dev": true
+ }
}
},
"domain-browser": {
@@ -1455,6 +1500,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -1526,9 +1577,9 @@
}
},
"entities": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
- "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
"dev": true
},
"errno": {
@@ -1597,9 +1648,9 @@
}
},
"estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"etag": {
@@ -1741,6 +1792,12 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
"dev": true
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
}
}
},
@@ -1952,6 +2009,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -1964,12 +2027,12 @@
}
},
"follow-redirects": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
- "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.8.1.tgz",
+ "integrity": "sha512-micCIbldHioIegeKs41DoH0KS3AXfFzgS30qVkM6z/XOE/GJgvmsoc839NUqa1B9udYe9dQxgv7KFwng6+p/dw==",
"dev": true,
"requires": {
- "debug": "^3.2.6"
+ "debug": "^3.0.0"
},
"dependencies": {
"debug": {
@@ -2041,6 +2104,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2079,6 +2148,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2763,9 +2838,9 @@
}
},
"graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
"dev": true
},
"handle-thing": {
@@ -2900,6 +2975,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2985,6 +3066,14 @@
"entities": "^1.1.1",
"inherits": "^2.0.1",
"readable-stream": "^3.1.1"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+ "dev": true
+ }
}
},
"http-deceiver": {
@@ -3086,6 +3175,12 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3148,6 +3243,12 @@
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
"dev": true
},
+ "is-absolute-url": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz",
+ "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==",
+ "dev": true
+ },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -3168,6 +3269,12 @@
}
}
},
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
"is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@@ -3563,6 +3670,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -3884,6 +3997,29 @@
}
}
}
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
}
}
},
@@ -3954,6 +4090,12 @@
}
}
},
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -4072,9 +4214,9 @@
"dev": true
},
"p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
@@ -4142,6 +4284,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -4194,6 +4342,16 @@
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
+ "path": {
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+ "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+ "dev": true,
+ "requires": {
+ "process": "^0.11.1",
+ "util": "^0.10.3"
+ }
+ },
"path-browserify": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
@@ -4280,9 +4438,9 @@
}
},
"portfinder": {
- "version": "1.0.21",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz",
- "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==",
+ "version": "1.0.23",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz",
+ "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==",
"dev": true,
"requires": {
"async": "^1.5.2",
@@ -4499,6 +4657,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -4520,6 +4684,15 @@
"safe-regex": "^1.1.0"
}
},
+ "regexp.prototype.flags": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz",
+ "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2"
+ }
+ },
"relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -4632,9 +4805,9 @@
"dev": true
},
"rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"requires": {
"glob": "^7.1.3"
@@ -4660,9 +4833,9 @@
}
},
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
+ "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
"dev": true
},
"safe-regex": {
@@ -4707,9 +4880,9 @@
}
},
"semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"send": {
@@ -4742,9 +4915,9 @@
}
},
"serialize-javascript": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz",
- "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.0.tgz",
+ "integrity": "sha512-UkGlcYMtw4d9w7YfCtJFgdRTps8N4L0A48R+SmcGL57ki1+yHwJXnalk5bjgrw+ljv6SfzjzPjhohod2qllg/Q==",
"dev": true
},
"serve-index": {
@@ -5061,9 +5234,9 @@
}
},
"source-map-support": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@@ -5207,6 +5380,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -5256,6 +5435,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -5302,12 +5487,12 @@
}
},
"string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
- "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
},
"strip-ansi": {
@@ -5334,13 +5519,6 @@
"has-flag": "^3.0.0"
}
},
- "syft.js": {
- "version": "file:../..",
- "requires": {
- "@tensorflow/tfjs": "^1.2.5",
- "immutable-tuple": "^0.4.10"
- }
- },
"tapable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
@@ -5348,9 +5526,9 @@
"dev": true
},
"terser": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz",
- "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz",
+ "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==",
"dev": true,
"requires": {
"commander": "^2.20.0",
@@ -5367,20 +5545,19 @@
}
},
"terser-webpack-plugin": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz",
- "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+ "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
"dev": true,
"requires": {
- "cacache": "^11.3.2",
- "find-cache-dir": "^2.0.0",
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
"is-wsl": "^1.1.0",
- "loader-utils": "^1.2.3",
"schema-utils": "^1.0.0",
"serialize-javascript": "^1.7.0",
"source-map": "^0.6.1",
- "terser": "^4.0.0",
- "webpack-sources": "^1.3.0",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
"worker-farm": "^1.7.0"
}
},
@@ -5409,6 +5586,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -5427,9 +5610,9 @@
"dev": true
},
"timers-browserify": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
- "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
"dev": true,
"requires": {
"setimmediate": "^1.0.4"
@@ -5679,9 +5862,9 @@
"dev": true
},
"util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dev": true,
"requires": {
"inherits": "2.0.3"
@@ -5724,9 +5907,9 @@
"dev": true
},
"uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
"dev": true
},
"v8-compile-cache": {
@@ -5768,40 +5951,40 @@
}
},
"webpack": {
- "version": "4.38.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.38.0.tgz",
- "integrity": "sha512-lbuFsVOq8PZY+1Ytz/mYOvYOo+d4IJ31hHk/7iyoeWtwN33V+5HYotSH+UIb9tq914ey0Hot7z6HugD+je3sWw==",
+ "version": "4.39.3",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.3.tgz",
+ "integrity": "sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==",
"dev": true,
"requires": {
"@webassemblyjs/ast": "1.8.5",
"@webassemblyjs/helper-module-context": "1.8.5",
"@webassemblyjs/wasm-edit": "1.8.5",
"@webassemblyjs/wasm-parser": "1.8.5",
- "acorn": "^6.2.0",
- "ajv": "^6.1.0",
- "ajv-keywords": "^3.1.0",
- "chrome-trace-event": "^1.0.0",
+ "acorn": "^6.2.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^4.1.0",
- "eslint-scope": "^4.0.0",
+ "eslint-scope": "^4.0.3",
"json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.3.0",
- "loader-utils": "^1.1.0",
- "memory-fs": "~0.4.1",
- "micromatch": "^3.1.8",
- "mkdirp": "~0.5.0",
- "neo-async": "^2.5.0",
- "node-libs-browser": "^2.0.0",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.1",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
"schema-utils": "^1.0.0",
- "tapable": "^1.1.0",
- "terser-webpack-plugin": "^1.1.0",
- "watchpack": "^1.5.0",
- "webpack-sources": "^1.3.0"
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.1",
+ "watchpack": "^1.6.0",
+ "webpack-sources": "^1.4.1"
}
},
"webpack-cli": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.6.tgz",
- "integrity": "sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.7.tgz",
+ "integrity": "sha512-OhTUCttAsr+IZSMVwGROGRHvT+QAs8H6/mHIl4SvhAwYywjiylYjpwybGx7WQ9Hkb45FhjtsymkwiRRbGJ1SZQ==",
"dev": true,
"requires": {
"chalk": "2.4.2",
@@ -5838,9 +6021,9 @@
}
},
"webpack-dev-server": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz",
- "integrity": "sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz",
+ "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
@@ -5856,23 +6039,25 @@
"import-local": "^2.0.0",
"internal-ip": "^4.3.0",
"ip": "^1.1.5",
+ "is-absolute-url": "^3.0.0",
"killable": "^1.0.1",
"loglevel": "^1.6.3",
"opn": "^5.5.0",
"p-retry": "^3.0.1",
- "portfinder": "^1.0.20",
+ "portfinder": "^1.0.21",
"schema-utils": "^1.0.0",
"selfsigned": "^1.10.4",
- "semver": "^6.1.1",
+ "semver": "^6.3.0",
"serve-index": "^1.9.1",
"sockjs": "0.3.19",
"sockjs-client": "1.3.0",
- "spdy": "^4.0.0",
+ "spdy": "^4.0.1",
"strip-ansi": "^3.0.1",
"supports-color": "^6.1.0",
"url": "^0.11.0",
"webpack-dev-middleware": "^3.7.0",
"webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
"yargs": "12.0.5"
},
"dependencies": {
@@ -6033,9 +6218,9 @@
}
},
"webpack-sources": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
- "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
"dev": true,
"requires": {
"source-list-map": "^2.0.0",
@@ -6117,6 +6302,15 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
diff --git a/examples/basic-example/package.json b/examples/with-grid/package.json
similarity index 60%
rename from examples/basic-example/package.json
rename to examples/with-grid/package.json
index 0f0517e9..ad73a557 100644
--- a/examples/basic-example/package.json
+++ b/examples/with-grid/package.json
@@ -1,11 +1,12 @@
{
- "name": "basic-example",
+ "name": "with-grid",
"version": "1.0.0",
"private": true,
"description": "",
"main": "index.js",
"scripts": {
- "start": "webpack-dev-server --hot --inline --open",
+ "start": "webpack-dev-server --mode development",
+ "build": "rm -rf dist && webpack --mode production",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
@@ -13,11 +14,9 @@
"devDependencies": {
"babel-loader": "^8.0.6",
"html-webpack-plugin": "^3.2.0",
- "webpack": "^4.38.0",
- "webpack-cli": "^3.3.6",
+ "path": "^0.12.7",
+ "webpack": "^4.39.1",
+ "webpack-cli": "^3.3.7",
"webpack-dev-server": "^3.7.2"
- },
- "dependencies": {
- "syft.js": "file:../.."
}
}
diff --git a/examples/with-grid/webpack.config.js b/examples/with-grid/webpack.config.js
new file mode 100644
index 00000000..a39847f0
--- /dev/null
+++ b/examples/with-grid/webpack.config.js
@@ -0,0 +1,33 @@
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+
+module.exports = (env, argv) => ({
+ mode: argv.mode,
+ entry: './index.js',
+ output: {
+ path: path.join(__dirname, '/dist'),
+ filename: 'index.bundle.js'
+ },
+ devtool: argv.mode === 'development' ? 'eval-source-map' : 'source-map',
+ devServer: {
+ port: 8080,
+ hot: true,
+ open: true,
+ stats: {
+ children: false, // Hide children information
+ maxModules: 0 // Set the maximum number of modules to be shown
+ }
+ },
+ module: {
+ rules: [
+ {
+ test: /\.js$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader'
+ }
+ }
+ ]
+ },
+ plugins: [new HtmlWebpackPlugin({ template: './index.html' })]
+});
diff --git a/package-lock.json b/package-lock.json
index 91ba2494..64b19db5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,114 +33,6 @@
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.0.0"
- }
- },
- "@babel/highlight": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
- "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "json5": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
- "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"@babel/generator": {
@@ -154,20 +46,6 @@
"lodash": "^4.17.13",
"source-map": "^0.5.0",
"trim-right": "^1.0.1"
- },
- "dependencies": {
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- }
}
},
"@babel/helper-annotate-as-pure": {
@@ -209,14 +87,6 @@
"@babel/helper-function-name": "^7.1.0",
"@babel/types": "^7.5.5",
"lodash": "^4.17.13"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- }
}
},
"@babel/helper-explode-assignable-expression": {
@@ -288,14 +158,6 @@
"@babel/template": "^7.4.4",
"@babel/types": "^7.5.5",
"lodash": "^4.17.13"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- }
}
},
"@babel/helper-optimise-call-expression": {
@@ -320,14 +182,6 @@
"dev": true,
"requires": {
"lodash": "^4.17.13"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- }
}
},
"@babel/helper-remap-async-to-generator": {
@@ -406,14 +260,6 @@
"chalk": "^2.0.0",
"esutils": "^2.0.2",
"js-tokens": "^4.0.0"
- },
- "dependencies": {
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- }
}
},
"@babel/parser": {
@@ -566,14 +412,6 @@
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"lodash": "^4.17.13"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- }
}
},
"@babel/plugin-transform-classes": {
@@ -590,14 +428,6 @@
"@babel/helper-replace-supers": "^7.5.5",
"@babel/helper-split-export-declaration": "^7.4.4",
"globals": "^11.1.0"
- },
- "dependencies": {
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- }
}
},
"@babel/plugin-transform-computed-properties": {
@@ -920,63 +750,6 @@
"@babel/code-frame": "^7.0.0",
"@babel/parser": "^7.4.4",
"@babel/types": "^7.4.4"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.0.0"
- }
- },
- "@babel/highlight": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
- "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"@babel/traverse": {
@@ -994,90 +767,6 @@
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.0.0"
- }
- },
- "@babel/highlight": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
- "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"@babel/types": {
@@ -1089,20 +778,6 @@
"esutils": "^2.0.2",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
- },
- "dependencies": {
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- }
}
},
"@cnakazawa/watch": {
@@ -1113,118 +788,88 @@
"requires": {
"exec-sh": "^0.3.2",
"minimist": "^1.2.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
}
},
"@jest/console": {
- "version": "24.7.1",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
- "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
+ "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
"dev": true,
"requires": {
- "@jest/source-map": "^24.3.0",
+ "@jest/source-map": "^24.9.0",
"chalk": "^2.0.1",
"slash": "^2.0.0"
}
},
"@jest/core": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz",
- "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
+ "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
"dev": true,
"requires": {
"@jest/console": "^24.7.1",
- "@jest/reporters": "^24.8.0",
- "@jest/test-result": "^24.8.0",
- "@jest/transform": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/reporters": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
"ansi-escapes": "^3.0.0",
"chalk": "^2.0.1",
"exit": "^0.1.2",
"graceful-fs": "^4.1.15",
- "jest-changed-files": "^24.8.0",
- "jest-config": "^24.8.0",
- "jest-haste-map": "^24.8.0",
- "jest-message-util": "^24.8.0",
+ "jest-changed-files": "^24.9.0",
+ "jest-config": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-message-util": "^24.9.0",
"jest-regex-util": "^24.3.0",
- "jest-resolve-dependencies": "^24.8.0",
- "jest-runner": "^24.8.0",
- "jest-runtime": "^24.8.0",
- "jest-snapshot": "^24.8.0",
- "jest-util": "^24.8.0",
- "jest-validate": "^24.8.0",
- "jest-watcher": "^24.8.0",
+ "jest-resolve": "^24.9.0",
+ "jest-resolve-dependencies": "^24.9.0",
+ "jest-runner": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
+ "jest-watcher": "^24.9.0",
"micromatch": "^3.1.10",
"p-each-series": "^1.0.0",
- "pirates": "^4.0.1",
"realpath-native": "^1.1.0",
"rimraf": "^2.5.4",
+ "slash": "^2.0.0",
"strip-ansi": "^5.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
}
},
"@jest/environment": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz",
- "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
+ "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^24.8.0",
- "@jest/transform": "^24.8.0",
- "@jest/types": "^24.8.0",
- "jest-mock": "^24.8.0"
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0"
}
},
"@jest/fake-timers": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz",
- "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
+ "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-mock": "^24.8.0"
+ "@jest/types": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0"
}
},
"@jest/reporters": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz",
- "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
+ "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
"dev": true,
"requires": {
- "@jest/environment": "^24.8.0",
- "@jest/test-result": "^24.8.0",
- "@jest/transform": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.0.1",
"exit": "^0.1.2",
"glob": "^7.1.2",
@@ -1232,13 +877,13 @@
"istanbul-lib-instrument": "^3.0.1",
"istanbul-lib-report": "^2.0.4",
"istanbul-lib-source-maps": "^3.0.1",
- "istanbul-reports": "^2.1.1",
- "jest-haste-map": "^24.8.0",
- "jest-resolve": "^24.8.0",
- "jest-runtime": "^24.8.0",
- "jest-util": "^24.8.0",
+ "istanbul-reports": "^2.2.6",
+ "jest-haste-map": "^24.9.0",
+ "jest-resolve": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-util": "^24.9.0",
"jest-worker": "^24.6.0",
- "node-notifier": "^5.2.1",
+ "node-notifier": "^5.4.2",
"slash": "^2.0.0",
"source-map": "^0.6.0",
"string-length": "^2.0.0"
@@ -1253,9 +898,9 @@
}
},
"@jest/source-map": {
- "version": "24.3.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz",
- "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
+ "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
"dev": true,
"requires": {
"callsites": "^3.0.0",
@@ -1263,12 +908,6 @@
"source-map": "^0.6.0"
},
"dependencies": {
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1278,57 +917,52 @@
}
},
"@jest/test-result": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz",
- "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
+ "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
"dev": true,
"requires": {
- "@jest/console": "^24.7.1",
- "@jest/types": "^24.8.0",
+ "@jest/console": "^24.9.0",
+ "@jest/types": "^24.9.0",
"@types/istanbul-lib-coverage": "^2.0.0"
}
},
"@jest/test-sequencer": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz",
- "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
+ "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
"dev": true,
"requires": {
- "@jest/test-result": "^24.8.0",
- "jest-haste-map": "^24.8.0",
- "jest-runner": "^24.8.0",
- "jest-runtime": "^24.8.0"
+ "@jest/test-result": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-runner": "^24.9.0",
+ "jest-runtime": "^24.9.0"
}
},
"@jest/transform": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz",
- "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
+ "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"babel-plugin-istanbul": "^5.1.0",
"chalk": "^2.0.1",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.1.15",
- "jest-haste-map": "^24.8.0",
- "jest-regex-util": "^24.3.0",
- "jest-util": "^24.8.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-regex-util": "^24.9.0",
+ "jest-util": "^24.9.0",
"micromatch": "^3.1.10",
+ "pirates": "^4.0.1",
"realpath-native": "^1.1.0",
"slash": "^2.0.0",
"source-map": "^0.6.1",
"write-file-atomic": "2.4.1"
},
"dependencies": {
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -1338,14 +972,14 @@
}
},
"@jest/types": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz",
- "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^1.1.1",
- "@types/yargs": "^12.0.9"
+ "@types/yargs": "^13.0.0"
}
},
"@samverschueren/stream-to-observable": {
@@ -1373,25 +1007,25 @@
}
},
"@tensorflow/tfjs": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.5.tgz",
- "integrity": "sha512-oH1qIwr92jvfsS4b1DDEU0gc7vA3XPgRTqAPQ50PV5/QQ+fvjA/gYtJlUCoTINapIgbGffwTn6J+jVilqvz+SA==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-1.2.8.tgz",
+ "integrity": "sha512-pNgLMWNpzWn8AIaTV+1MOjg0a99IBgGjDLLhgDBJ6m6/mzfDdFv2TxcYtF0kdF4asSd4cHaupuELeOzSF2coFw==",
"requires": {
- "@tensorflow/tfjs-converter": "1.2.5",
- "@tensorflow/tfjs-core": "1.2.5",
- "@tensorflow/tfjs-data": "1.2.5",
- "@tensorflow/tfjs-layers": "1.2.5"
+ "@tensorflow/tfjs-converter": "1.2.8",
+ "@tensorflow/tfjs-core": "1.2.8",
+ "@tensorflow/tfjs-data": "1.2.8",
+ "@tensorflow/tfjs-layers": "1.2.8"
}
},
"@tensorflow/tfjs-converter": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.5.tgz",
- "integrity": "sha512-KQoNDl1UDmBBqknaxiFg2tyYoVFyxJ0q5mY/e6mqavokf4vVXn4TsurzxDx++uV6gKEL1fPk9TuSIaq8xHuCRQ=="
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-1.2.8.tgz",
+ "integrity": "sha512-weHzkNRVgnY9TcbA3XTneNgCyuIXLjF8ks8YbFA+81i2w6qO90xiAdWtP2YmR+F9K9S4WR3bSSB0AQKZAp+mPQ=="
},
"@tensorflow/tfjs-core": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.5.tgz",
- "integrity": "sha512-2M88UcKVfcMwtIaDEOJKWAxgX9rO+UdPnRZGSyWW/vH2PiB+jKtB6//7O5V4JpbRjA2ZJFjhfQ5ybfQf8wawRg==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-1.2.8.tgz",
+ "integrity": "sha512-lWV4vAnXAAmahXpCWBwdGGW9HO6iNw9pUeVYih7pDXeJahMk3OJs6SgjRNhwn+ldsGwRoorR0/RHg0yNLmqWxQ==",
"requires": {
"@types/offscreencanvas": "~2019.3.0",
"@types/seedrandom": "2.4.27",
@@ -1399,35 +1033,21 @@
"@types/webgl2": "0.0.4",
"node-fetch": "~2.1.2",
"seedrandom": "2.4.3"
- },
- "dependencies": {
- "node-fetch": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
- "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
- }
}
},
"@tensorflow/tfjs-data": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.5.tgz",
- "integrity": "sha512-WXC+bBZNokP1Y0aNwbQ7sGGKZE08rEEPtSviO95xGzg9cyQrdnaj5cPX0jZiapo3/0gxIpHzm6xFpMCYSFQl0Q==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-1.2.8.tgz",
+ "integrity": "sha512-KUJy55mRx33OodlDKy6Emt2vvV9EadumZ6JzbtZCf1ADK5ddRpRLhCrEmGauCk+Ay1Zj+p6MYx6CLYqhJsENFQ==",
"requires": {
"@types/node-fetch": "^2.1.2",
"node-fetch": "~2.1.2"
- },
- "dependencies": {
- "node-fetch": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
- "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
- }
}
},
"@tensorflow/tfjs-layers": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.5.tgz",
- "integrity": "sha512-ZF7q7wL4bdW4yM4kCPGFUhGkpA3gcJAeqD43sVsG8mYvTTMAnbrQAZ/0+tNE2Rz2qnx7s8VjbUCT4C5EyMFInQ=="
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-1.2.8.tgz",
+ "integrity": "sha512-NMcA44U0rvVpo/VUTMpqkBP3jbvNhRXV7K8KovLi/WZ9FG/u5XIbIqFkcT3QXBDUyjDUNFToYQM/59dtnaut9Q=="
},
"@types/babel__core": {
"version": "7.1.2",
@@ -1525,9 +1145,9 @@
"dev": true
},
"@types/node": {
- "version": "10.5.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.6.tgz",
- "integrity": "sha512-c5Z1j1ysgo4878ptz6gxLcgMfJ6Wf908R3l5KAGabr0XJ72ZFmOCgsaodPpNYTfp4iOrSwgTDvR/BxbFfB4zPQ=="
+ "version": "12.7.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.3.tgz",
+ "integrity": "sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ=="
},
"@types/node-fetch": {
"version": "2.5.0",
@@ -1579,17 +1199,43 @@
"integrity": "sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw=="
},
"@types/yargs": {
- "version": "12.0.12",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz",
- "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz",
+ "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz",
+ "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==",
"dev": true
},
"abab": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
- "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.1.tgz",
+ "integrity": "sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw==",
"dev": true
},
+ "abstract-leveldown": {
+ "version": "0.12.4",
+ "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz",
+ "integrity": "sha1-KeGOYy5g5OIh1YECR4UqY9ey5BA=",
+ "dev": true,
+ "requires": {
+ "xtend": "~3.0.0"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
"acorn": {
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
@@ -1597,9 +1243,9 @@
"dev": true
},
"acorn-globals": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",
- "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz",
+ "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==",
"dev": true,
"requires": {
"acorn": "^6.0.1",
@@ -1607,9 +1253,9 @@
},
"dependencies": {
"acorn": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",
- "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+ "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==",
"dev": true
}
}
@@ -1639,335 +1285,70 @@
"dev": true,
"requires": {
"string-width": "^2.0.0"
- }
- },
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "any-observable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
- "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
- "dev": true
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
},
"dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
}
},
- "fill-range": {
+ "strip-ansi": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
+ "ansi-regex": "^3.0.0"
}
}
}
},
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
}
},
"argparse": {
@@ -2051,6 +1432,17 @@
"safer-buffer": "~2.1.0"
}
},
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
"assert-plus": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
@@ -2069,6 +1461,15 @@
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
"dev": true
},
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
"async-exit-hook": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz",
@@ -2076,9 +1477,9 @@
"dev": true
},
"async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
"asynckit": {
@@ -2088,27 +1489,33 @@
"dev": true
},
"atob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
- "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
"auto-changelog": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-1.14.1.tgz",
- "integrity": "sha512-T98ndHOvMQFz+TCqCi/Tw9jDVgRwECrtB2pkEM8N9snuqZDYPD9QJMRSCt1jr4pOKjvge3Ay2jaMeCpif+hHpw==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-1.16.0.tgz",
+ "integrity": "sha512-oR+ukAp8zSZutQm/CE+5rdlVtRBUcn8lw7QrqinT+vk03mlN3m3ytNPls5W4j2kGFOYKIpwnhR66bkCASfsEjw==",
"dev": true,
"requires": {
- "commander": "^2.20.0",
- "core-js": "^3.1.4",
+ "commander": "^3.0.1",
+ "core-js": "^3.2.1",
"handlebars": "^4.1.2",
"lodash.uniqby": "^4.7.0",
"node-fetch": "^2.6.0",
"parse-github-url": "^1.0.2",
- "regenerator-runtime": "^0.13.2",
- "semver": "^6.1.1"
+ "regenerator-runtime": "^0.13.3",
+ "semver": "^6.3.0"
},
"dependencies": {
+ "node-fetch": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
+ "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
+ "dev": true
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -2130,16 +1537,16 @@
"dev": true
},
"babel-jest": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz",
- "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
+ "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
"dev": true,
"requires": {
- "@jest/transform": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
"@types/babel__core": "^7.1.0",
"babel-plugin-istanbul": "^5.1.0",
- "babel-preset-jest": "^24.6.0",
+ "babel-preset-jest": "^24.9.0",
"chalk": "^2.4.2",
"slash": "^2.0.0"
}
@@ -2163,70 +1570,25 @@
"find-up": "^3.0.0",
"istanbul-lib-instrument": "^3.3.0",
"test-exclude": "^5.2.3"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- }
}
},
"babel-plugin-jest-hoist": {
- "version": "24.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz",
- "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
+ "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
"dev": true,
"requires": {
"@types/babel__traverse": "^7.0.6"
}
},
"babel-preset-jest": {
- "version": "24.6.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz",
- "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
+ "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
"dev": true,
"requires": {
"@babel/plugin-syntax-object-rest-spread": "^7.0.0",
- "babel-plugin-jest-hoist": "^24.6.0"
+ "babel-plugin-jest-hoist": "^24.9.0"
}
},
"balanced-match": {
@@ -2287,18 +1649,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
}
}
},
@@ -2312,15 +1662,46 @@
}
},
"bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz",
+ "integrity": "sha1-yba8oI0bwuoA/Ir7Txpf0eHGbk4=",
"dev": true,
"requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
+ "readable-stream": "~1.0.26"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
}
},
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
"boxen": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
@@ -2336,11 +1717,36 @@
"widest-line": "^2.0.0"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
}
}
},
@@ -2383,14 +1789,19 @@
}
}
},
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
"brotli-size": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.1.0.tgz",
- "integrity": "sha512-5ny7BNvpe2TSmdafF1T9dnFYp3AIrJ8qJt29K0DQJzORlK38LBim/CmlY26JtreV6SWmXza7Oa+9m61SzvxR0Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-4.0.0.tgz",
+ "integrity": "sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==",
"dev": true,
"requires": {
- "duplexer": "^0.1.1",
- "iltorb": "^2.4.3"
+ "duplexer": "0.1.1"
}
},
"browser-process-hrtime": {
@@ -2416,15 +1827,88 @@
}
}
},
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-fs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz",
+ "integrity": "sha1-8HWqinKdTRcW0GZiDjhvzBMRqW8=",
+ "dev": true,
+ "requires": {
+ "level-filesystem": "^1.0.1",
+ "level-js": "^2.1.3",
+ "levelup": "^0.18.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
"browserslist": {
- "version": "4.6.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz",
- "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz",
+ "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30000984",
- "electron-to-chromium": "^1.3.191",
- "node-releases": "^1.1.25"
+ "caniuse-lite": "^1.0.30000989",
+ "electron-to-chromium": "^1.3.247",
+ "node-releases": "^1.1.29"
}
},
"bser": {
@@ -2436,26 +1920,10 @@
"node-int64": "^0.4.0"
}
},
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
- "dev": true
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+ "buffer-es6": {
+ "version": "4.9.3",
+ "resolved": "https://registry.npmjs.org/buffer-es6/-/buffer-es6-4.9.3.tgz",
+ "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=",
"dev": true
},
"buffer-from": {
@@ -2464,6 +1932,12 @@
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
"dev": true
},
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
"builtin-modules": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
@@ -2491,14 +1965,6 @@
"to-object-path": "^0.3.0",
"union-value": "^1.0.0",
"unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
}
},
"cacheable-request": {
@@ -2528,18 +1994,14 @@
"lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
+ "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "dev": true
+ },
+ "normalize-url": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
+ "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
+ "dev": true
}
}
},
@@ -2601,9 +2063,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30000985",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz",
- "integrity": "sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==",
+ "version": "1.0.30000989",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
+ "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==",
"dev": true
},
"capture-exit": {
@@ -2644,18 +2106,22 @@
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true
},
- "chownr": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
- "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==",
- "dev": true
- },
"ci-info": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
"dev": true
},
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
"class-utils": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
@@ -2676,12 +2142,6 @@
"requires": {
"is-descriptor": "^0.1.0"
}
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
}
}
},
@@ -2710,6 +2170,12 @@
"string-width": "^1.0.1"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
"is-fullwidth-code-point": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
@@ -2729,6 +2195,15 @@
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
}
}
},
@@ -2739,33 +2214,22 @@
"dev": true
},
"cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
}
},
+ "clone": {
+ "version": "0.1.19",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz",
+ "integrity": "sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU=",
+ "dev": true
+ },
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
@@ -2798,18 +2262,18 @@
}
},
"color-convert": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
- "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
- "color-name": "1.1.1"
+ "color-name": "1.1.3"
}
},
"color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
"colors": {
@@ -2828,15 +2292,15 @@
}
},
"commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.1.tgz",
+ "integrity": "sha512-UNgvDd+csKdc9GD4zjtkHKQbT8Aspt2jCBqNSPp53vAS0L1tS9sXB2TCEOPHJ7kt9bN/niWkYj8T3RQSoMXdSQ==",
"dev": true
},
"component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"concat-map": {
@@ -2845,6 +2309,18 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
"configstore": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
@@ -2870,17 +2346,14 @@
}
}
},
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
"convert-source-map": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
- "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
- "dev": true
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
},
"copy-descriptor": {
"version": "0.1.1",
@@ -2889,20 +2362,19 @@
"dev": true
},
"core-js": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz",
- "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
+ "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==",
"dev": true
},
"core-js-compat": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz",
- "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
+ "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
"dev": true,
"requires": {
- "browserslist": "^4.6.2",
- "core-js-pure": "3.1.4",
- "semver": "^6.1.1"
+ "browserslist": "^4.6.6",
+ "semver": "^6.3.0"
},
"dependencies": {
"semver": {
@@ -2913,12 +2385,6 @@
}
}
},
- "core-js-pure": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz",
- "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==",
- "dev": true
- },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -2937,6 +2403,16 @@
"parse-json": "^4.0.0"
}
},
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
"create-error-class": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
@@ -2946,17 +2422,65 @@
"capture-stack-trace": "^1.0.0"
}
},
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
"cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
- "lru-cache": "^4.0.1",
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -3027,12 +2551,12 @@
"dev": true
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "ms": "^2.1.1"
}
},
"decamelize": {
@@ -3101,14 +2625,22 @@
"integrity": "sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw==",
"dev": true
},
+ "deferred-leveldown": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz",
+ "integrity": "sha1-LO8fER4cV4cNi7uK8mUOWHzS9bQ=",
+ "dev": true,
+ "requires": {
+ "abstract-leveldown": "~0.12.1"
+ }
+ },
"define-properties": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
- "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
"dev": true,
"requires": {
- "foreach": "^2.0.5",
- "object-keys": "^1.0.8"
+ "object-keys": "^1.0.12"
}
},
"define-property": {
@@ -3149,18 +2681,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
}
}
},
@@ -3193,17 +2713,15 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
- "delegates": {
+ "des.js": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
},
"detect-newline": {
"version": "2.1.0",
@@ -3212,11 +2730,22 @@
"dev": true
},
"diff-sequences": {
- "version": "24.3.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz",
- "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
+ "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==",
"dev": true
},
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
"domexception": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
@@ -3258,9 +2787,9 @@
}
},
"electron-to-chromium": {
- "version": "1.3.200",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.200.tgz",
- "integrity": "sha512-PUurrpyDA74MuAjJRD+79ss5BqJlU3mdArRbuu4wO/dt6jc3Ic/6BDmFJxkdwbfq39cHf/XKm2vW98XSvut9Dg==",
+ "version": "1.3.251",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.251.tgz",
+ "integrity": "sha512-C5oOBdqJTYago4PBeew9duLqWZ3SlDnTRM+PMIgZd/ILFrT5AfaAGd3jRNEfuPklFHFqOjfwbCvXpyzEYb5sXg==",
"dev": true
},
"elegant-spinner": {
@@ -3269,6 +2798,27 @@
"integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
"dev": true
},
+ "elliptic": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
+ "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "email-addresses": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.3.tgz",
+ "integrity": "sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg==",
+ "dev": true
+ },
"emoji-regex": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
@@ -3284,6 +2834,15 @@
"once": "^1.4.0"
}
},
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "dev": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3294,17 +2853,21 @@
}
},
"es-abstract": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
- "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.0.tgz",
+ "integrity": "sha512-lri42nNq1tIohUuwFBYEM3wKwcrcJa78jukGDdWsuaNxTtxBFGFkKUQ15nc9J+ipje4mhbQR6JwABb4VvawR3A==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.0",
"function-bind": "^1.1.1",
"has": "^1.0.3",
+ "has-symbols": "^1.0.0",
"is-callable": "^1.1.4",
"is-regex": "^1.0.4",
- "object-keys": "^1.0.12"
+ "object-inspect": "^1.6.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.0.0",
+ "string.prototype.trimright": "^2.0.0"
}
},
"es-to-primitive": {
@@ -3325,9 +2888,9 @@
"dev": true
},
"escodegen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",
- "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
+ "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
"dev": true,
"requires": {
"esprima": "^3.1.3",
@@ -3359,9 +2922,9 @@
"dev": true
},
"estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"estree-walker": {
@@ -3371,11 +2934,21 @@
"dev": true
},
"esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
"exec-sh": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
@@ -3383,13 +2956,13 @@
"dev": true
},
"execa": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
- "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
@@ -3418,6 +2991,15 @@
"to-regex": "^3.0.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -3435,27 +3017,27 @@
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
- "expand-template": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
- "dev": true
- },
"expect": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz",
- "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
+ "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"ansi-styles": "^3.2.0",
- "jest-get-type": "^24.8.0",
- "jest-matcher-utils": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-regex-util": "^24.3.0"
+ "jest-get-type": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-regex-util": "^24.9.0"
}
},
"extend": {
@@ -3558,12 +3140,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
}
}
},
@@ -3609,6 +3185,33 @@
"escape-string-regexp": "^1.0.5"
}
},
+ "filename-reserved-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
+ "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=",
+ "dev": true
+ },
+ "filenamify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
+ "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
+ "dev": true,
+ "requires": {
+ "filename-reserved-regex": "^1.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ }
+ },
+ "filenamify-url": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz",
+ "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=",
+ "dev": true,
+ "requires": {
+ "filenamify": "^1.0.0",
+ "humanize-url": "^1.0.0"
+ }
+ },
"filesize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-4.1.2.tgz",
@@ -3639,12 +3242,12 @@
}
},
"find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
- "locate-path": "^2.0.0"
+ "locate-path": "^3.0.0"
}
},
"for-in": {
@@ -3685,11 +3288,16 @@
"map-cache": "^0.2.2"
}
},
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true
+ "fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
},
"fs.realpath": {
"version": "1.0.0",
@@ -4251,48 +3859,45 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "fwd-stream": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz",
+ "integrity": "sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo=",
"dev": true,
"requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
+ "readable-stream": "~1.0.26-4"
},
"dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
},
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
}
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
}
}
},
"get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-stdin": {
@@ -4302,10 +3907,13 @@
"dev": true
},
"get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
},
"get-value": {
"version": "2.0.6",
@@ -4322,11 +3930,29 @@
"assert-plus": "^1.0.0"
}
},
- "github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
- "dev": true
+ "gh-pages": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.1.1.tgz",
+ "integrity": "sha512-yNW2SFp9xGRP/8Sk2WXuLI/Gn92oOL4HBgudn6PsqAnuWT90Y1tozJoTfX1WdrDSW5Rb90kLVOf5mm9KJ/2fDw==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.1",
+ "commander": "^2.18.0",
+ "email-addresses": "^3.0.1",
+ "filenamify-url": "^1.0.0",
+ "fs-extra": "^7.0.0",
+ "globby": "^6.1.0",
+ "graceful-fs": "^4.1.11",
+ "rimraf": "^2.6.2"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+ "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
+ "dev": true
+ }
+ }
},
"github-url-from-git": {
"version": "1.5.0",
@@ -4335,9 +3961,9 @@
"dev": true
},
"glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -4357,6 +3983,12 @@
"ini": "^1.3.4"
}
},
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
"globby": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
@@ -4395,33 +4027,12 @@
"p-cancelable": "^1.0.0",
"to-readable-stream": "^1.0.0",
"url-parse-lax": "^3.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
}
},
"graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
"dev": true
},
"growly": {
@@ -4500,6 +4111,14 @@
"dev": true,
"requires": {
"ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
}
},
"has-flag": {
@@ -4514,12 +4133,6 @@
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
"dev": true
},
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
"has-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -4529,14 +4142,6 @@
"get-value": "^2.0.6",
"has-values": "^1.0.0",
"isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
}
},
"has-values": {
@@ -4549,26 +4154,6 @@
"kind-of": "^4.0.0"
},
"dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
"kind-of": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
@@ -4586,10 +4171,41 @@
"integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
"dev": true
},
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
"hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
+ "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
"dev": true
},
"html-encoding-sniffer": {
@@ -4618,10 +4234,20 @@
"sshpk": "^1.7.0"
}
},
+ "humanize-url": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz",
+ "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=",
+ "dev": true,
+ "requires": {
+ "normalize-url": "^1.0.0",
+ "strip-url-auth": "^1.0.0"
+ }
+ },
"husky": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.1.tgz",
- "integrity": "sha512-PXBv+iGKw23GHUlgELRlVX9932feFL407/wHFwtsGeArp0dDM4u+/QusSQwPKxmNgjpSL+ustbOdQ2jetgAZbA==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.5.tgz",
+ "integrity": "sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
@@ -4631,49 +4257,12 @@
"is-ci": "^2.0.0",
"opencollective-postinstall": "^2.0.2",
"pkg-dir": "^4.2.0",
- "please-upgrade-node": "^3.1.1",
+ "please-upgrade-node": "^3.2.0",
"read-pkg": "^5.1.1",
"run-node": "^1.0.0",
"slash": "^3.0.0"
},
"dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
"parse-json": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
@@ -4686,16 +4275,6 @@
"lines-and-columns": "^1.1.6"
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -4713,12 +4292,6 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
}
}
},
@@ -4731,33 +4304,18 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
+ "idb-wrapper": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz",
+ "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==",
+ "dev": true
+ },
"ignore": {
"version": "3.3.10",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
"dev": true
},
- "iltorb": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.3.tgz",
- "integrity": "sha512-cr/kC07Cf9sW3TWH7yUxV2QkNjby4LMCsXGmxPCQs5x//QzTpF3GLPNY7L66G+DkNGaTRCgY+vYZ+dyAcuDOnQ==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "nan": "^2.13.2",
- "npmlog": "^4.1.2",
- "prebuild-install": "^5.3.0",
- "which-pm-runs": "^1.0.0"
- },
- "dependencies": {
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
- "dev": true
- }
- }
- },
"immutable-tuple": {
"version": "0.4.10",
"resolved": "https://registry.npmjs.org/immutable-tuple/-/immutable-tuple-0.4.10.tgz",
@@ -4789,49 +4347,6 @@
"resolve-cwd": "^2.0.0"
},
"dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
"pkg-dir": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -4855,6 +4370,12 @@
"integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
"dev": true
},
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4866,9 +4387,9 @@
}
},
"inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"ini": {
@@ -4878,9 +4399,9 @@
"dev": true
},
"inquirer": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz",
- "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==",
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
"dev": true,
"requires": {
"ansi-escapes": "^3.2.0",
@@ -4899,18 +4420,30 @@
},
"dependencies": {
"ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "ansi-regex": "^4.1.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
}
}
@@ -4924,18 +4457,18 @@
"loose-envify": "^1.0.0"
}
},
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
"ip-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz",
"integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==",
"dev": true
},
+ "is": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
+ "integrity": "sha1-OzSixI81mXLzUEKEkZOucmS2NWI=",
+ "dev": true
+ },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -4943,6 +4476,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-arrayish": {
@@ -4979,6 +4523,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-date-object": {
@@ -5070,14 +4625,31 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"is-obj": {
"version": "1.0.1",
- "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
+ "is-object": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz",
+ "integrity": "sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc=",
+ "dev": true
+ },
"is-observable": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
@@ -5124,14 +4696,6 @@
"dev": true,
"requires": {
"isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
}
},
"is-promise": {
@@ -5227,6 +4791,12 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
+ "isbuffer": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz",
+ "integrity": "sha1-OMFG2d9Si4v5sHAcPUPPEt8/w5s=",
+ "dev": true
+ },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -5315,21 +4885,6 @@
"source-map": "^0.6.1"
},
"dependencies": {
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -5348,272 +4903,216 @@
}
},
"jest": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz",
- "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz",
+ "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==",
"dev": true,
"requires": {
"import-local": "^2.0.0",
- "jest-cli": "^24.8.0"
+ "jest-cli": "^24.9.0"
},
"dependencies": {
"jest-cli": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz",
- "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
+ "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
"dev": true,
"requires": {
- "@jest/core": "^24.8.0",
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/core": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.0.1",
"exit": "^0.1.2",
"import-local": "^2.0.0",
"is-ci": "^2.0.0",
- "jest-config": "^24.8.0",
- "jest-util": "^24.8.0",
- "jest-validate": "^24.8.0",
+ "jest-config": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
"prompts": "^2.0.1",
"realpath-native": "^1.1.0",
- "yargs": "^12.0.2"
+ "yargs": "^13.3.0"
}
}
}
},
"jest-changed-files": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz",
- "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
+ "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"execa": "^1.0.0",
"throat": "^4.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
}
},
"jest-config": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz",
- "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
+ "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^24.8.0",
- "@jest/types": "^24.8.0",
- "babel-jest": "^24.8.0",
+ "@jest/test-sequencer": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "babel-jest": "^24.9.0",
"chalk": "^2.0.1",
"glob": "^7.1.1",
- "jest-environment-jsdom": "^24.8.0",
- "jest-environment-node": "^24.8.0",
- "jest-get-type": "^24.8.0",
- "jest-jasmine2": "^24.8.0",
+ "jest-environment-jsdom": "^24.9.0",
+ "jest-environment-node": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "jest-jasmine2": "^24.9.0",
"jest-regex-util": "^24.3.0",
- "jest-resolve": "^24.8.0",
- "jest-util": "^24.8.0",
- "jest-validate": "^24.8.0",
+ "jest-resolve": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
"micromatch": "^3.1.10",
- "pretty-format": "^24.8.0",
+ "pretty-format": "^24.9.0",
"realpath-native": "^1.1.0"
}
},
"jest-diff": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz",
- "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
+ "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
"dev": true,
"requires": {
"chalk": "^2.0.1",
- "diff-sequences": "^24.3.0",
- "jest-get-type": "^24.8.0",
- "pretty-format": "^24.8.0"
+ "diff-sequences": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
}
},
"jest-docblock": {
- "version": "24.3.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz",
- "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
+ "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
"dev": true,
"requires": {
"detect-newline": "^2.1.0"
}
},
"jest-each": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz",
- "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
+ "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.0.1",
- "jest-get-type": "^24.8.0",
- "jest-util": "^24.8.0",
- "pretty-format": "^24.8.0"
+ "jest-get-type": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "pretty-format": "^24.9.0"
}
},
"jest-environment-jsdom": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz",
- "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
+ "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
"dev": true,
"requires": {
- "@jest/environment": "^24.8.0",
- "@jest/fake-timers": "^24.8.0",
- "@jest/types": "^24.8.0",
- "jest-mock": "^24.8.0",
- "jest-util": "^24.8.0",
+ "@jest/environment": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-util": "^24.9.0",
"jsdom": "^11.5.1"
}
},
"jest-environment-node": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz",
- "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
+ "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
"dev": true,
"requires": {
- "@jest/environment": "^24.8.0",
- "@jest/fake-timers": "^24.8.0",
- "@jest/types": "^24.8.0",
- "jest-mock": "^24.8.0",
- "jest-util": "^24.8.0"
+ "@jest/environment": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "jest-mock": "^24.9.0",
+ "jest-util": "^24.9.0"
}
},
"jest-get-type": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz",
- "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
+ "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==",
"dev": true
},
"jest-haste-map": {
- "version": "24.8.1",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz",
- "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
+ "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"anymatch": "^2.0.0",
"fb-watchman": "^2.0.0",
"fsevents": "^1.2.7",
"graceful-fs": "^4.1.15",
"invariant": "^2.2.4",
- "jest-serializer": "^24.4.0",
- "jest-util": "^24.8.0",
- "jest-worker": "^24.6.0",
+ "jest-serializer": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.9.0",
"micromatch": "^3.1.10",
"sane": "^4.0.3",
"walker": "^1.0.7"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- }
}
},
"jest-jasmine2": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz",
- "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
+ "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^24.8.0",
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.0.1",
"co": "^4.6.0",
- "expect": "^24.8.0",
+ "expect": "^24.9.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^24.8.0",
- "jest-matcher-utils": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-runtime": "^24.8.0",
- "jest-snapshot": "^24.8.0",
- "jest-util": "^24.8.0",
- "pretty-format": "^24.8.0",
+ "jest-each": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "pretty-format": "^24.9.0",
"throat": "^4.0.0"
}
},
"jest-leak-detector": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz",
- "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
+ "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
"dev": true,
"requires": {
- "pretty-format": "^24.8.0"
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
}
},
"jest-matcher-utils": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz",
- "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
+ "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
"dev": true,
"requires": {
"chalk": "^2.0.1",
- "jest-diff": "^24.8.0",
- "jest-get-type": "^24.8.0",
- "pretty-format": "^24.8.0"
+ "jest-diff": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "pretty-format": "^24.9.0"
}
},
"jest-message-util": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz",
- "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
+ "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
"@types/stack-utils": "^1.0.1",
"chalk": "^2.0.1",
"micromatch": "^3.1.10",
@@ -5622,12 +5121,12 @@
}
},
"jest-mock": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz",
- "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0"
+ "@jest/types": "^24.9.0"
}
},
"jest-pnp-resolver": {
@@ -5637,18 +5136,18 @@
"dev": true
},
"jest-regex-util": {
- "version": "24.3.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz",
- "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
+ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
"dev": true
},
"jest-resolve": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz",
- "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+ "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"browser-resolve": "^1.11.3",
"chalk": "^2.0.1",
"jest-pnp-resolver": "^1.2.1",
@@ -5656,141 +5155,120 @@
}
},
"jest-resolve-dependencies": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz",
- "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
+ "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"jest-regex-util": "^24.3.0",
- "jest-snapshot": "^24.8.0"
+ "jest-snapshot": "^24.9.0"
}
},
"jest-runner": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz",
- "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
+ "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
"dev": true,
"requires": {
"@jest/console": "^24.7.1",
- "@jest/environment": "^24.8.0",
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/environment": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.4.2",
"exit": "^0.1.2",
"graceful-fs": "^4.1.15",
- "jest-config": "^24.8.0",
+ "jest-config": "^24.9.0",
"jest-docblock": "^24.3.0",
- "jest-haste-map": "^24.8.0",
- "jest-jasmine2": "^24.8.0",
- "jest-leak-detector": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-resolve": "^24.8.0",
- "jest-runtime": "^24.8.0",
- "jest-util": "^24.8.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-jasmine2": "^24.9.0",
+ "jest-leak-detector": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-resolve": "^24.9.0",
+ "jest-runtime": "^24.9.0",
+ "jest-util": "^24.9.0",
"jest-worker": "^24.6.0",
"source-map-support": "^0.5.6",
"throat": "^4.0.0"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- }
}
},
"jest-runtime": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz",
- "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
+ "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
"dev": true,
"requires": {
"@jest/console": "^24.7.1",
- "@jest/environment": "^24.8.0",
+ "@jest/environment": "^24.9.0",
"@jest/source-map": "^24.3.0",
- "@jest/transform": "^24.8.0",
- "@jest/types": "^24.8.0",
- "@types/yargs": "^12.0.2",
+ "@jest/transform": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/yargs": "^13.0.0",
"chalk": "^2.0.1",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.1.15",
- "jest-config": "^24.8.0",
- "jest-haste-map": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-mock": "^24.8.0",
+ "jest-config": "^24.9.0",
+ "jest-haste-map": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0",
"jest-regex-util": "^24.3.0",
- "jest-resolve": "^24.8.0",
- "jest-snapshot": "^24.8.0",
- "jest-util": "^24.8.0",
- "jest-validate": "^24.8.0",
+ "jest-resolve": "^24.9.0",
+ "jest-snapshot": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-validate": "^24.9.0",
"realpath-native": "^1.1.0",
"slash": "^2.0.0",
"strip-bom": "^3.0.0",
- "yargs": "^12.0.2"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- }
+ "yargs": "^13.3.0"
}
},
"jest-serializer": {
- "version": "24.4.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz",
- "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
+ "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
"dev": true
},
"jest-snapshot": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz",
- "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
+ "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0",
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"chalk": "^2.0.1",
- "expect": "^24.8.0",
- "jest-diff": "^24.8.0",
- "jest-matcher-utils": "^24.8.0",
- "jest-message-util": "^24.8.0",
- "jest-resolve": "^24.8.0",
+ "expect": "^24.9.0",
+ "jest-diff": "^24.9.0",
+ "jest-get-type": "^24.9.0",
+ "jest-matcher-utils": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-resolve": "^24.9.0",
"mkdirp": "^0.5.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^24.8.0",
- "semver": "^5.5.0"
+ "pretty-format": "^24.9.0",
+ "semver": "^6.2.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
"jest-util": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz",
- "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+ "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
"dev": true,
"requires": {
- "@jest/console": "^24.7.1",
- "@jest/fake-timers": "^24.8.0",
- "@jest/source-map": "^24.3.0",
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
+ "@jest/console": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/source-map": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
"callsites": "^3.0.0",
"chalk": "^2.0.1",
"graceful-fs": "^4.1.15",
@@ -5800,12 +5278,6 @@
"source-map": "^0.6.0"
},
"dependencies": {
- "graceful-fs": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
- "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
- "dev": true
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -5815,41 +5287,41 @@
}
},
"jest-validate": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz",
- "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
+ "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
- "camelcase": "^5.0.0",
+ "@jest/types": "^24.9.0",
+ "camelcase": "^5.3.1",
"chalk": "^2.0.1",
- "jest-get-type": "^24.8.0",
- "leven": "^2.1.0",
- "pretty-format": "^24.8.0"
+ "jest-get-type": "^24.9.0",
+ "leven": "^3.1.0",
+ "pretty-format": "^24.9.0"
}
},
"jest-watcher": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz",
- "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
+ "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
"dev": true,
"requires": {
- "@jest/test-result": "^24.8.0",
- "@jest/types": "^24.8.0",
- "@types/yargs": "^12.0.9",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/yargs": "^13.0.0",
"ansi-escapes": "^3.0.0",
"chalk": "^2.0.1",
- "jest-util": "^24.8.0",
+ "jest-util": "^24.9.0",
"string-length": "^2.0.0"
}
},
"jest-worker": {
- "version": "24.6.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz",
- "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
"dev": true,
"requires": {
- "merge-stream": "^1.0.1",
+ "merge-stream": "^2.0.0",
"supports-color": "^6.1.0"
},
"dependencies": {
@@ -5871,9 +5343,9 @@
"dev": true
},
"js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js-yaml": {
@@ -5926,6 +5398,12 @@
"xml-name-validator": "^3.0.0"
}
},
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
@@ -5956,6 +5434,24 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@@ -5978,13 +5474,10 @@
}
},
"kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
},
"kleur": {
"version": "3.0.3",
@@ -6001,25 +5494,228 @@
"package-json": "^4.0.0"
}
},
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
"left-pad": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
"integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==",
"dev": true
},
+ "level-blobs": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz",
+ "integrity": "sha1-mrm5e7mfHtv594o0M+Ie1WOGva8=",
+ "dev": true,
+ "requires": {
+ "level-peek": "1.0.6",
+ "once": "^1.3.0",
+ "readable-stream": "^1.0.26-4"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "level-filesystem": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz",
+ "integrity": "sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "^1.4.4",
+ "errno": "^0.1.1",
+ "fwd-stream": "^1.0.4",
+ "level-blobs": "^0.1.7",
+ "level-peek": "^1.0.6",
+ "level-sublevel": "^5.2.0",
+ "octal": "^1.0.0",
+ "once": "^1.3.0",
+ "xtend": "^2.2.0"
+ }
+ },
+ "level-fix-range": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz",
+ "integrity": "sha1-vxW5Fa422EcMgh6IPd95zRZCCCg=",
+ "dev": true
+ },
+ "level-hooks": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz",
+ "integrity": "sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM=",
+ "dev": true,
+ "requires": {
+ "string-range": "~1.2"
+ }
+ },
+ "level-js": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz",
+ "integrity": "sha1-vAVfQYBjXUSJtWHJSG+jcOjBFpc=",
+ "dev": true,
+ "requires": {
+ "abstract-leveldown": "~0.12.0",
+ "idb-wrapper": "^1.5.0",
+ "isbuffer": "~0.0.0",
+ "ltgt": "^2.1.2",
+ "typedarray-to-buffer": "~1.0.0",
+ "xtend": "~2.1.2"
+ },
+ "dependencies": {
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
+ "level-peek": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz",
+ "integrity": "sha1-vsUccqgu5GTTNkNMfIdsP8vM538=",
+ "dev": true,
+ "requires": {
+ "level-fix-range": "~1.0.2"
+ }
+ },
+ "level-sublevel": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz",
+ "integrity": "sha1-dEwSxy0ucr543eO5tc2E1iGRQTo=",
+ "dev": true,
+ "requires": {
+ "level-fix-range": "2.0",
+ "level-hooks": ">=4.4.0 <5",
+ "string-range": "~1.2.1",
+ "xtend": "~2.0.4"
+ },
+ "dependencies": {
+ "level-fix-range": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz",
+ "integrity": "sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug=",
+ "dev": true,
+ "requires": {
+ "clone": "~0.1.9"
+ }
+ },
+ "object-keys": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz",
+ "integrity": "sha1-zd7AKZiwkb5CvxA1rjLknxy26mc=",
+ "dev": true,
+ "requires": {
+ "foreach": "~2.0.1",
+ "indexof": "~0.0.1",
+ "is": "~0.2.6"
+ }
+ },
+ "xtend": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz",
+ "integrity": "sha1-XqZXptukRwacLlnFihE4ywxebO4=",
+ "dev": true,
+ "requires": {
+ "is-object": "~0.1.2",
+ "object-keys": "~0.2.0"
+ }
+ }
+ }
+ },
+ "levelup": {
+ "version": "0.18.6",
+ "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz",
+ "integrity": "sha1-5qAcsIlhbI7MApHCqb0/DETj5es=",
+ "dev": true,
+ "requires": {
+ "bl": "~0.8.1",
+ "deferred-leveldown": "~0.2.0",
+ "errno": "~0.1.1",
+ "prr": "~0.0.0",
+ "readable-stream": "~1.0.26",
+ "semver": "~2.3.1",
+ "xtend": "~3.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "prr": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz",
+ "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "semver": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz",
+ "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
"leven": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
- "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true
},
"levn": {
@@ -6120,6 +5816,16 @@
"symbol-observable": "1.0.1"
}
},
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -6159,6 +5865,12 @@
"strip-ansi": "^3.0.1"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
@@ -6197,6 +5909,15 @@
"chalk": "^1.0.0"
}
},
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -6230,12 +5951,12 @@
}
},
"locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
- "p-locate": "^2.0.0",
+ "p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
@@ -6289,6 +6010,16 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -6336,15 +6067,21 @@
"dev": true
},
"lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"dev": true,
"requires": {
"pseudomap": "^1.0.2",
"yallist": "^2.1.2"
}
},
+ "ltgt": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz",
+ "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=",
+ "dev": true
+ },
"magic-string": {
"version": "0.25.3",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz",
@@ -6369,12 +6106,6 @@
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
- },
- "semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
- "dev": true
}
}
},
@@ -6417,6 +6148,17 @@
"object-visit": "^1.0.0"
}
},
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
"mem": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
@@ -6426,6 +6168,14 @@
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^2.0.0",
"p-is-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ }
}
},
"meow": {
@@ -6451,6 +6201,49 @@
"integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
"dev": true
},
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
"read-pkg-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
@@ -6473,13 +6266,10 @@
}
},
"merge-stream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
- "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
},
"micromatch": {
"version": "3.1.10",
@@ -6500,14 +6290,16 @@
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
}
},
"mime-db": {
@@ -6526,9 +6318,9 @@
}
},
"mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
"mimic-response": {
@@ -6537,6 +6329,18 @@
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"dev": true
},
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -6547,9 +6351,9 @@
}
},
"minimist": {
- "version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"minimist-options": {
@@ -6563,9 +6367,9 @@
}
},
"mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
@@ -6585,17 +6389,25 @@
},
"mkdirp": {
"version": "0.5.1",
- "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
"minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
}
},
"mock-socket": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-8.1.0.tgz",
- "integrity": "sha512-1nY+uRPbnykOcIjl9H3L6Iy6pX4lvremW2l2f+T/pu7j10eNZwWipGuCVOQAD+A9SgWjwKQgUySpKPwQp+vMSQ==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.0.0.tgz",
+ "integrity": "sha512-8Q3y/chmcYRJ6oxhAO9QJwSr6ZWU2zuzD0A7tHa0HOyL83nInIqimFWuke7936IYjEuhBaOrruV+aemlB1f+aA==",
"dev": true,
"requires": {
"url-parse": "^1.4.4"
@@ -6608,9 +6420,9 @@
"dev": true
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"multimatch": {
@@ -6649,40 +6461,14 @@
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
- }
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
}
},
- "napi-build-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz",
- "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==",
- "dev": true
- },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -6701,20 +6487,10 @@
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
- "node-abi": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.9.0.tgz",
- "integrity": "sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA==",
- "dev": true,
- "requires": {
- "semver": "^5.4.1"
- }
- },
"node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz",
+ "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U="
},
"node-int64": {
"version": "0.4.0",
@@ -6729,9 +6505,9 @@
"dev": true
},
"node-notifier": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz",
- "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
+ "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
"dev": true,
"requires": {
"growly": "^1.3.0",
@@ -6742,20 +6518,14 @@
}
},
"node-releases": {
- "version": "1.1.26",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz",
- "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==",
+ "version": "1.1.29",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.29.tgz",
+ "integrity": "sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ==",
"dev": true,
"requires": {
"semver": "^5.3.0"
}
},
- "noop-logger": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
- "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
- "dev": true
- },
"normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -6778,10 +6548,16 @@
}
},
"normalize-url": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz",
- "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==",
- "dev": true
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
},
"np": {
"version": "5.0.3",
@@ -6824,100 +6600,12 @@
"update-notifier": "^2.1.0"
},
"dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
- "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
- "dev": true
- }
- }
- },
"escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
"parse-json": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
@@ -6930,16 +6618,6 @@
"lines-and-columns": "^1.1.6"
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -6967,12 +6645,6 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
- },
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
}
}
},
@@ -7000,18 +6672,6 @@
"path-key": "^2.0.0"
}
},
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -7055,13 +6715,28 @@
"requires": {
"is-descriptor": "^0.1.0"
}
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
}
}
},
+ "object-inspect": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+ "dev": true
+ },
"object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
"object-visit": {
@@ -7071,14 +6746,6 @@
"dev": true,
"requires": {
"isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
}
},
"object.assign": {
@@ -7110,16 +6777,14 @@
"dev": true,
"requires": {
"isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
}
},
+ "octal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz",
+ "integrity": "sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws=",
+ "dev": true
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -7136,6 +6801,14 @@
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ }
}
},
"open": {
@@ -7161,6 +6834,14 @@
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ }
}
},
"optionator": {
@@ -7185,72 +6866,6 @@
}
}
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -7297,21 +6912,21 @@
"dev": true
},
"p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true,
"requires": {
- "p-try": "^1.0.0"
+ "p-try": "^2.0.0"
}
},
"p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
- "p-limit": "^1.1.0"
+ "p-limit": "^2.0.0"
}
},
"p-map": {
@@ -7328,6 +6943,14 @@
"requires": {
"mem": "^4.3.0",
"mimic-fn": "^2.1.0"
+ },
+ "dependencies": {
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ }
}
},
"p-reduce": {
@@ -7346,9 +6969,9 @@
}
},
"p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"package-json": {
@@ -7363,6 +6986,12 @@
"semver": "^5.1.0"
},
"dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
"got": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
@@ -7382,12 +7011,6 @@
"url-parse-lax": "^1.0.0"
}
},
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
"registry-auth-token": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
@@ -7418,6 +7041,20 @@
}
}
},
+ "parse-asn1": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
+ "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
"parse-github-url": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
@@ -7485,6 +7122,19 @@
"pify": "^3.0.0"
}
},
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -7549,15 +7199,6 @@
"p-locate": "^4.1.0"
}
},
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
@@ -7567,12 +7208,6 @@
"p-limit": "^2.2.0"
}
},
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -7582,9 +7217,9 @@
}
},
"please-upgrade-node": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz",
- "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
"dev": true,
"requires": {
"semver-compare": "^1.0.0"
@@ -7602,38 +7237,6 @@
"integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
"dev": true
},
- "prebuild-install": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz",
- "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.0",
- "mkdirp": "^0.5.1",
- "napi-build-utils": "^1.0.1",
- "node-abi": "^2.7.0",
- "noop-logger": "^0.1.1",
- "npmlog": "^4.0.1",
- "os-homedir": "^1.0.1",
- "pump": "^2.0.1",
- "rc": "^1.2.7",
- "simple-get": "^2.7.0",
- "tar-fs": "^1.13.0",
- "tunnel-agent": "^0.6.0",
- "which-pm-runs": "^1.0.0"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
- }
- },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -7641,9 +7244,9 @@
"dev": true
},
"prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
"dev": true
},
"prettier": {
@@ -7653,23 +7256,15 @@
"dev": true
},
"pretty-format": {
- "version": "24.8.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz",
- "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==",
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
+ "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
"dev": true,
"requires": {
- "@jest/types": "^24.8.0",
+ "@jest/types": "^24.9.0",
"ansi-regex": "^4.0.0",
"ansi-styles": "^3.2.0",
"react-is": "^16.8.4"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- }
}
},
"pretty-quick": {
@@ -7686,34 +7281,80 @@
"multimatch": "^3.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "execa": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
+ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
}
},
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "p-try": "^1.0.0"
}
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "p-limit": "^1.1.0"
}
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
}
}
},
@@ -7723,22 +7364,34 @@
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"dev": true
},
+ "process-es6": {
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/process-es6/-/process-es6-0.11.6.tgz",
+ "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=",
+ "dev": true
+ },
"process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
"prompts": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz",
- "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz",
+ "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==",
"dev": true,
"requires": {
- "kleur": "^3.0.2",
- "sisteransi": "^1.0.0"
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.3"
}
},
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "dev": true
+ },
"pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -7746,15 +7399,29 @@
"dev": true
},
"psl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
- "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz",
+ "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==",
"dev": true
},
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
"pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
@@ -7773,6 +7440,16 @@
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
"querystringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
@@ -7785,6 +7462,25 @@
"integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
"dev": true
},
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -7795,20 +7491,12 @@
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- }
}
},
"react-is": {
- "version": "16.8.6",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
- "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
+ "version": "16.9.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
+ "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==",
"dev": true
},
"read-pkg": {
@@ -7830,51 +7518,6 @@
"requires": {
"find-up": "^3.0.0",
"read-pkg": "^3.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- }
}
},
"readable-stream": {
@@ -7952,19 +7595,19 @@
}
},
"regexp-tree": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz",
- "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==",
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz",
+ "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==",
"dev": true
},
"regexpu-core": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz",
- "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==",
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz",
+ "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==",
"dev": true,
"requires": {
"regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.0.2",
+ "regenerate-unicode-properties": "^8.1.0",
"regjsgen": "^0.5.0",
"regjsparser": "^0.6.0",
"unicode-match-property-ecmascript": "^1.0.4",
@@ -8020,9 +7663,9 @@
"dev": true
},
"repeat-element": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
"dev": true
},
"repeat-string": {
@@ -8116,9 +7759,9 @@
"dev": true
},
"resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+ "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -8164,12 +7807,6 @@
"signal-exit": "^3.0.2"
},
"dependencies": {
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
@@ -8188,51 +7825,39 @@
"dev": true
},
"rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"requires": {
"glob": "^7.1.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
}
},
"rollup": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.17.0.tgz",
- "integrity": "sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw==",
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.20.3.tgz",
+ "integrity": "sha512-/OMCkY0c6E8tleeVm4vQVDz24CkVgvueK3r8zTYu2AQNpjrcaPwO9hE+pWj5LTFrvvkaxt4MYIp2zha4y0lRvg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
- "@types/node": "^12.6.2",
- "acorn": "^6.2.0"
+ "@types/node": "^12.7.2",
+ "acorn": "^7.0.0"
},
"dependencies": {
- "@types/node": {
- "version": "12.6.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.8.tgz",
- "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==",
- "dev": true
- },
"acorn": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",
- "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
+ "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==",
"dev": true
}
}
@@ -8248,9 +7873,9 @@
}
},
"rollup-plugin-commonjs": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.0.1.tgz",
- "integrity": "sha512-x0PcCVdEc4J8igv1qe2vttz8JKAKcTs3wfIA3L8xEty3VzxgORLrzZrNWaVMc+pBC4U3aDOb9BnWLAQ8J11vkA==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz",
+ "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==",
"dev": true,
"requires": {
"estree-walker": "^0.6.1",
@@ -8258,38 +7883,21 @@
"magic-string": "^0.25.2",
"resolve": "^1.11.0",
"rollup-pluginutils": "^2.8.1"
- },
- "dependencies": {
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
- },
- "resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- }
}
},
"rollup-plugin-filesize": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-6.1.1.tgz",
- "integrity": "sha512-rvLvYXiKJVAPS2pbxzH72B72lnDMR3wM1O2seTWY/8xM6v9I6sO4f+/FrEo0TT2KsTTmCtlnueTFuiWRBKcIZw==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-filesize/-/rollup-plugin-filesize-6.2.0.tgz",
+ "integrity": "sha512-YP0oTqk+gYlRp/l+zPxQ/b5kBAoQ2CSmJv0IAULONTyomFc6YuhZXVNXnYurluh2YMdrNnD0YJvd1IbyRsbJkA==",
"dev": true,
"requires": {
"boxen": "^4.1.0",
- "brotli-size": "0.1.0",
+ "brotli-size": "4.0.0",
"colors": "^1.3.3",
"deep-assign": "^3.0.0",
"filesize": "^4.1.2",
"gzip-size": "^5.1.1",
- "terser": "^4.0.0"
+ "terser": "^4.1.3"
},
"dependencies": {
"ansi-align": {
@@ -8314,21 +7922,6 @@
}
}
},
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
"boxen": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.1.0.tgz",
@@ -8345,23 +7938,6 @@
"widest-line": "^3.1.0"
}
},
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"cli-boxes": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
@@ -8393,30 +7969,18 @@
}
}
},
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"term-size": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-2.1.0.tgz",
"integrity": "sha512-I42EWhJ+2aeNQawGx1VtpO0DFI9YcfuvAMNIdKyf/6sRbHJ4P+ZQ/zIT87tE+ln1ymAGcCJds4dolfSAS0AcNg==",
"dev": true
},
+ "type-fest": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+ "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
+ "dev": true
+ },
"widest-line": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
@@ -8428,6 +7992,18 @@
}
}
},
+ "rollup-plugin-node-builtins": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.2.tgz",
+ "integrity": "sha1-JKH+1KQyV7a2Q3HYq8bOGrFFl+k=",
+ "dev": true,
+ "requires": {
+ "browserify-fs": "^1.0.0",
+ "buffer-es6": "^4.9.2",
+ "crypto-browserify": "^3.11.0",
+ "process-es6": "^0.11.2"
+ }
+ },
"rollup-plugin-node-resolve": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
@@ -8462,6 +8038,14 @@
"integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
"dev": true
},
+ "rtcpeerconnection-shim": {
+ "version": "1.2.15",
+ "resolved": "https://registry.npmjs.org/rtcpeerconnection-shim/-/rtcpeerconnection-shim-1.2.15.tgz",
+ "integrity": "sha512-C6DxhXt7bssQ1nHb154lqeL0SXz5Dx4RczXZu2Aa/L1NJFnEVDxFwCBo3fqtuljhHIGceg5JKBV4XJ0gW5JKyw==",
+ "requires": {
+ "sdp": "^2.6.0"
+ }
+ },
"run-async": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
@@ -8537,61 +8121,6 @@
"micromatch": "^3.1.4",
"minimist": "^1.1.1",
"walker": "~1.0.5"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
}
},
"sax": {
@@ -8606,15 +8135,20 @@
"integrity": "sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==",
"dev": true
},
+ "sdp": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/sdp/-/sdp-2.10.0.tgz",
+ "integrity": "sha512-H+VjfyQpRz9GezhshJmkXTtCAT9/2g9az3GFDPYfGOz0eAOQU1fCrL3S9Dq/eUT9FtOyLi/czdR9PzK3fKUYOQ=="
+ },
"seedrandom": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz",
"integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw="
},
"semver": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
- "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"semver-compare": {
@@ -8639,9 +8173,9 @@
"dev": true
},
"set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
@@ -8661,6 +8195,16 @@
}
}
},
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -8688,27 +8232,10 @@
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
- "simple-concat": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
- "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
- "dev": true
- },
- "simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
- "dev": true,
- "requires": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
"sisteransi": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz",
- "integrity": "sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz",
+ "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==",
"dev": true
},
"slash": {
@@ -8739,6 +8266,15 @@
"use": "^3.1.0"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"define-property": {
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
@@ -8756,6 +8292,12 @@
"requires": {
"is-extendable": "^0.1.0"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
@@ -8807,18 +8349,6 @@
"is-data-descriptor": "^1.0.0",
"kind-of": "^6.0.2"
}
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
}
}
},
@@ -8829,6 +8359,26 @@
"dev": true,
"requires": {
"kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dev": true,
+ "requires": {
+ "is-plain-obj": "^1.0.0"
}
},
"source-map": {
@@ -8851,9 +8401,9 @@
}
},
"source-map-support": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@@ -8986,6 +8536,12 @@
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"dev": true
},
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "dev": true
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -9013,31 +8569,41 @@
}
}
},
+ "string-range": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz",
+ "integrity": "sha1-qJPtNH5yKZvIO++78qaSqNI51d0=",
+ "dev": true
+ },
"string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
+ "emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz",
+ "integrity": "sha1-aLaqjhYsaoDnbjqKDC50cYbicf8=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.0.2"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz",
+ "integrity": "sha1-q0pW2AKgH75yk+EehPJNyBZGYd0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.0.2"
}
},
"string_decoder": {
@@ -9050,12 +8616,12 @@
}
},
"strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "^4.1.0"
}
},
"strip-bom": {
@@ -9082,6 +8648,21 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
+ "strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
+ "strip-url-auth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz",
+ "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164=",
+ "dev": true
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -9109,6 +8690,13 @@
}
}
},
+ "syft-helpers.js": {
+ "version": "git+https://github.com/OpenMined/syft-helpers.js.git#e51115c06057fbb991182d0a40e86b8e9c3db38c",
+ "from": "git+https://github.com/OpenMined/syft-helpers.js.git",
+ "requires": {
+ "immutable-tuple": "^0.4.10"
+ }
+ },
"symbol-observable": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
@@ -9121,45 +8709,6 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
"dev": true
},
- "tar-fs": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz",
- "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==",
- "dev": true,
- "requires": {
- "chownr": "^1.0.1",
- "mkdirp": "^0.5.1",
- "pump": "^1.0.0",
- "tar-stream": "^1.1.2"
- },
- "dependencies": {
- "pump": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
- "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "tar-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
- "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
- "dev": true,
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.2.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.1",
- "xtend": "^4.0.0"
- }
- },
"term-size": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
@@ -9169,6 +8718,17 @@
"execa": "^0.7.0"
},
"dependencies": {
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
"execa": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
@@ -9183,6 +8743,12 @@
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
}
}
},
@@ -9197,9 +8763,9 @@
}
},
"terser": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz",
- "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.1.tgz",
+ "integrity": "sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A==",
"dev": true,
"requires": {
"commander": "^2.20.0",
@@ -9218,16 +8784,6 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
- },
- "source-map-support": {
- "version": "0.5.12",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
- "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
}
}
},
@@ -9241,22 +8797,6 @@
"minimatch": "^3.0.4",
"read-pkg-up": "^4.0.0",
"require-main-filename": "^2.0.0"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
}
},
"throat": {
@@ -9267,7 +8807,7 @@
},
"through": {
"version": "2.3.8",
- "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
},
@@ -9298,10 +8838,10 @@
"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
"dev": true
},
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
"to-object-path": {
@@ -9311,6 +8851,17 @@
"dev": true,
"requires": {
"kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"to-readable-stream": {
@@ -9339,17 +8890,6 @@
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- }
}
},
"tough-cookie": {
@@ -9377,6 +8917,15 @@
"integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
"dev": true
},
+ "trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.2"
+ }
+ },
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
@@ -9414,9 +8963,21 @@
}
},
"type-fest": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
- "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typedarray-to-buffer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz",
+ "integrity": "sha1-m7i6DoQfs/TPH+fCRenz+opf6Zw=",
"dev": true
},
"uglify-js": {
@@ -9475,38 +9036,15 @@
"dev": true
},
"union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
"requires": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
"is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
+ "set-value": "^2.0.1"
}
},
"unique-string": {
@@ -9518,6 +9056,12 @@
"crypto-random-string": "^1.0.0"
}
},
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true
+ },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -9555,12 +9099,6 @@
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
"dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
}
}
},
@@ -9637,6 +9175,14 @@
"dev": true,
"requires": {
"prepend-http": "^2.0.0"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "dev": true
+ }
}
},
"url-regex": {
@@ -9672,9 +9218,9 @@
}
},
"uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==",
"dev": true
},
"validate-npm-package-license": {
@@ -9731,6 +9277,15 @@
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
"dev": true
},
+ "webrtc-adapter": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-7.3.0.tgz",
+ "integrity": "sha512-pKcwt6IR6RLCD6jlcdOOi88iVwdzppHlkOhtgTSuZHtYTxdD09t5fA1Di7GJU7je8oHcCBlNfb7zwBsetERnmQ==",
+ "requires": {
+ "rtcpeerconnection-shim": "^1.2.15",
+ "sdp": "^2.10.0"
+ }
+ },
"whatwg-encoding": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
@@ -9772,21 +9327,6 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
- "which-pm-runs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
- "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
- "dev": true
- },
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
"widest-line": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
@@ -9794,6 +9334,33 @@
"dev": true,
"requires": {
"string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
}
},
"wordwrap": {
@@ -9803,35 +9370,14 @@
"dev": true
},
"wrap-ansi": {
- "version": "2.1.0",
- "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
}
},
"wrappy": {
@@ -9873,9 +9419,9 @@
"dev": true
},
"xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz",
+ "integrity": "sha1-7vax8ZjByN6vrYsXZaBNrUoBxak=",
"dev": true
},
"y18n": {
@@ -9891,80 +9437,27 @@
"dev": true
},
"yargs": {
- "version": "12.0.5",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
- "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
+ "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.2.0",
+ "cliui": "^5.0.0",
"find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
+ "string-width": "^3.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
- "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- }
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.1"
}
},
"yargs-parser": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
- "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "version": "13.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+ "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
diff --git a/package.json b/package.json
index 28f501ec..dc59dc43 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,8 @@
"test": "jest --coverage",
"test:watch": "jest --watch",
"version": "auto-changelog -p && git add CHANGELOG.md",
- "release": "np"
+ "release": "np",
+ "deploy": "./copy-examples.sh && gh-pages -d tmp && rm -rf tmp"
},
"browserslist": "> 0.25%, not dead",
"husky": {
@@ -52,23 +53,29 @@
"/node_modules/",
"/src/_errors.js",
"/test/dummy"
- ]
+ ],
+ "globals": {
+ "window": {}
+ }
},
"dependencies": {
- "@tensorflow/tfjs": "^1.2.5",
- "immutable-tuple": "^0.4.10"
+ "@tensorflow/tfjs": "^1.2.6",
+ "syft-helpers.js": "https://github.com/OpenMined/syft-helpers.js",
+ "webrtc-adapter": "^7.2.9"
},
"peerDependencies": {
- "@tensorflow/tfjs": "^1.2.5"
+ "@tensorflow/tfjs": "^1.2.5",
+ "webrtc-adapter": "^7.2.9"
},
"devDependencies": {
"@babel/core": "^7.5.5",
"@babel/preset-env": "^7.5.5",
"auto-changelog": "^1.14.1",
"babel-jest": "^24.8.0",
+ "gh-pages": "^2.1.1",
"husky": "^3.0.1",
"jest": "^24.8.0",
- "mock-socket": "^8.1.0",
+ "mock-socket": "^9.0.0",
"np": "^5.0.3",
"prettier": "^1.18.2",
"pretty-quick": "^1.11.1",
@@ -77,6 +84,7 @@
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-commonjs": "^10.0.1",
"rollup-plugin-filesize": "^6.1.1",
+ "rollup-plugin-node-builtins": "^2.1.2",
"rollup-plugin-node-resolve": "^5.2.0",
"rollup-plugin-peer-deps-external": "^2.2.0"
}
diff --git a/rollup.config.js b/rollup.config.js
index 07e83382..bf8786e7 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,5 @@
import babel from 'rollup-plugin-babel';
+import builtins from 'rollup-plugin-node-builtins';
import peerDepsExternal from 'rollup-plugin-peer-deps-external';
import resolve from 'rollup-plugin-node-resolve';
import commonjs from 'rollup-plugin-commonjs';
@@ -34,9 +35,12 @@ export default {
}
],
plugins: [
+ builtins(),
peerDepsExternal(),
babel({ exclude: 'node_modules/**' }),
- resolve(),
+ resolve({
+ preferBuiltins: true
+ }),
commonjs(),
filesize()
]
diff --git a/src/_constants.js b/src/_constants.js
deleted file mode 100644
index 4033be8c..00000000
--- a/src/_constants.js
+++ /dev/null
@@ -1,8 +0,0 @@
-export const SOCKET_STATUS = 'socket-status';
-export const GET_TENSORS = 'get-tensors';
-export const GET_TENSOR = 'get-tensor';
-export const MESSAGE_RECEIVED = 'message-received';
-export const MESSAGE_SENT = 'message-sent';
-export const RUN_OPERATION = 'run-operation';
-export const TENSOR_ADDED = 'add-tensor';
-export const TENSOR_REMOVED = 'remove-tensor';
diff --git a/src/_errors.js b/src/_errors.js
deleted file mode 100644
index ad1cfdde..00000000
--- a/src/_errors.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export const NO_DETAILER = d =>
- `You have passed a detailer type that may exist in PySyft, but is not currently supported in syft.js. Please file a feature request (https://github.com/OpenMined/syft.js/issues) for type ${
- d[0]
- }, with value: ${d[1]}.`;
diff --git a/src/_helpers.js b/src/_helpers.js
deleted file mode 100644
index c756073e..00000000
--- a/src/_helpers.js
+++ /dev/null
@@ -1,9 +0,0 @@
-export const getArgs = func =>
- func
- .toString()
- .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '') // Remove all comments
- .replace(/\r?\n|\r/, '') // Remove all new lines
- .match(/function\s.*?\(([^)]*)\)/)[1] // Match the function params and get the 1st group
- .split(',') // Split the group by a ","
- .map(arg => arg.replace(/\/\*.*\*\//, '').trim()) // Map the results
- .filter(arg => arg); // Don't allow for null values!
diff --git a/src/custom-types/plan.js b/src/custom-types/plan.js
deleted file mode 100644
index 9a6fb00d..00000000
--- a/src/custom-types/plan.js
+++ /dev/null
@@ -1,12 +0,0 @@
-export default class Plan {
- constructor(operations, id, args, results, name, tags, description, isBuilt) {
- this.operations = operations;
- this.id = id;
- this.args = args;
- this.results = results;
- this.name = name;
- this.tags = tags;
- this.description = description;
- this.isBuilt = isBuilt;
- }
-}
diff --git a/src/custom-types/pointer-tensor.js b/src/custom-types/pointer-tensor.js
deleted file mode 100644
index ecdb2ecc..00000000
--- a/src/custom-types/pointer-tensor.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Create a class to represent pointer tensors
-// Add all the attributes that are serialized, just as for range and slice
-
-export default class PointerTensor {
- constructor(
- id,
- idAtLocation,
- locationId,
- pointToAttr,
- shape,
- garbageCollectData
- ) {
- this.id = id;
- this.idAtLocation = idAtLocation;
- this.locationId = locationId;
- this.pointToAttr = pointToAttr;
- this.shape = shape;
- this.garbageCollectData = garbageCollectData;
- }
-}
diff --git a/src/custom-types/range.js b/src/custom-types/range.js
deleted file mode 100644
index 83be2fee..00000000
--- a/src/custom-types/range.js
+++ /dev/null
@@ -1,10 +0,0 @@
-export default class Range {
- constructor(start, end, step) {
- this.start = start;
- this.end = end;
- this.step = step;
-
- // TODO: Fill out range further
- // Keep in mind, we don't want to generate the range in memory because that's exactly what makes Python ranges so efficient
- }
-}
diff --git a/src/custom-types/slice.js b/src/custom-types/slice.js
deleted file mode 100644
index 79fd5df5..00000000
--- a/src/custom-types/slice.js
+++ /dev/null
@@ -1,10 +0,0 @@
-export default class Slice {
- constructor(start, end, step = null) {
- this.start = start;
- this.end = end;
- this.step = step;
-
- // TODO: Fill out slice further
- // Keep in mind, we don't want to generate the slice in memory because that's exactly what makes Python ranges so efficient
- }
-}
diff --git a/src/custom-types/torch-size.js b/src/custom-types/torch-size.js
deleted file mode 100644
index 86a9a93a..00000000
--- a/src/custom-types/torch-size.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export default class TorchSize {
- constructor(size) {
- this.size = size;
- }
-}
diff --git a/src/custom-types/torch-tensor.js b/src/custom-types/torch-tensor.js
deleted file mode 100644
index 77e30b84..00000000
--- a/src/custom-types/torch-tensor.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// This needs to map to a TensorFlow tensors
-// Needs to have its own type
-// Add other metadata
-// Need to recursively parse all entries of 'd'
-// Create a new class called TorchTensor
-// Inside of TorchTensor have a ._data (private method) which stores the information in the tensor as a TensorFlow tensor
-// IMPORTANT: This whole class should be written as a way to translate Torch tensors and commands to TensorFlow, otherwise if we receive a TensorFlow tensor, just pass it right through... no need to translate!
-
-// Consider potentially renaming TorchTensor to TensorFlowTensor since we don't have access to Torch in Javascript
-
-export default class TorchTensor {
- constructor(id, bin, chain, gradChain, tags, description) {
- this.id = id;
- this.bin = bin;
- this.chain = chain;
- this.gradChain = gradChain;
- this.tags = tags;
- this.description = description;
- }
-}
diff --git a/src/events.js b/src/events.js
deleted file mode 100644
index b2ff184d..00000000
--- a/src/events.js
+++ /dev/null
@@ -1,21 +0,0 @@
-export default class EventObserver {
- constructor() {
- this.observers = [];
- }
-
- subscribe(type, func) {
- this.observers.push({ type, func });
- }
-
- unsubscribe(eventType) {
- this.observers = this.observers.filter(({ type }) => eventType !== type);
- }
-
- broadcast(eventType, data) {
- this.observers.forEach(observer => {
- if (eventType === observer.type) {
- return observer.func(data);
- }
- });
- }
-}
diff --git a/src/index.js b/src/index.js
index 27e2c05a..f1916f26 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,274 +1,181 @@
-import EventObserver from './events';
-import Logger from './logger';
-import { simplify, detail } from './serde';
+// import * as tf from '@tensorflow/tfjs';
import {
+ EventObserver,
+ Logger,
+ detail,
SOCKET_STATUS,
- GET_TENSORS,
- GET_TENSOR,
- MESSAGE_RECEIVED,
- MESSAGE_SENT,
- RUN_OPERATION,
- TENSOR_ADDED,
- TENSOR_REMOVED
-} from './_constants';
-
-import * as tf from '@tensorflow/tfjs';
-
-export default class Syft {
+ GET_PLANS,
+ WEBRTC_INTERNAL_MESSAGE,
+ WEBRTC_JOIN_ROOM,
+ WEBRTC_PEER_LEFT,
+ WEBRTC_PEER_CONFIG,
+ WEBRTC_PEER_OPTIONS
+} from 'syft-helpers.js';
+
+import Socket from './sockets';
+import WebRTCClient from './webrtc';
+
+export default class syft {
/* ----- CONSTRUCTOR ----- */
constructor(opts = {}) {
- const { url, verbose } = opts;
+ const { url, verbose, instanceId, scopeId, protocolId, peerConfig } = opts;
- // Where all tensors are stored locally
- this.tensors = [];
+ // My instance ID
+ this.instanceId = instanceId || null;
- // Set events to be listened to
- this.observer = new EventObserver();
-
- // Set logger
- this.logger = new Logger(verbose);
-
- // A saved instance of the socket connection
- this.socket = this.createSocketConnection(url);
- }
-
- /* ----- SERDE ----- */
-
- simplify(data) {
- return simplify(data);
- }
-
- detail(data) {
- return detail(data);
- }
-
- /* ----- HELPERS ----- */
+ // The assigned scope ID
+ this.scopeId = scopeId || null;
- // Gets a list of all stored tensors
- getTensors() {
- const tensors = this.tensors;
+ // The chosen protocol we are working on
+ this.protocolId = protocolId;
- this.sendMessage(GET_TENSORS, tensors);
-
- return tensors;
- }
+ // Our role in the plans
+ this.role = null;
- // Gets a tensor by a given id
- getTensorById(id) {
- const tensor = this.tensors.find(x => x.id === id) || null;
+ // The participants we will be working with (only for scope creators)
+ this.participants = [];
- this.sendMessage(GET_TENSOR, tensor);
+ // The list of plans we will be executing
+ this.plans = [];
- return tensor;
- }
+ // For creating event listeners
+ this.observer = new EventObserver();
- // Gets the index of the tensor (found by id) in the stored tensor list
- getTensorIndex(passedId) {
- let returnedIndex = null;
+ // For creating verbose logging should the user desire
+ this.logger = new Logger('syft.js', verbose);
- // Look through all tensors and find the index if it exists
- this.tensors.forEach(({ id }, index) => {
- if (id === passedId) {
- returnedIndex = index;
- }
- });
+ // Create a socket connection at this.socket
+ this.socket = null;
+ this.createSocketConnection(url);
- return returnedIndex;
+ // The WebRTC client used for P2P communication
+ this.rtc = null;
+ this.createWebRTCClient(peerConfig);
}
/* ----- FUNCTIONALITY ----- */
- // Adds a tensor to the list of stored tensors
- addTensor(id, tensor) {
- this.logger.log(`Adding tensor "${id}", with value:`, tensor);
-
- // Create a tensor in TensorFlow
- let createdTensor = {
- id,
- tensor: tf.tensor(tensor)
- };
-
- // Push it onto the stack
- this.tensors.push(createdTensor);
-
- this.sendMessage(TENSOR_ADDED, createdTensor);
-
- this.observer.broadcast(TENSOR_ADDED, {
- id,
- tensor: createdTensor.tensor,
- tensors: this.tensors
+ // Get the list of plans that a participant needs to participate from grid.js
+ getPlans() {
+ return this.socket.send(GET_PLANS, {
+ scopeId: this.scopeId,
+ protocolId: this.protocolId
});
-
- // Return the list of tensors in a Promise so the user knows it was added
- return Promise.resolve(this.tensors);
- }
-
- // Removes a tensor from the list of stored tensors
- removeTensor(id) {
- this.logger.log(`Removing tensor "${id}"`);
-
- // Find the index of the tensor
- const index = this.getTensorIndex(id);
-
- // Remove it if we found it
- if (index !== null) {
- this.tensors.splice(index, 1);
-
- this.sendMessage(TENSOR_REMOVED, id);
-
- this.observer.broadcast(TENSOR_REMOVED, { id, tensors: this.tensors });
-
- // Return the list of tensors in a Promise so the user knows it was removed
- return Promise.resolve(this.tensors);
- }
-
- return Promise.reject({ error: 'We cannot find a tensor with that id' });
- }
-
- // Runs any TensorFlow operation over two given tensors
- runOperation(func, tensors, result_id = null) {
- this.logger.log(
- `Running operation "${func}" on "${tensors[0]}" and "${tensors[1]}"`
- );
-
- // Find our tensors in the stored tensors list
- const firstTensor = this.getTensorById(tensors[0]);
- const secondTensor = this.getTensorById(tensors[1]);
-
- // Did we find both tensors?
- if (firstTensor && secondTensor) {
- // Does the first tensor have this function?
- if (typeof firstTensor.tensor[func] === 'function') {
- // We're all good - run the command
- const result = firstTensor.tensor[func](secondTensor.tensor);
-
- this.sendMessage(RUN_OPERATION, {
- result,
- result_id,
- tensors: [firstTensor, secondTensor]
- });
-
- this.observer.broadcast(RUN_OPERATION, { func, result, result_id });
-
- return Promise.resolve(result);
- }
-
- return Promise.reject({ error: 'Function not found in TensorFlow' });
- }
-
- return Promise.reject({ error: 'Cannot find tensors' });
}
/* ----- EVENT HANDLERS ----- */
- onMessageReceived(func) {
- this.observer.subscribe(MESSAGE_RECEIVED, func);
+ onSocketStatus(func) {
+ this.observer.subscribe(SOCKET_STATUS, func);
}
- onMessageSent(func) {
- this.observer.subscribe(MESSAGE_SENT, func);
- }
+ /* ----- SOCKET COMMUNICATION ----- */
- onRunOperation(func) {
- this.observer.subscribe(RUN_OPERATION, func);
+ // To create a socket connection internally and externally
+ createSocketConnection(url) {
+ if (!url) return;
+
+ this.socket = new Socket({
+ url,
+ logger: this.logger,
+ instanceId: this.instanceId,
+ onOpen: event => this.onOpen(event),
+ onClose: event => this.onClose(event),
+ onMessage: event => this.onMessage(event)
+ });
}
- onTensorAdded(func) {
- this.observer.subscribe(TENSOR_ADDED, func);
+ // To close the socket connection with the grid
+ disconnectFromGrid() {
+ this.socket.stop();
}
- onTensorRemoved(func) {
- this.observer.subscribe(TENSOR_REMOVED, func);
+ // When the socket connection is opened
+ // This is the internal event listener, the external method to subscribe to is "onSocketStatus => ({ connected: true })"
+ onOpen(event) {
+ this.observer.broadcast(SOCKET_STATUS, {
+ connected: true,
+ event
+ });
}
- /* ----- SOCKET COMMUNICATION ----- */
+ // When the socket connection is closed
+ // This is the internal event listener, the external method to subscribe to is "onSocketStatus => ({ connected: false })"
+ onClose(event) {
+ this.observer.broadcast(SOCKET_STATUS, {
+ connected: false,
+ event
+ });
+ }
- // Creates a socket connection if a URL is available
- createSocketConnection(url) {
- if (url) {
- this.logger.log(`Creating socket connection at "${url}"`);
+ // When a socket message is received, parse the message, store it, and return it
+ onMessage(event) {
+ const { type, data } = event;
- return new WebSocket(url);
- }
+ if (type === GET_PLANS) {
+ if (data.error) {
+ this.logger.log('There was an error getting your plans', data.error);
- return null;
- }
+ return data;
+ }
- // Receives a socket message from the server
- receiveMessage(event) {
- event = JSON.parse(event);
-
- this.logger.log(`Received a message of type "${event.type}"`, event);
-
- if (event.type === TENSOR_ADDED) {
- // We have a new tensor, store it...
- this.addTensor(event.id, event.values);
- } else if (event.type === TENSOR_REMOVED) {
- // We need to remove a tensor...
- this.removeTensor(event.id);
- } else if (event.type === GET_TENSOR) {
- // We need to get a tensor...
- this.getTensorById(event.id);
- } else if (event.type === GET_TENSORS) {
- // We need to get all tensors...
- this.getTensors();
- } else if (event.type === RUN_OPERATION) {
- // We have a request to perform an operation, run it...
- this.runOperation(event.func, event.tensors, event.result_id);
- }
+ // Save those plans after having Serde detail them
+ this.plans = data.plans.map(plan => detail(plan));
- this.observer.broadcast(MESSAGE_RECEIVED, event);
- }
+ // Save our instanceId if we don't already have it (also for the socket connection)
+ this.instanceId = data.user.instanceId;
+ this.socket.instanceId = this.instanceId;
- // Sends a socket message back to the server
- sendMessage(type, data) {
- // If we're capable of sending a message
- if (this.socket && this.socket.readyState === 1) {
- // Construct the message
- const message = { type, data };
+ // Save our scopeId if we don't already have it
+ this.scopeId = data.user.scopeId;
- this.logger.log(`Sending message to "${this.socket.url}"`, message);
+ // Save our role
+ this.role = data.user.role;
- // Send it via JSON
- this.socket.send(JSON.stringify(message));
+ // Save the other participant instanceId's
+ this.participants = data.participants;
- this.observer.broadcast(MESSAGE_SENT, message);
-
- return Promise.resolve(message);
+ return this.plans;
+ } else if (type === WEBRTC_INTERNAL_MESSAGE) {
+ this.rtc.receiveInternalMessage(data);
+ } else if (type === WEBRTC_JOIN_ROOM) {
+ this.rtc.receiveNewPeer(data);
+ } else if (type === WEBRTC_PEER_LEFT) {
+ this.rtc.removePeer(data.instanceId);
}
}
- // Starts syft.js
- start(url) {
- // Tell PySyft that we're booting up
- this.sendMessage(SOCKET_STATUS, { status: 'starting' });
+ /* ----- WEBRTC ----- */
- this.logger.log('Starting up...');
+ // To create a socket connection internally and externally
+ createWebRTCClient(peerConfig, peerOptions) {
+ // If we don't have a socket sever, we can't create the WebRTCClient
+ if (!this.socket) return;
- if (url) {
- this.socket = this.createSocketConnection(url);
- }
+ // The default STUN/TURN servers to use for NAT traversal
+ if (!peerConfig) peerConfig = WEBRTC_PEER_CONFIG;
- // Tell PySyft that we're ready to receive instructions
- this.sendMessage(SOCKET_STATUS, { status: 'ready' });
+ // Some standard options for establishing peer connections
+ if (!peerOptions) peerOptions = WEBRTC_PEER_OPTIONS;
- // Listen for incoming messages and dispatch them appropriately
- this.socket.onmessage = this.receiveMessage;
+ this.rtc = new WebRTCClient({
+ peerConfig,
+ peerOptions,
+ logger: this.logger,
+ socket: this.socket
+ });
}
- // Stops syft.js
- stop() {
- this.logger.log('Shutting down...');
-
- // Tell PySyft that we're stopping
- this.sendMessage(SOCKET_STATUS, { status: 'stopped' });
+ connectToParticipants() {
+ this.rtc.start(this.instanceId, this.scopeId);
+ }
- // Kill the socket connection
- this.socket.close();
+ disconnectFromParticipants() {
+ this.rtc.stop();
+ }
- // Destroy record of the tensors and socket connection
- this.tensors = [];
- this.socket = null;
+ sendToParticipants(data, to) {
+ this.rtc.sendMessage(data, to);
}
}
diff --git a/src/logger.js b/src/logger.js
deleted file mode 100644
index 94c40fe9..00000000
--- a/src/logger.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// A simple logging function
-export default class Logger {
- constructor(verbose) {
- this.verbose = verbose;
- }
-
- log(message, data) {
- // Only log if verbose is turned on
- if (this.verbose) {
- const output = `${Date.now()}: syft.js - ${message}`;
-
- // Have the passed additional data?
- if (data) {
- console.log(output, data);
- } else {
- console.log(output);
- }
- }
- }
-}
diff --git a/src/serde.js b/src/serde.js
deleted file mode 100644
index a191068b..00000000
--- a/src/serde.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- TODO: Arbitrary commas are being inserted by PySyft at various places, usually at the end of strings, tuples, and TorchSize. They don't do anything and should not be there, this is an issue with PySyft
- TODO: Let's look at optimization potentials by using Map() (with the key being the instanceof class) for the SIMPLIFIERS and DETAILERS variables
-*/
-
-// Import our types
-import Range from './custom-types/range';
-import Slice from './custom-types/slice';
-import Tuple from 'immutable-tuple';
-import TorchTensor from './custom-types/torch-tensor';
-import TorchSize from './custom-types/torch-size';
-import Plan from './custom-types/plan';
-import PointerTensor from './custom-types/pointer-tensor';
-
-// Import our helpers
-import { getArgs } from './_helpers';
-
-// Import our errors
-import { NO_DETAILER } from './_errors';
-
-// These are the replace functions we will run to convert Javascript to Python
-export const SIMPLIFY_REPLACERS = [
- [/null/g, 'None'], // Convert all nulls to Nones
- [/false/g, 'False'], // Convert all false to False
- [/true/g, 'True'] // Convert all true to True
-];
-
-// These are the replace functions we will run to convert Python to Javascript
-export const DETAIL_REPLACERS = [
- [/\(/g, '['], // Convert all Python tuples into a Javascript Array
- [/\)/g, ']'],
- [/b'/g, "'"], // Convert all undefined 'b' functions everywhere, remove them
- [/'/g, '"'], // Convert all single quotes to double quotes so JSON can parse correctly
- [/None/g, null], // Convert all Nones to nulls
- [/False/g, false], // Convert all False to false
- [/True/g, true], // Convert all True to true
- [/,]/g, ']'] // Trim all Arrays with an extra comma
-];
-
-// A simple function to run the above replacers
-export const runReplacers = (data, replacers) => {
- for (let i = 0; i < replacers.length; i++) {
- data = data.replace(...replacers[i]);
- }
-
- return data;
-};
-
-// To simplify, we must take a Javascript object and turn it into a serialized Python string that can be interpreted by PySyft
-// This involves the following steps in order:
-// 1. Recursively parse the data
-// 2. Depending on the data type, we may run it through a simplifier function to convert that value into a string
-// 3. Run the replacers, which will convert any Javascript values into Python (null, false, true, etc.)
-export const simplify = data => {
- const SIMPLIFIERS = {
- dict: d =>
- `(0, (${Array.from(d)
- .map(([key, value]) => `(${parse(key)}, ${parse(value)})`)
- .join()}))`,
- list: d => `(1, (${d.map(i => parse(i)).join()}))`,
- range: d => `(2, (${d.start}, ${d.end}, ${d.step}))`,
- set: d => `(3, (${[...d].map(i => parse(i)).join()}))`,
- slice: d => `(4, (${d.start}, ${d.end}, ${d.step}))`,
- str: d => `(5, (b'${d}'))`,
- tuple: d => `(6, (${d.map(i => parse(i)).join()}))`,
- torchTensor: d =>
- `(12, (${getArgs(TorchTensor)
- .map(i => parse(d[i]))
- .join()}))`,
- torchSize: d => `(13, (${d.size}))`,
- plan: d => {
- const args = getArgs(Plan),
- operations = d[args[0]].map(i => parse(i)),
- rest = args.slice(1).map(i => parse(d[i]));
-
- return `(18, ((${operations}), ${rest.join()}))`;
- },
- pointerTensor: d =>
- `(19, (${getArgs(PointerTensor)
- .map(i => parse(d[i]))
- .join()}))` // 18 = pointer-tensor
- };
-
- const parse = d => {
- if (d === null) return 'null';
-
- let simplifierId = null;
-
- if (d instanceof Map) simplifierId = 'dict';
- else if (d instanceof Array) simplifierId = 'list';
- else if (d instanceof Range) simplifierId = 'range';
- else if (d instanceof Set) simplifierId = 'set';
- else if (d instanceof Slice) simplifierId = 'slice';
- else if (typeof d === 'string') simplifierId = 'str';
- else if (d instanceof Tuple) simplifierId = 'tuple';
- else if (d instanceof TorchTensor) simplifierId = 'torchTensor';
- else if (d instanceof TorchSize) simplifierId = 'torchSize';
- else if (d instanceof Plan) simplifierId = 'plan';
- else if (d instanceof PointerTensor) simplifierId = 'pointerTensor';
-
- if (simplifierId !== null) {
- return SIMPLIFIERS[simplifierId](d);
- }
-
- return d;
- };
-
- return runReplacers(parse(data), SIMPLIFY_REPLACERS);
-};
-
-// To detail, we must take a Python string serialized in PySyft and turn it into a Javascript object that we can manipulate and store
-// This involves the following steps in order:
-// 1. Run the replacers, which will convert any Python values into Javascript (() => [], None, True, False, etc.)
-// 2. Parse the string as JSON
-// 3. Recursively parse the data
-// 4. Depending on the data type, we may run it through a detailer function to convert that value into the appropriate JAvascript type
-export const detail = data => {
- const DETAILERS = [
- d => new Map(d.map(i => i.map(j => parse(j)))), // 0 = dict
- d => d.map(i => parse(i)), // 1 = list
- d => new Range(...d), // 2 = range
- d => new Set(d.map(i => parse(i))), // 3 = set
- d => new Slice(...d), // 4 = slice
- d => d[0], // 5 = str
- d => Tuple(...d.map(i => parse(i))), // 6 = tuple
- null, // 7
- null, // 8
- null, // 9
- null, // 10
- null, // 11
- d => new TorchTensor(...d.map(i => parse(i))), // 12 = torch-tensor
- d => new TorchSize(d), // 13 = torch.Size
- null, // 14
- null, // 15
- null, // 16
- null, // 17
- d => new Plan(d[0].map(j => parse(j)), ...d.slice(1).map(i => parse(i))), // 18 = plan
- d => new PointerTensor(...d.map(i => parse(i))) // 19 = pointer-tensor
- ];
-
- const parse = d => {
- if (
- Array.isArray(d) &&
- d.length === 2 &&
- typeof d[0] === 'number' &&
- Array.isArray(d[1])
- ) {
- const detailer = DETAILERS[d[0]];
-
- if (detailer) {
- return detailer(d[1]);
- }
-
- throw new Error(NO_DETAILER(d));
- }
-
- return d;
- };
-
- return parse(JSON.parse(runReplacers(data, DETAIL_REPLACERS)));
-};
diff --git a/src/sockets.js b/src/sockets.js
new file mode 100644
index 00000000..531b3850
--- /dev/null
+++ b/src/sockets.js
@@ -0,0 +1,86 @@
+import { SOCKET_PING } from 'syft-helpers.js';
+
+export default class Sockets {
+ constructor(opts) {
+ const {
+ url,
+ logger,
+ instanceId,
+ onOpen,
+ onClose,
+ onMessage,
+ keepAliveTimeout = 20000
+ } = opts;
+
+ const socket = new WebSocket(url);
+
+ const keepAlive = () => {
+ this.send(SOCKET_PING);
+ this.timerId = setTimeout(keepAlive, keepAliveTimeout);
+ };
+
+ const cancelKeepAlive = () => {
+ clearTimeout(this.timerId);
+ this.timerId = null;
+ };
+
+ socket.onopen = event => {
+ this.logger.log(
+ `Opening socket connection at ${event.currentTarget.url}`,
+ event
+ );
+
+ keepAlive();
+
+ if (onOpen) onOpen(event);
+ };
+
+ socket.onclose = event => {
+ this.logger.log(
+ `Closing socket connection at ${event.currentTarget.url}`,
+ event
+ );
+
+ cancelKeepAlive();
+
+ if (onClose) onClose(event);
+ };
+
+ this.url = url;
+ this.logger = logger;
+ this.instanceId = instanceId;
+ this.socket = socket;
+ this.onMessage = onMessage;
+ this.timerId = null;
+ }
+
+ send(type, data = {}) {
+ return new Promise((resolve, reject) => {
+ data.instanceId = this.instanceId;
+
+ const message = { type, data };
+
+ this.logger.log('Sending message', message);
+
+ this.socket.send(JSON.stringify(message));
+
+ this.socket.onmessage = event => {
+ const data = JSON.parse(event.data);
+
+ this.logger.log('Receiving message', data);
+
+ resolve(this.onMessage(data));
+ };
+
+ this.socket.onerror = event => {
+ this.logger.log('We have a socket error!', event);
+
+ reject(event);
+ };
+ });
+ }
+
+ stop() {
+ this.socket.close();
+ }
+}
diff --git a/src/webrtc.js b/src/webrtc.js
new file mode 100644
index 00000000..0782d667
--- /dev/null
+++ b/src/webrtc.js
@@ -0,0 +1,351 @@
+// NOTE: Adding async/await in this file requires regenerator-runtime/runtime which adds an unnecessary 2kb on the minified bundled - no thanks!
+import 'webrtc-adapter';
+
+import {
+ WEBRTC_JOIN_ROOM,
+ WEBRTC_INTERNAL_MESSAGE,
+ WEBRTC_PEER_LEFT
+} from 'syft-helpers.js';
+
+export default class WebRTCClient {
+ constructor(opts) {
+ const { peerConfig, peerOptions, logger, socket } = opts;
+
+ this.peerConfig = peerConfig;
+ this.peerOptions = peerOptions;
+ this.logger = logger;
+ this.socket = socket;
+
+ this.peers = {};
+
+ this.instanceId = null;
+ this.scopeId = null;
+ }
+
+ // The main start command for WebRTC
+ // This will store your id (instanceId) and room (scopeId) and immediately join that room
+ start(instanceId, scopeId) {
+ this.logger.log(`WebRTC: Joining room ${scopeId}`);
+
+ this.instanceId = instanceId;
+ this.scopeId = scopeId;
+
+ // Immediately send a request to enter the room
+ this.socket.send(WEBRTC_JOIN_ROOM, { instanceId, scopeId });
+ }
+
+ // The main stop command for WebRTC
+ // This goes through all the peers and closes the connection from each one
+ stop() {
+ this.logger.log('WebRTC: Disconnecting from peers');
+
+ this.socket.send(WEBRTC_PEER_LEFT, {
+ instanceId: this.instanceId,
+ scopeId: this.scopeId
+ });
+
+ this._forEachPeer((peer, instanceId) => {
+ if (peer.channel) {
+ this.removePeer(instanceId);
+ }
+ }, true);
+ }
+
+ // Remove a peer when the signaling server has notified us they've left or when stop() is run
+ removePeer(instanceId) {
+ // If this peer doesn't exist, forget about it
+ if (!this.peers[instanceId]) return;
+
+ this.logger.log(`WebRTC: Closing connection to ${instanceId}`);
+
+ try {
+ this.peers[instanceId].channel.close();
+ } catch (e) {
+ this.logger.log('WebRTC: Error removing peer', e);
+ }
+
+ delete this.peers[instanceId];
+ }
+
+ // Given a message, this function allows you to "broadcast" a message to all peers
+ // Alternatively, you may send a targeted message to one specific peer (specified by the "to" param)
+ sendMessage(message, to) {
+ this.logger.log('WebRTC: Sending message', message);
+
+ const send = (channel, msg) => {
+ try {
+ channel.send(msg);
+ } catch (e) {
+ this.logger.log('WebRTC: Error sending message', e);
+ }
+ };
+
+ // If "to" is specified, send to that users
+ if (
+ to &&
+ to !== this.instanceId &&
+ this.peers[to] &&
+ this.peers[to].channel
+ ) {
+ send(this.peers[to].channel, message);
+ }
+
+ // Otherwise, send to each user specified
+ else {
+ this._forEachPeer(peer => {
+ if (peer.channel) {
+ send(peer.channel, message);
+ }
+ });
+ }
+ }
+
+ // Create an RTCPeerConnection on our end for each offer or answer we receive
+ createConnection(instanceId) {
+ this.logger.log('WebRTC: Creating connection');
+
+ // Create a new peer in the list with a blank candidate cache (to be populated by ICE candidates we receive)
+ this.peers[instanceId] = {
+ candidateCache: []
+ };
+
+ // Create and initialize the new connection, then add that connection to the peers list
+ const pc = new RTCPeerConnection(this.peerConfig, this.peerOptions);
+ this.initConnection(pc, instanceId, 'answer');
+ this.peers[instanceId].connection = pc;
+
+ // When this peer connection receives a data channel
+ pc.ondatachannel = e => {
+ this.logger.log('WebRTC: Calling ondatachannel');
+
+ this.peers[instanceId].channel = e.channel;
+ this.peers[instanceId].channel.owner = instanceId;
+
+ // Set up all our event listeners for this channel so we can hook into them
+ this.addDataChannelListeners(this.peers[instanceId].channel);
+ };
+ }
+
+ // Initialize a given RTCPeerConnection ("pc"), for a peer ("instanceId"), with an sdpType of "offer" or "answer"
+ initConnection(pc, instanceId, sdpType) {
+ this.logger.log('WebRTC: Initializing connection');
+
+ // How an RTCPeerConnection handle new ICE candidates or offer/answer messages...
+ pc.onicecandidate = event => {
+ // If we have an ICE candidate to handle
+ if (event.candidate) {
+ this.logger.log('WebRTC: Saving new ICE candidate');
+
+ // Save it to the list for further sending
+ this.peers[instanceId].candidateCache.push(event.candidate);
+ }
+
+ // When the candidate discovery is completed, the handler will be called again, but without the candidate
+ else {
+ this.logger.log(`WebRTC: Sending ${sdpType} and stored ICE candidates`);
+
+ // In this case, we first send the first SDP offer or SDP answer (depending on the sdpType)...
+ this.sendInternalMessage(sdpType, pc.localDescription, instanceId);
+
+ // ... then we send all stored ICE candidates
+ for (let i = 0; i < this.peers[instanceId].candidateCache.length; i++) {
+ this.sendInternalMessage(
+ 'candidate',
+ this.peers[instanceId].candidateCache[i],
+ instanceId
+ );
+ }
+ }
+ };
+ }
+
+ // When we receive a new peer's instanceId from grid.js...
+ receiveNewPeer({ instanceId }) {
+ this.logger.log('WebRTC: Adding new peer');
+
+ // Create a new peer in the list with a blank candidate cache (to be populated by ICE candidates we receive)
+ this.peers[instanceId] = {
+ candidateCache: []
+ };
+
+ // Create and initialize the new connection, then add that connection to the peers list
+ const pc = new RTCPeerConnection(this.peerConfig, this.peerOptions);
+ this.initConnection(pc, instanceId, 'offer');
+ this.peers[instanceId].connection = pc;
+
+ // Create a data channel through which messaging will take place, we'll call it "dataChannel"
+ // Designate who owns that channel and push it onto the peers list
+ const channel = pc.createDataChannel('dataChannel');
+ channel.owner = instanceId;
+ this.peers[instanceId].channel = channel;
+
+ // Set up all our event listeners for this channel so we can hook into them
+ this.addDataChannelListeners(channel);
+
+ // Create an SDP offer for the peer connection
+ pc.createOffer()
+ .then(offer => {
+ this.logger.log('WebRTC: Offer created');
+
+ // Set the offer as the local description
+ pc.setLocalDescription(offer)
+ .then(this.logger.log('WebRTC: Set offer as local description'))
+ .catch(
+ this._handleError(
+ 'WebRTC: Error setting offer as local description'
+ )
+ );
+ })
+ .catch(this._handleError('WebRTC: Error creating offer'));
+ }
+
+ // Send an internal WebRTC message (this will always be an ICE candidate or SDP message)
+ sendInternalMessage(type, message, to) {
+ // Don't send to yourself, silly!
+ if (to !== this.instanceId) {
+ this.logger.log('WebRTC: Sending internal WebRTC message');
+
+ this.socket.send(WEBRTC_INTERNAL_MESSAGE, {
+ instanceId: this.instanceId,
+ scopeId: this.scopeId,
+ to,
+ type,
+ data: message
+ });
+ }
+ }
+
+ // Receive an internal WebRTC message (this will always be an ICE candidate or SDP message)
+ receiveInternalMessage({ type, instanceId, data }) {
+ switch (type) {
+ case 'candidate':
+ this.remoteCandidateReceived(instanceId, data);
+ break;
+ case 'offer':
+ this.remoteOfferReceived(instanceId, data);
+ break;
+ case 'answer':
+ this.remoteAnswerReceived(instanceId, data);
+ break;
+ }
+ }
+
+ // When that internal WebRTC message is an ICE candidate
+ remoteCandidateReceived(instanceId, data) {
+ this.logger.log('WebRTC: Remote candidate received');
+
+ // If the connection doesn't exist, create it first
+ if (this.peers[instanceId] === undefined) {
+ this.createConnection(instanceId);
+ }
+
+ // Get the peer connection of that user and add the ICE candidate to their list
+ const pc = this.peers[instanceId].connection;
+
+ pc.addIceCandidate(new RTCIceCandidate(data))
+ .then(this.logger.log('WebRTC: Adding ICE candidate to peer connection'))
+ .catch(
+ this._handleError(
+ 'WebRTC: Error adding ICE candidate to peer connection'
+ )
+ );
+ }
+
+ // When that internal WebRTC message is an SDP offer
+ remoteOfferReceived(instanceId, data) {
+ this.logger.log('WebRTC: Remote offer received');
+
+ // If the connection doesn't exist, create it first
+ if (this.peers[instanceId] === undefined) {
+ this.createConnection(instanceId);
+ }
+
+ // Get the peer connection of that user
+ const pc = this.peers[instanceId].connection;
+
+ // Set the remote description to be the SDP offer
+ pc.setRemoteDescription(new RTCSessionDescription(data))
+ .then(() => {
+ this.logger.log('WebRTC: Setting offer as remote description');
+
+ // Create an SDP answer in response to their SDP offer
+ pc.createAnswer()
+ .then(answer => {
+ this.logger.log('WebRTC: Answer created');
+
+ // Set this answer as the peer's local description
+ pc.setLocalDescription(answer)
+ .then(this.logger.log('WebRTC: Set answer as local description'))
+ .catch(
+ this._handleError(
+ 'WebRTC: Error setting answer as local description'
+ )
+ );
+ })
+ .catch(this._handleError('WebRTC: Error creating answer'));
+ })
+ .catch(
+ this._handleError('WebRTC: Error setting offer as remote description')
+ );
+ }
+
+ // When that internal WebRTC message is an SDP answer
+ remoteAnswerReceived(instanceId, data) {
+ this.logger.log('WebRTC: Remote answer received');
+
+ // Get the peer connection of that user and set the remote description to be the SDP offer
+ const pc = this.peers[instanceId].connection;
+
+ pc.setRemoteDescription(new RTCSessionDescription(data))
+ .then(this.logger.log('WebRTC: Setting answer as remote description'))
+ .catch(
+ this._handleError('WebRTC: Error setting answer as remote description')
+ );
+ }
+
+ // This is used to attach generic logging handlers for data channels.
+ addDataChannelListeners(channel) {
+ // When the data channel is opened
+ channel.onopen = event => {
+ this.logger.log('WebRTC: Data channel open', event);
+ };
+
+ // When the data channel is closed
+ channel.onclose = event => {
+ this.logger.log('WebRTC: Data channel close', event);
+ };
+
+ // When the data channel receives a new message
+ channel.onmessage = event => {
+ this.logger.log('WebRTC: Data channel message', event);
+ };
+
+ // When the data channel errors
+ channel.onerror = err => {
+ this.logger.log('WebRTC: Data channel error', err);
+ };
+ }
+
+ // Generic error handler to just log a message
+ _handleError(message) {
+ const self = this;
+
+ return error => {
+ self.logger.log(message, error);
+ };
+ }
+
+ // Generic for each helper for looping through peers
+ _forEachPeer(callback, includeMe = false) {
+ const peers = this.peers;
+
+ // If we don't want to be in the peer list, remove ourselves
+ if (!includeMe) {
+ delete peers[this.instanceId];
+ }
+
+ for (let peer in peers) {
+ callback(peers[peer], peer);
+ }
+ }
+}
diff --git a/test/_helpers.test.js b/test/_helpers.test.js
deleted file mode 100644
index f2ab4ed6..00000000
--- a/test/_helpers.test.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { getArgs } from '../src/_helpers';
-
-class MyClass {
- constructor(first, second, third) {
- this.first = first;
- this.second = second;
- this.third = third;
- }
-}
-
-describe('Helper functions', () => {
- test('can get the correct number of arguments', () => {
- const args = getArgs(MyClass);
-
- expect(args.length).toBe(3);
- expect(args[0]).toBe('first');
- expect(args[1]).toBe('second');
- expect(args[2]).toBe('third');
- });
-});
diff --git a/test/_webrtc-mocks.js b/test/_webrtc-mocks.js
new file mode 100644
index 00000000..817a2550
--- /dev/null
+++ b/test/_webrtc-mocks.js
@@ -0,0 +1,68 @@
+// RTC classes mocks
+export class RTCPeerConnection {
+ constructor(options, optional) {
+ this.options = options;
+ this.optional = optional;
+ this.localDescription = null;
+ this.remoteDescription = null;
+ this.iceCandidates = [];
+ this.sentMessages = [];
+ this.ondatachannelListener = null;
+ this.onicecandidateListener = null;
+ }
+
+ createDataChannel(label, options) {
+ return {};
+ }
+
+ async createOffer(options) {
+ return Promise.resolve({ type: 'offer', sdp: 'testOfferSdp' });
+ }
+
+ async createAnswer(options) {
+ return Promise.resolve({ type: 'answer', sdp: 'testAnswerSdp' });
+ }
+
+ async setLocalDescription(sessionDescription) {
+ this.localDescription = sessionDescription;
+ return Promise.resolve();
+ }
+
+ async setRemoteDescription(sessionDescription) {
+ this.remoteDescription = sessionDescription;
+ return Promise.resolve();
+ }
+
+ async addIceCandidate(iceCandidate) {
+ this.iceCandidates.push(iceCandidate);
+ return Promise.resolve();
+ }
+
+ get onicecandidate() {
+ return this.onicecandidateListener;
+ }
+
+ set onicecandidate(cb) {
+ this.onicecandidateListener = cb;
+ }
+
+ get ondatachannel() {
+ return this.ondatachannelListener;
+ }
+
+ set ondatachannel(cb) {
+ this.ondatachannelListener = cb;
+ }
+}
+
+export class RTCSessionDescription {
+ constructor(sessionDescription) {
+ Object.assign(this, sessionDescription);
+ }
+}
+
+export class RTCIceCandidate {
+ constructor(iceCandidate) {
+ Object.assign(this, iceCandidate);
+ }
+}
diff --git a/test/custom-types/plan.test.js b/test/custom-types/plan.test.js
deleted file mode 100644
index bc30ae07..00000000
--- a/test/custom-types/plan.test.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import {
- detailedPlan,
- operations,
- id,
- args,
- results,
- name,
- tags,
- description,
- isBuilt
-} from '../dummy/plan';
-
-describe('Plan', () => {
- test('can be properly constructed', () => {
- expect(detailedPlan.operations).toStrictEqual(operations);
- expect(detailedPlan.id).toStrictEqual(id);
- expect(detailedPlan.args).toStrictEqual(args);
- expect(detailedPlan.results).toStrictEqual(results);
- expect(detailedPlan.name).toStrictEqual(name);
- expect(detailedPlan.tags).toStrictEqual(tags);
- expect(detailedPlan.description).toStrictEqual(description);
- expect(detailedPlan.isBuilt).toStrictEqual(isBuilt);
- });
-});
diff --git a/test/custom-types/pointer-tensor.test.js b/test/custom-types/pointer-tensor.test.js
deleted file mode 100644
index 3434cd09..00000000
--- a/test/custom-types/pointer-tensor.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import {
- id,
- idAtLocation,
- locationId,
- pointToAttr,
- shape,
- garbageCollectData,
- firstPointerTensor
-} from '../dummy/pointer-tensor';
-
-describe('PointerTensor', () => {
- test('can be properly constructed', () => {
- expect(firstPointerTensor.id).toStrictEqual(id);
- expect(firstPointerTensor.idAtLocation).toStrictEqual(idAtLocation);
- expect(firstPointerTensor.locationId).toStrictEqual(locationId);
- expect(firstPointerTensor.pointToAttr).toStrictEqual(pointToAttr);
- expect(firstPointerTensor.shape).toStrictEqual(shape);
- expect(firstPointerTensor.garbageCollectData).toStrictEqual(
- garbageCollectData
- );
- });
-});
diff --git a/test/custom-types/range.test.js b/test/custom-types/range.test.js
deleted file mode 100644
index b79615ea..00000000
--- a/test/custom-types/range.test.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { range, start, end, step } from '../dummy/range';
-
-describe('Range', () => {
- test('can be properly constructed', () => {
- expect(range.start).toStrictEqual(start);
- expect(range.end).toStrictEqual(end);
- expect(range.step).toStrictEqual(step);
- });
-});
diff --git a/test/custom-types/slice.test.js b/test/custom-types/slice.test.js
deleted file mode 100644
index 980dd208..00000000
--- a/test/custom-types/slice.test.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { slice, nullStepSlice, start, end, step } from '../dummy/slice';
-
-describe('Slice', () => {
- test('can be properly constructed', () => {
- expect(slice.start).toStrictEqual(start);
- expect(slice.end).toStrictEqual(end);
- expect(slice.step).toStrictEqual(step);
- });
-
- test('can be properly constructed with no step', () => {
- expect(nullStepSlice.start).toStrictEqual(start);
- expect(nullStepSlice.end).toStrictEqual(end);
- expect(nullStepSlice.step).toStrictEqual(null);
- });
-});
diff --git a/test/custom-types/torch-size.test.js b/test/custom-types/torch-size.test.js
deleted file mode 100644
index f8b724dd..00000000
--- a/test/custom-types/torch-size.test.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { torchSizeShape, torchSize2 } from '../dummy/torch-size';
-
-describe('TorchSize', () => {
- test('can be properly constructed', () => {
- expect(torchSize2.size).toStrictEqual(torchSizeShape);
- });
-});
diff --git a/test/custom-types/torch-tensor.test.js b/test/custom-types/torch-tensor.test.js
deleted file mode 100644
index 07829425..00000000
--- a/test/custom-types/torch-tensor.test.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import {
- torchTensor,
- id,
- bin,
- chain,
- gradChain,
- tags,
- description
-} from '../dummy/torch-tensor';
-
-describe('TorchTensor', () => {
- test('can be properly constructed', () => {
- expect(torchTensor.id).toStrictEqual(id);
- expect(torchTensor.bin).toStrictEqual(bin);
- expect(torchTensor.chain).toStrictEqual(chain);
- expect(torchTensor.gradChain).toStrictEqual(gradChain);
- expect(torchTensor.tags).toStrictEqual(tags);
- expect(torchTensor.description).toStrictEqual(description);
- });
-});
diff --git a/test/dummy/native.js b/test/dummy/native.js
deleted file mode 100644
index cae5d0e0..00000000
--- a/test/dummy/native.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import Tuple from 'immutable-tuple';
-
-// Python Dictionary = Javascript Map()
-export const dict = new Map([[1, 'hello'], ['key2', 999]]);
-export const simplifiedDict = `(0, ((1, (5, (b'hello',))), ((5, (b'key2',)), 999)))`; // Generated from PySyft based on above
-
-// Python List = Javascript Array
-export const list = ['apple', 'cherry', 'banana'];
-export const simplifiedList = `(1, ((5, (b'apple',)), (5, (b'cherry',)), (5, (b'banana',))))`; // Generated from PySyft based on above
-
-// Python Set = Javascript Set()
-export const set = new Set(['apple', 'cherry', 'banana']);
-
-// NOTE: Sets are unordered in Python, so we had to rearrange the order in the simplifiedSet string below
-export const simplifiedSet = `(3, ((5, (b'apple',)), (5, (b'cherry',)), (5, (b'banana',))))`; // Generated from PySyft based on above
-
-// Python String = Javascript String
-export const string = 'hello';
-export const simplifiedString = `(5, (b'hello',))`; // Generated from PySyft based on above
-
-// Python Tuple = Javascript Tuple (via "immutable-tuple" package)
-export const tuple = Tuple('apple', 'cherry', 'banana');
-export const simplifiedTuple = `(6, ((5, (b'apple',)), (5, (b'cherry',)), (5, (b'banana',))))`; // Generated from PySyft based on above
diff --git a/test/dummy/plan.js b/test/dummy/plan.js
deleted file mode 100644
index ea9f5468..00000000
--- a/test/dummy/plan.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import Plan from '../../src/custom-types/plan';
-import Tuple from 'immutable-tuple';
-import { firstPointerTensor, secondPointerTensor } from './pointer-tensor';
-
-export const simplifiedPlan = `
-(18,
- (((6,
- (1,
- (6,
- ((6,
- ((5, (b'__add__',)),
- (19,
- (23885703668, 30300883787, 85156589176, None, (13, (2,)), False)),
- (6,
- ((19,
- (23885703668,
- 30300883787,
- 85156589176,
- None,
- (13, (2,)),
- False)),)),
- (0, ()))),
- (6, (53361601662,)))))),
- (6,
- (1,
- (6,
- ((6,
- ((5, (b'torch.abs',)),
- None,
- (6,
- ((19, (50671613206, 53361601662, 85156589176, None, None, True)),)),
- (0, ()))),
- (6, (68554228008,)))))),
- (6, (9, 53361601662))),
- 85156589176,
- (1, (30300883787,)),
- (6, (68554228008,)),
- (5, (b'plan_double_abs',)),
- None,
- None,
- True))
-`;
-
-export const operations = [
- Tuple(
- 1,
- Tuple(
- Tuple(
- '__add__',
- firstPointerTensor,
- Tuple(firstPointerTensor),
- new Map()
- ),
- Tuple(53361601662)
- )
- ),
- Tuple(
- 1,
- Tuple(
- Tuple('torch.abs', null, Tuple(secondPointerTensor), new Map()),
- Tuple(68554228008)
- )
- ),
- Tuple(9, 53361601662)
-];
-export const id = 85156589176;
-export const args = [30300883787];
-export const results = Tuple(68554228008);
-export const name = 'plan_double_abs';
-export const tags = null;
-export const description = null;
-export const isBuilt = true;
-
-export const detailedPlan = new Plan(
- operations,
- id,
- args,
- results,
- name,
- tags,
- description,
- isBuilt
-);
diff --git a/test/dummy/pointer-tensor.js b/test/dummy/pointer-tensor.js
deleted file mode 100644
index 7849d99b..00000000
--- a/test/dummy/pointer-tensor.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import PointerTensor from '../../src/custom-types/pointer-tensor';
-import { torchSize2, simplifiedTorchSize } from './torch-size';
-import { runReplacers, SIMPLIFY_REPLACERS } from '../../src/serde';
-
-export const id = 23885703668;
-export const idAtLocation = 30300883787;
-export const locationId = 85156589176;
-export const pointToAttr = null;
-export const shape = torchSize2;
-export const garbageCollectData = false;
-
-export const firstPointerTensor = new PointerTensor(
- id,
- idAtLocation,
- locationId,
- pointToAttr,
- shape,
- garbageCollectData
-);
-
-export const secondPointerTensor = new PointerTensor(
- 50671613206,
- 53361601662,
- 85156589176,
- null,
- null,
- true
-);
-
-export const simplifiedPointerTensor = runReplacers(
- `(19, (${id}, ${idAtLocation}, ${locationId}, ${pointToAttr}, ${simplifiedTorchSize}, ${garbageCollectData}))`,
- SIMPLIFY_REPLACERS
-);
diff --git a/test/dummy/range.js b/test/dummy/range.js
deleted file mode 100644
index e9fa980c..00000000
--- a/test/dummy/range.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import Range from '../../src/custom-types/range';
-
-export const start = 0;
-export const end = 10;
-export const step = 1;
-
-export const range = new Range(start, end, step);
-
-export const simplifiedRange = `(2, (${start}, ${end}, ${step}))`;
diff --git a/test/dummy/slice.js b/test/dummy/slice.js
deleted file mode 100644
index edf2379f..00000000
--- a/test/dummy/slice.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import Slice from '../../src/custom-types/slice';
-
-export const start = 0;
-export const end = 10;
-export const step = 1;
-
-export const slice = new Slice(start, end, step);
-export const nullStepSlice = new Slice(start, end);
-
-export const simplifiedSlice = `(4, (${start}, ${end}, ${step}))`;
diff --git a/test/dummy/torch-size.js b/test/dummy/torch-size.js
deleted file mode 100644
index 752886a7..00000000
--- a/test/dummy/torch-size.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import TorchSize from '../../src/custom-types/torch-size';
-import { runReplacers, SIMPLIFY_REPLACERS } from '../../src/serde';
-
-export const torchSizeShape = [2];
-export const torchSize2 = new TorchSize(torchSizeShape);
-
-export const simplifiedTorchSize = runReplacers(
- `(13, (${torchSizeShape}))`,
- SIMPLIFY_REPLACERS
-);
diff --git a/test/dummy/torch-tensor.js b/test/dummy/torch-tensor.js
deleted file mode 100644
index a7dbbe76..00000000
--- a/test/dummy/torch-tensor.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import TorchTensor from '../../src/custom-types/torch-tensor';
-import { runReplacers, SIMPLIFY_REPLACERS } from '../../src/serde';
-
-export const id = 86275536166;
-export const bin = 'something here';
-export const chain = null;
-export const gradChain = null;
-export const tags = null;
-export const description = null;
-
-export const torchTensor = new TorchTensor(
- id,
- bin,
- chain,
- gradChain,
- tags,
- description
-);
-
-export const simplifiedTorchTensor = runReplacers(
- `
-(12,
- (${id},
- (5,(b'${bin}')),
- ${chain},
- ${gradChain},
- ${tags},
- ${description}))
-`,
- SIMPLIFY_REPLACERS
-);
diff --git a/test/index.test.js b/test/index.test.js
index 35413763..42acd40a 100644
--- a/test/index.test.js
+++ b/test/index.test.js
@@ -1,209 +1,213 @@
-import regeneratorRuntime from 'regenerator-runtime';
-import { Server } from 'mock-socket';
-import Syft from '../src/index';
-import { TENSOR_REMOVED } from '../src/_constants';
+describe('Syft', () => {
+ test('can do something', () => {});
+});
-const fakeURL = 'ws://localhost:8080/';
+// import 'regenerator-runtime/runtime';
+// import { Server } from 'mock-socket';
+// import Syft from '../src/index';
+// import { TENSOR_REMOVED } from '../src/_constants';
-let syft = null;
-let mockServer = null;
+// const fakeURL = 'ws://localhost:8080/';
-describe('Syft', () => {
- beforeAll(done => {
- mockServer = new Server(fakeURL);
- syft = new Syft({ verbose: true });
+// let syft = null;
+// let mockServer = null;
- done();
- });
+// describe('Syft', () => {
+// beforeAll(done => {
+// mockServer = new Server(fakeURL);
+// syft = new Syft({ verbose: true });
- beforeEach(() => {
- syft.start(fakeURL);
- });
+// done();
+// });
- afterEach(() => {
- if (syft.socket) {
- syft.stop();
- }
- });
+// beforeEach(() => {
+// syft.start(fakeURL);
+// });
- /* ----- CONSTRUCTOR ----- */
+// afterEach(() => {
+// if (syft.socket) {
+// syft.stop();
+// }
+// });
- test('can constructor an instance', async () => {
- const newSyft = new Syft({
- url: fakeURL,
- verbose: true
- });
+// /* ----- CONSTRUCTOR ----- */
- expect(newSyft.tensors.length).toBe(0);
+// test('can constructor an instance', async () => {
+// const newSyft = new Syft({
+// url: fakeURL,
+// verbose: true
+// });
- expect(typeof newSyft.observer.subscribe).toBe('function');
- expect(typeof newSyft.observer.unsubscribe).toBe('function');
- expect(typeof newSyft.observer.broadcast).toBe('function');
+// expect(newSyft.tensors.length).toBe(0);
- expect(typeof newSyft.logger.log).toBe('function');
- expect(newSyft.logger.verbose).toBe(true);
+// expect(typeof newSyft.observer.subscribe).toBe('function');
+// expect(typeof newSyft.observer.unsubscribe).toBe('function');
+// expect(typeof newSyft.observer.broadcast).toBe('function');
- expect(newSyft.socket.url).toBe(fakeURL);
- });
+// expect(typeof newSyft.logger.log).toBe('function');
+// expect(newSyft.logger.verbose).toBe(true);
- /* ----- HELPERS ----- */
+// expect(newSyft.socket.url).toBe(fakeURL);
+// });
- // genTensors()
- test('can get a list of tensors', async () => {
- expect(syft.getTensors().length).toBe(0);
+// /* ----- HELPERS ----- */
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- expect(syft.getTensors().length).toBe(1);
- });
+// // genTensors()
+// test('can get a list of tensors', async () => {
+// expect(syft.getTensors().length).toBe(0);
- // getTensorById()
- test('can get a tensor by id', async () => {
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// expect(syft.getTensors().length).toBe(1);
+// });
- const tensor = syft.getTensorById('first-tensor');
+// // getTensorById()
+// test('can get a tensor by id', async () => {
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- expect(tensor.id).toBe('first-tensor');
- });
+// const tensor = syft.getTensorById('first-tensor');
- // getTensorIndex()
- test('can the index of a tensor', async () => {
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- await syft.addTensor('second-tensor', [[1, 2], [3, 4]]);
- await syft.addTensor('third-tensor', [[1, 2], [3, 4]]);
+// expect(tensor.id).toBe('first-tensor');
+// });
- const index = syft.getTensorIndex('second-tensor');
+// // getTensorIndex()
+// test('can the index of a tensor', async () => {
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// await syft.addTensor('second-tensor', [[1, 2], [3, 4]]);
+// await syft.addTensor('third-tensor', [[1, 2], [3, 4]]);
- expect(index).toBe(1);
- });
+// const index = syft.getTensorIndex('second-tensor');
- /* ----- FUNCTIONALITY ----- */
+// expect(index).toBe(1);
+// });
- // addTensor()
- test('can add a tensor to the list', async () => {
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]).then(tensors => {
- expect(tensors.length).toBe(1);
- expect(tensors[0].id).toBe('first-tensor');
- });
- });
+// /* ----- FUNCTIONALITY ----- */
- // removeTensor()
- test('can remove a tensor from the list', async () => {
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// // addTensor()
+// test('can add a tensor to the list', async () => {
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]).then(tensors => {
+// expect(tensors.length).toBe(1);
+// expect(tensors[0].id).toBe('first-tensor');
+// });
+// });
- await syft.removeTensor('first-tensor').then(tensors => {
- expect(tensors.length).toBe(0);
- });
- });
+// // removeTensor()
+// test('can remove a tensor from the list', async () => {
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- // runOperation()
- test('can perform a TensorFlow operation', async () => {
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- await syft.addTensor('second-tensor', [[5, 6], [7, 8]]);
+// await syft.removeTensor('first-tensor').then(tensors => {
+// expect(tensors.length).toBe(0);
+// });
+// });
- await syft
- .runOperation('add', ['first-tensor', 'second-tensor'])
- .then(result => {
- const resultData = result.dataSync();
+// // runOperation()
+// test('can perform a TensorFlow operation', async () => {
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// await syft.addTensor('second-tensor', [[5, 6], [7, 8]]);
- expect(resultData).toContain(6);
- expect(resultData).toContain(8);
- expect(resultData).toContain(10);
- expect(resultData).toContain(12);
+// await syft
+// .runOperation('add', ['first-tensor', 'second-tensor'])
+// .then(result => {
+// const resultData = result.dataSync();
- expect(resultData).not.toContain(1);
- expect(resultData).not.toContain(2);
- expect(resultData).not.toContain(3);
- expect(resultData).not.toContain(4);
- });
- });
+// expect(resultData).toContain(6);
+// expect(resultData).toContain(8);
+// expect(resultData).toContain(10);
+// expect(resultData).toContain(12);
- /* ----- EVENT HANDLERS ----- */
+// expect(resultData).not.toContain(1);
+// expect(resultData).not.toContain(2);
+// expect(resultData).not.toContain(3);
+// expect(resultData).not.toContain(4);
+// });
+// });
- test('can subscribe and unsubscribe from an event', async () => {
- syft.onTensorRemoved(({ id, tensors }) => ({ id, tensors }));
+// /* ----- EVENT HANDLERS ----- */
- expect(syft.observer.observers.length).toBe(1);
+// test('can subscribe and unsubscribe from an event', async () => {
+// syft.onTensorRemoved(({ id, tensors }) => ({ id, tensors }));
- syft.observer.unsubscribe(TENSOR_REMOVED);
+// expect(syft.observer.observers.length).toBe(1);
- expect(syft.observer.observers.length).toBe(0);
- });
+// syft.observer.unsubscribe(TENSOR_REMOVED);
- // onMessageReceived()
- // TODO
+// expect(syft.observer.observers.length).toBe(0);
+// });
- // onMessageSent()
- // TODO
+// // onMessageReceived()
+// // TODO
- // onRunOperation()
- test('can subscribe to a TensorFlow operation being performed', async () => {
- syft.onRunOperation(({ func, result }) => {
- expect(func).toBe('add');
+// // onMessageSent()
+// // TODO
- const resultData = result.dataSync();
+// // onRunOperation()
+// test('can subscribe to a TensorFlow operation being performed', async () => {
+// syft.onRunOperation(({ func, result }) => {
+// expect(func).toBe('add');
- expect(resultData).toContain(6);
- expect(resultData).toContain(8);
- expect(resultData).toContain(10);
- expect(resultData).toContain(12);
+// const resultData = result.dataSync();
- expect(resultData).not.toContain(1);
- expect(resultData).not.toContain(2);
- expect(resultData).not.toContain(3);
- expect(resultData).not.toContain(4);
- });
+// expect(resultData).toContain(6);
+// expect(resultData).toContain(8);
+// expect(resultData).toContain(10);
+// expect(resultData).toContain(12);
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- await syft.addTensor('second-tensor', [[5, 6], [7, 8]]);
- await syft.runOperation('add', ['first-tensor', 'second-tensor']);
- });
+// expect(resultData).not.toContain(1);
+// expect(resultData).not.toContain(2);
+// expect(resultData).not.toContain(3);
+// expect(resultData).not.toContain(4);
+// });
- // onTensorAdded()
- test('can subscribe to a tensor being added', async () => {
- syft.onTensorAdded(({ id, tensor, tensors }) => {
- expect(id).toBe('first-tensor');
- expect(tensor.size).toBe(4);
- expect(tensors.length).toBe(1);
- });
-
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- });
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// await syft.addTensor('second-tensor', [[5, 6], [7, 8]]);
+// await syft.runOperation('add', ['first-tensor', 'second-tensor']);
+// });
- // onTensorRemoved()
- test('can subscribe to a tensor being removed', async () => {
- syft.onTensorRemoved(({ id, tensors }) => {
- expect(id).toBe('first-tensor');
- expect(tensors.length).toBe(0);
- });
+// // onTensorAdded()
+// test('can subscribe to a tensor being added', async () => {
+// syft.onTensorAdded(({ id, tensor, tensors }) => {
+// expect(id).toBe('first-tensor');
+// expect(tensor.size).toBe(4);
+// expect(tensors.length).toBe(1);
+// });
+
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// });
- await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
- await syft.removeTensor('first-tensor');
- });
-
- /* ----- SOCKET COMMUNICATION ----- */
-
- // createSocketConnection()
- test('can create a socket connection', async () => {
- expect(syft.createSocketConnection()).toBe(null);
- expect(syft.createSocketConnection(fakeURL).url).toBe(fakeURL);
- });
+// // onTensorRemoved()
+// test('can subscribe to a tensor being removed', async () => {
+// syft.onTensorRemoved(({ id, tensors }) => {
+// expect(id).toBe('first-tensor');
+// expect(tensors.length).toBe(0);
+// });
+
+// await syft.addTensor('first-tensor', [[1, 2], [3, 4]]);
+// await syft.removeTensor('first-tensor');
+// });
+
+// /* ----- SOCKET COMMUNICATION ----- */
+
+// // createSocketConnection()
+// test('can create a socket connection', async () => {
+// expect(syft.createSocketConnection()).toBe(null);
+// expect(syft.createSocketConnection(fakeURL).url).toBe(fakeURL);
+// });
+
+// // sendMessage()
+// // TODO
+
+// // start()
+// test('can start', async () => {
+// const newSyft = new Syft();
- // sendMessage()
- // TODO
-
- // start()
- test('can start', async () => {
- const newSyft = new Syft();
+// newSyft.start(fakeURL);
- newSyft.start(fakeURL);
+// expect(newSyft.socket.url).toBe(fakeURL);
+// });
- expect(newSyft.socket.url).toBe(fakeURL);
- });
+// // stop()
+// test('can stop', async () => {
+// syft.stop();
- // stop()
- test('can stop', async () => {
- syft.stop();
-
- expect(syft.socket).toBe(null);
- });
-});
+// expect(syft.socket).toBe(null);
+// });
+// });
diff --git a/test/serde.test.js b/test/serde.test.js
deleted file mode 100644
index e1efd73f..00000000
--- a/test/serde.test.js
+++ /dev/null
@@ -1,195 +0,0 @@
-import { simplify, detail } from '../src/serde';
-import {
- simplifiedDict,
- dict,
- simplifiedList,
- list,
- simplifiedSet,
- set,
- simplifiedString,
- string,
- simplifiedTuple,
- tuple
-} from './dummy/native';
-import { simplifiedRange, range } from './dummy/range';
-import { simplifiedSlice, slice } from './dummy/slice';
-import { simplifiedTorchTensor, torchTensor } from './dummy/torch-tensor';
-import { simplifiedTorchSize, torchSize2 } from './dummy/torch-size';
-import { simplifiedPlan, detailedPlan } from './dummy/plan';
-import {
- simplifiedPointerTensor,
- firstPointerTensor
-} from './dummy/pointer-tensor';
-
-// NOTE: There's a few things we need to get PySyft and syft.js on equal footing.
-// Msgpack in Python appears to add extraneous commas to the end of a lot of different Python objects, we should remove these from tests since they aren't syntactically significant
-// Likewise, let's trim all white space so that we can ensure there are no issues related to indention or spacing
-const EQUALIZERS = [
- [/\s/g, ''], // Remove all extra spaces
- [/,\)/g, ')'] // Remove all extra commas
-];
-
-const runEqualizers = data => {
- for (let i = 0; i < EQUALIZERS.length; i++) {
- data = data.replace(...EQUALIZERS[i]);
- }
-
- return data;
-};
-
-describe('Serde', () => {
- test('can simplify a Dict', () => {
- const equalizedPresetDict = runEqualizers(simplifiedDict);
- const equalizedSimplifiedDict = runEqualizers(simplify(dict));
-
- expect(equalizedPresetDict).toBe(equalizedSimplifiedDict);
- });
-
- test('can detail a Dict', () => {
- const computedDetailedDict = detail(simplifiedDict);
-
- expect(dict).toStrictEqual(computedDetailedDict);
- });
-
- test('can simplify a List', () => {
- const equalizedPresetList = runEqualizers(simplifiedList);
- const equalizedSimplifiedList = runEqualizers(simplify(list));
-
- expect(equalizedPresetList).toBe(equalizedSimplifiedList);
- });
-
- test('can detail a List', () => {
- const computedDetailedList = detail(simplifiedList);
-
- expect(list).toStrictEqual(computedDetailedList);
- });
-
- test('can simplify a Range', () => {
- const equalizedPresetRange = runEqualizers(simplifiedRange);
- const equalizedSimplifiedRange = runEqualizers(simplify(range));
-
- expect(equalizedPresetRange).toBe(equalizedSimplifiedRange);
- });
-
- test('can detail a Range', () => {
- const computedDetailedRange = detail(simplifiedRange);
-
- expect(range).toStrictEqual(computedDetailedRange);
- });
-
- test('can simplify a Set', () => {
- const equalizedPresetSet = runEqualizers(simplifiedSet);
- const equalizedSimplifiedSet = runEqualizers(simplify(set));
-
- expect(equalizedPresetSet).toBe(equalizedSimplifiedSet);
- });
-
- test('can detail a Set', () => {
- const computedDetailedSet = detail(simplifiedSet);
-
- expect(set).toStrictEqual(computedDetailedSet);
- });
-
- test('can simplify a Slice', () => {
- const equalizedPresetSlice = runEqualizers(simplifiedSlice);
- const equalizedSimplifiedSlice = runEqualizers(simplify(slice));
-
- expect(equalizedPresetSlice).toBe(equalizedSimplifiedSlice);
- });
-
- test('can detail a Slice', () => {
- const computedDetailedSlice = detail(simplifiedSlice);
-
- expect(slice).toStrictEqual(computedDetailedSlice);
- });
-
- test('can simplify a String', () => {
- const equalizedPresetString = runEqualizers(simplifiedString);
- const equalizedSimplifiedString = runEqualizers(simplify(string));
-
- expect(equalizedPresetString).toBe(equalizedSimplifiedString);
- });
-
- test('can detail a String', () => {
- const computedDetailedString = detail(simplifiedString);
-
- expect(string).toStrictEqual(computedDetailedString);
- });
-
- test('can simplify a Tuple', () => {
- const equalizedPresetTuple = runEqualizers(simplifiedTuple);
- const equalizedSimplifiedTuple = runEqualizers(simplify(tuple));
-
- expect(equalizedPresetTuple).toBe(equalizedSimplifiedTuple);
- });
-
- test('can detail a Tuple', () => {
- const computedDetailedTuple = detail(simplifiedTuple);
-
- expect(tuple).toStrictEqual(computedDetailedTuple);
- });
-
- test('can simplify a TorchTensor', () => {
- const equalizedPresetTorchTensor = runEqualizers(simplifiedTorchTensor);
- const equalizedSimplifiedTorchTensor = runEqualizers(simplify(torchTensor));
-
- expect(equalizedPresetTorchTensor).toBe(equalizedSimplifiedTorchTensor);
- });
-
- test('can detail a TorchTensor', () => {
- const computedDetailedTorchTensor = detail(simplifiedTorchTensor);
-
- expect(torchTensor).toStrictEqual(computedDetailedTorchTensor);
- });
-
- test('can simplify a TorchSize', () => {
- const equalizedPresetTorchSize = runEqualizers(simplifiedTorchSize);
- const equalizedSimplifiedTorchSize = runEqualizers(simplify(torchSize2));
-
- expect(equalizedPresetTorchSize).toBe(equalizedSimplifiedTorchSize);
- });
-
- test('can detail a TorchSize', () => {
- const computedDetailedTorchSize = detail(simplifiedTorchSize);
-
- expect(torchSize2).toStrictEqual(computedDetailedTorchSize);
- });
-
- test('can simplify a Plan', () => {
- const equalizedPresetPlan = runEqualizers(simplifiedPlan);
- const equalizedSimplifiedPlan = runEqualizers(simplify(detailedPlan));
-
- expect(equalizedPresetPlan).toBe(equalizedSimplifiedPlan);
- });
-
- test('can detail a Plan', () => {
- const computedDetailedPlan = detail(simplifiedPlan);
-
- expect(detailedPlan).toStrictEqual(computedDetailedPlan);
- });
-
- test('can simplify a PointerTensor', () => {
- const equalizedPresetPointerTensor = runEqualizers(simplifiedPointerTensor);
- const equalizedSimplifiedPointerTensor = runEqualizers(
- simplify(firstPointerTensor)
- );
-
- expect(equalizedPresetPointerTensor).toBe(equalizedSimplifiedPointerTensor);
- });
-
- test('can detail a PointerTensor', () => {
- const computedDetailedPointerTensor = detail(simplifiedPointerTensor);
-
- expect(firstPointerTensor).toStrictEqual(computedDetailedPointerTensor);
- });
-
- // NOTE: We don't need to test if a simplifier is not found because it will never happen
-
- test('will throw an error if no detailer is found', () => {
- const unknownSimplifiedItem = "(999, (b'hello'))";
-
- expect(() => {
- detail(unknownSimplifiedItem);
- }).toThrow();
- });
-});
diff --git a/test/sockets.test.js b/test/sockets.test.js
new file mode 100644
index 00000000..12e87774
--- /dev/null
+++ b/test/sockets.test.js
@@ -0,0 +1,194 @@
+import 'regenerator-runtime/runtime';
+
+import { Logger, SOCKET_PING } from 'syft-helpers.js';
+import { WebSocket, Server } from 'mock-socket';
+
+import Socket from '../src/sockets';
+
+global.WebSocket = WebSocket;
+
+const url = 'ws://localhost:8080/';
+
+// Create a promise that is resolved when the event is triggered.
+const makeEventPromise = (emitter, event) => {
+ let resolver;
+
+ const promise = new Promise(resolve => (resolver = resolve));
+ emitter.on(event, data => resolver(data));
+
+ return promise;
+};
+
+describe('Sockets', () => {
+ const logger = new Logger('syft.js', true);
+
+ let mockServer;
+
+ beforeEach(() => {
+ mockServer = new Server(url);
+ mockServer.connected = makeEventPromise(mockServer, 'connection');
+ });
+
+ afterEach(() => {
+ mockServer.close();
+ });
+
+ test('sends keep-alive messages automatically', async () => {
+ const keepAliveTimeout = 300,
+ expectedMessagesCount = 3,
+ messages = [],
+ expectedTypes = [];
+
+ // Creating a socket will open connection and start keep-alive pings.
+ new Socket({ url, logger, keepAliveTimeout });
+
+ const serverSocket = await mockServer.connected;
+
+ serverSocket.on('message', message => messages.push(JSON.parse(message)));
+
+ await new Promise(done =>
+ setTimeout(
+ done,
+ keepAliveTimeout * expectedMessagesCount + keepAliveTimeout / 2
+ )
+ );
+
+ // One keep-alive message is sent right after connection, hence +1.
+ expect(messages).toHaveLength(expectedMessagesCount + 1);
+
+ for (let i = 0; i < expectedMessagesCount + 1; i++) {
+ expectedTypes.push(SOCKET_PING);
+ }
+
+ expect(messages.map(message => message['type'])).toEqual(expectedTypes);
+ });
+
+ test('triggers onOpen event', async () => {
+ const onOpen = jest.fn();
+
+ new Socket({ url, logger, onOpen });
+
+ await mockServer.connected;
+
+ expect(onOpen).toHaveBeenCalledTimes(1);
+ });
+
+ test('triggers onClose event', async () => {
+ const closed = makeEventPromise(mockServer, 'close'),
+ onClose = jest.fn(),
+ mySocket = new Socket({
+ url,
+ logger,
+ onClose
+ });
+
+ await mockServer.connected;
+
+ mySocket.stop();
+
+ await closed;
+
+ expect(onClose).toHaveBeenCalledTimes(1);
+ expect(mySocket.timerId).toBeNull();
+ });
+
+ test('sends data correctly', async () => {
+ const testReqType = 'test',
+ testReqData = { blob: 1 },
+ testResponse = { response: 'test' },
+ testInstanceId = 'test-instance',
+ mySocket = new Socket({
+ instanceId: testInstanceId,
+ url,
+ logger,
+ onMessage: data => data
+ });
+
+ const serverSocket = await mockServer.connected;
+
+ // Skip first keep-alive message.
+ await makeEventPromise(serverSocket, 'message');
+
+ const responsePromise = mySocket.send(testReqType, testReqData);
+ const message = await makeEventPromise(serverSocket, 'message');
+
+ serverSocket.send(JSON.stringify(testResponse));
+
+ const response = await responsePromise;
+
+ expect(JSON.parse(message)).toEqual({
+ type: testReqType,
+ data: testReqData
+ });
+ expect(response).toEqual(testResponse);
+ });
+
+ test('returns error when .send() fails', async () => {
+ const mySocket = new Socket({
+ url,
+ logger,
+ onMessage: data => data
+ });
+
+ const serverSocket = await mockServer.connected;
+
+ // Skip first keep-alive message.
+ await makeEventPromise(serverSocket, 'message');
+
+ const responsePromise = mySocket.send('test', {});
+
+ mockServer.simulate('error');
+
+ expect.assertions(1);
+
+ try {
+ await responsePromise;
+ } catch (e) {
+ expect(e).toBeDefined();
+ }
+ });
+
+ test('disconnects from server after .stop()', async () => {
+ const mySocket = new Socket({
+ url,
+ logger
+ });
+
+ await mockServer.connected;
+
+ expect(mockServer.clients()).toHaveLength(1);
+
+ mySocket.stop();
+
+ await new Promise(done => setTimeout(done, 100));
+
+ expect(mockServer.clients()).toHaveLength(0);
+ });
+
+ test('triggers onMessage event', async () => {
+ const testResponse = { response: 'test' },
+ testInstanceId = 'test-instance',
+ onMessage = jest.fn(message => message),
+ mySocket = new Socket({
+ instanceId: testInstanceId,
+ url,
+ logger,
+ onMessage: onMessage
+ });
+
+ const serverSocket = await mockServer.connected;
+
+ // Skip first keep-alive message.
+ await makeEventPromise(serverSocket, 'message');
+
+ serverSocket.on('message', () => {
+ serverSocket.send(JSON.stringify(testResponse));
+ });
+
+ await mySocket.send('test1', {});
+ await mySocket.send('test2', {});
+
+ expect(onMessage).toHaveBeenCalledTimes(2);
+ expect(onMessage).toHaveBeenLastCalledWith(testResponse);
+ });
+});
diff --git a/test/webrtc.test.js b/test/webrtc.test.js
new file mode 100644
index 00000000..60078f01
--- /dev/null
+++ b/test/webrtc.test.js
@@ -0,0 +1,404 @@
+import 'regenerator-runtime/runtime';
+
+import {
+ WEBRTC_PEER_CONFIG,
+ WEBRTC_PEER_OPTIONS,
+ WEBRTC_JOIN_ROOM,
+ WEBRTC_INTERNAL_MESSAGE,
+ WEBRTC_PEER_LEFT,
+ Logger
+} from 'syft-helpers.js';
+import WebRTCClient from '../src/webrtc';
+
+// WebRTC mocks.
+import {
+ RTCPeerConnection,
+ RTCSessionDescription,
+ RTCIceCandidate
+} from './_webrtc-mocks';
+global.RTCPeerConnection = RTCPeerConnection;
+global.RTCSessionDescription = RTCSessionDescription;
+global.RTCIceCandidate = RTCIceCandidate;
+
+// Socket mock.
+class SocketMock {
+ send(type, data) {}
+}
+
+describe('WebRTC', () => {
+ const logger = new Logger('syft.js', true),
+ logSpy = jest.spyOn(logger, 'log'),
+ socketMock = new SocketMock();
+ let rtc, socketSendMock;
+
+ beforeEach(() => {
+ rtc = new WebRTCClient({
+ peerConfig: WEBRTC_PEER_CONFIG,
+ peerOptions: WEBRTC_PEER_OPTIONS,
+ logger,
+ socket: socketMock
+ });
+ socketSendMock = jest.spyOn(socketMock, 'send');
+ });
+
+ afterEach(() => {
+ jest.clearAllMocks();
+ });
+
+ test('start() sends message to join the scope', () => {
+ rtc.start('joinTestId', 'joinTestScope');
+ expect(socketSendMock).toBeCalledTimes(1);
+ expect(socketSendMock).lastCalledWith(WEBRTC_JOIN_ROOM, {
+ instanceId: 'joinTestId',
+ scopeId: 'joinTestScope'
+ });
+ });
+
+ test('receiveNewPeer() should initiate new rtc data channel', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peerInstanceId = 'peerInstanceId',
+ pcOnIceCandidateMock = jest.spyOn(
+ RTCPeerConnection.prototype,
+ 'onicecandidate',
+ 'set'
+ );
+
+ rtc.start(instanceId, scopeId);
+ rtc.receiveNewPeer({ instanceId: peerInstanceId });
+ await new Promise(done => setImmediate(done));
+
+ expect(rtc.peers).toHaveProperty(peerInstanceId);
+ expect(rtc.peers[peerInstanceId]).toHaveProperty('connection');
+ expect(rtc.peers[peerInstanceId]['connection']).toBeInstanceOf(
+ RTCPeerConnection
+ );
+ expect(rtc.peers[peerInstanceId]).toHaveProperty('channel');
+
+ // Check channel events are set.
+ const channel = rtc.peers[peerInstanceId]['channel'];
+ expect(channel.onopen).toBeInstanceOf(Function);
+ expect(channel.onclose).toBeInstanceOf(Function);
+ expect(channel.onmessage).toBeInstanceOf(Function);
+ expect(channel.onerror).toBeInstanceOf(Function);
+
+ // Check events are logged.
+ logSpy.mockReset();
+ channel.onopen('onopen');
+ channel.onclose('onclose');
+ channel.onmessage('onmessage');
+ channel.onerror('onerror');
+ expect(logSpy).toHaveBeenCalledTimes(4);
+ expect(logSpy.mock.calls[0][1]).toBe('onopen');
+ expect(logSpy.mock.calls[1][1]).toBe('onclose');
+ expect(logSpy.mock.calls[2][1]).toBe('onmessage');
+ expect(logSpy.mock.calls[3][1]).toBe('onerror');
+
+ const pc = rtc.peers[peerInstanceId]['connection'];
+ expect(pc.options).toStrictEqual(WEBRTC_PEER_CONFIG);
+ expect(pc.optional).toStrictEqual(WEBRTC_PEER_OPTIONS);
+
+ expect(pcOnIceCandidateMock).toHaveBeenCalledTimes(1);
+ const onIceCandidate = pc.onicecandidate;
+ expect(onIceCandidate).toBeInstanceOf(Function);
+
+ // Emulate onicecandidate event.
+ onIceCandidate.call(rtc.peers[peerInstanceId].connection, {
+ candidate: 'test-candidate1'
+ });
+ onIceCandidate.call(rtc.peers[peerInstanceId].connection, {
+ candidate: 'test-candidate2'
+ });
+ onIceCandidate.call(rtc.peers[peerInstanceId].connection, {});
+
+ expect(socketSendMock).toHaveBeenCalledTimes(4);
+ expect(socketSendMock).nthCalledWith(2, WEBRTC_INTERNAL_MESSAGE, {
+ instanceId,
+ scopeId,
+ to: peerInstanceId,
+ type: 'offer',
+ data: { type: 'offer', sdp: 'testOfferSdp' }
+ });
+ expect(socketSendMock).nthCalledWith(3, WEBRTC_INTERNAL_MESSAGE, {
+ instanceId,
+ scopeId,
+ to: peerInstanceId,
+ type: 'candidate',
+ data: 'test-candidate1'
+ });
+ expect(socketSendMock).nthCalledWith(4, WEBRTC_INTERNAL_MESSAGE, {
+ instanceId,
+ scopeId,
+ to: peerInstanceId,
+ type: 'candidate',
+ data: 'test-candidate2'
+ });
+ });
+
+ test('should handle "offer" internal message', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peerInstanceId = 'peerInstanceId',
+ pcOnDataChannelMock = jest.spyOn(
+ RTCPeerConnection.prototype,
+ 'ondatachannel',
+ 'set'
+ );
+
+ rtc.start(instanceId, scopeId);
+ rtc.receiveInternalMessage({
+ instanceId: peerInstanceId,
+ scopeId,
+ to: instanceId,
+ type: 'offer',
+ data: { type: 'offer', sdp: 'testOfferSdp' }
+ });
+
+ await new Promise(done => setImmediate(done));
+
+ expect(rtc.peers).toHaveProperty(peerInstanceId);
+ expect(rtc.peers[peerInstanceId]).toHaveProperty('connection');
+ expect(rtc.peers[peerInstanceId]['connection']).toBeInstanceOf(
+ RTCPeerConnection
+ );
+
+ const pc = rtc.peers[peerInstanceId]['connection'];
+ expect(pc.localDescription).toStrictEqual({
+ type: 'answer',
+ sdp: 'testAnswerSdp'
+ });
+ expect(pc.remoteDescription).toStrictEqual(
+ new RTCSessionDescription({ type: 'offer', sdp: 'testOfferSdp' })
+ );
+
+ expect(pcOnDataChannelMock).toHaveBeenCalledTimes(1);
+ const onDataChannel = pc.ondatachannel;
+ expect(onDataChannel).toBeInstanceOf(Function);
+ // Simulate ondatachannel.
+ onDataChannel.call(pc, { channel: { dummy: 1 } });
+
+ expect(rtc.peers[peerInstanceId]).toHaveProperty('channel');
+ });
+
+ test('should handle "answer" internal message', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peerInstanceId = 'peerInstanceId',
+ pc = new RTCPeerConnection();
+
+ rtc.start(instanceId, scopeId);
+ rtc.peers[peerInstanceId] = {
+ connection: pc
+ };
+ rtc.receiveInternalMessage({
+ instanceId: peerInstanceId,
+ scopeId,
+ to: instanceId,
+ type: 'answer',
+ data: { type: 'answer', sdp: 'testAnswerSdp' }
+ });
+
+ await new Promise(done => setImmediate(done));
+
+ expect(pc.remoteDescription).toStrictEqual(
+ new RTCSessionDescription({ type: 'answer', sdp: 'testAnswerSdp' })
+ );
+ });
+
+ test('should handle "candidate" internal message', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peer1InstanceId = 'peer1InstanceId',
+ peer2InstanceId = 'peer2InstanceId',
+ pc = new RTCPeerConnection();
+
+ rtc.start(instanceId, scopeId);
+
+ // Connection already exists.
+ rtc.peers[peer1InstanceId] = {
+ connection: pc
+ };
+ rtc.receiveInternalMessage({
+ instanceId: peer1InstanceId,
+ scopeId,
+ to: instanceId,
+ type: 'candidate',
+ data: { dummy: 1 }
+ });
+
+ await new Promise(done => setImmediate(done));
+
+ expect(pc.iceCandidates).toHaveLength(1);
+ expect(pc.iceCandidates[0]).toStrictEqual(
+ new RTCIceCandidate({ dummy: 1 })
+ );
+
+ // Connection doesn't exists and must be created.
+ rtc.receiveInternalMessage({
+ instanceId: peer2InstanceId,
+ scopeId,
+ to: instanceId,
+ type: 'candidate',
+ data: { dummy: 2 }
+ });
+
+ await new Promise(done => setImmediate(done));
+
+ expect(rtc.peers).toHaveProperty(peer2InstanceId);
+ expect(rtc.peers[peer2InstanceId]).toHaveProperty('connection');
+ expect(rtc.peers[peer2InstanceId]['connection']).toBeInstanceOf(
+ RTCPeerConnection
+ );
+
+ const pc2 = rtc.peers[peer2InstanceId]['connection'];
+ expect(pc2.iceCandidates).toHaveLength(1);
+ expect(pc2.iceCandidates[0]).toStrictEqual(
+ new RTCIceCandidate({ dummy: 2 })
+ );
+ });
+
+ test('sendMessage() should send messages to peers', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peer1InstanceId = 'peer1InstanceId',
+ peer2InstanceId = 'peer2InstanceId',
+ channelSendMock = jest.fn(),
+ channel1 = {
+ send: data => {
+ channelSendMock(1, data);
+ }
+ },
+ channel2 = {
+ send: data => {
+ channelSendMock(2, data);
+ }
+ },
+ channelWithError = {
+ send: () => {
+ throw new Error();
+ }
+ };
+
+ rtc.start(instanceId, scopeId);
+ rtc.peers = {};
+ rtc.peers[peer1InstanceId] = { channel: channel1 };
+ rtc.peers[peer2InstanceId] = { channel: channel2 };
+
+ // Broadcast.
+ rtc.sendMessage({ dummy: 'hello' });
+
+ expect(channelSendMock).toHaveBeenCalledTimes(2);
+ expect(channelSendMock).toHaveBeenNthCalledWith(1, 1, { dummy: 'hello' });
+ expect(channelSendMock).toHaveBeenNthCalledWith(2, 2, { dummy: 'hello' });
+
+ // Single peer.
+ rtc.sendMessage({ dummy: 'hello there' }, peer1InstanceId);
+ expect(channelSendMock).toHaveBeenCalledTimes(3);
+ expect(channelSendMock).toHaveBeenNthCalledWith(3, 1, {
+ dummy: 'hello there'
+ });
+
+ // Error handling.
+ rtc.peers[peer1InstanceId] = { channel: channelWithError };
+ expect(() => {
+ rtc.sendMessage({ dummy: 'hello error' });
+ }).not.toThrow();
+
+ expect(channelSendMock).toHaveBeenCalledTimes(4);
+ expect(channelSendMock).toHaveBeenNthCalledWith(4, 2, {
+ dummy: 'hello error'
+ });
+ });
+
+ test('removePeer() should close channel', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peer1InstanceId = 'peer1InstanceId',
+ peer2InstanceId = 'peer2InstanceId',
+ channelCloseMock = jest.fn(),
+ channel1 = {
+ close: () => {
+ channelCloseMock(1);
+ }
+ },
+ channel2 = {
+ close: () => {
+ channelCloseMock(2);
+ }
+ },
+ channelWithError = {
+ send: () => {
+ throw new Error();
+ }
+ };
+
+ rtc.start(instanceId, scopeId);
+ rtc.peers = {};
+ rtc.peers[peer1InstanceId] = { channel: channel1 };
+ rtc.peers[peer2InstanceId] = { channel: channel2 };
+
+ rtc.removePeer(peer1InstanceId);
+
+ expect(channelCloseMock).toHaveBeenCalledTimes(1);
+ expect(channelCloseMock).toHaveBeenNthCalledWith(1, 1);
+ expect(rtc.peers).not.toHaveProperty(peer1InstanceId);
+ expect(rtc.peers).toHaveProperty(peer2InstanceId);
+
+ // Non-existing peer.
+ rtc.removePeer('invalid');
+ expect(channelCloseMock).toHaveBeenCalledTimes(1);
+ expect(rtc.peers).toHaveProperty(peer2InstanceId);
+
+ // Error handling.
+ rtc.peers[peer1InstanceId] = { channel: channelWithError };
+ expect(() => {
+ rtc.removePeer(peer1InstanceId);
+ }).not.toThrow();
+
+ expect(rtc.peers).not.toHaveProperty(peer1InstanceId);
+ });
+
+ test('stop() should close all channels and send peer left message', async () => {
+ const instanceId = 'testId',
+ scopeId = 'testScopeId',
+ peer1InstanceId = 'peer1InstanceId',
+ peer2InstanceId = 'peer2InstanceId',
+ channelCloseMock = jest.fn(),
+ channel1 = {
+ close: () => {
+ channelCloseMock(1);
+ }
+ },
+ channel2 = {
+ close: () => {
+ channelCloseMock(2);
+ }
+ };
+
+ rtc.start(instanceId, scopeId);
+ rtc.peers = {};
+ rtc.peers[peer1InstanceId] = { channel: channel1 };
+ rtc.peers[peer2InstanceId] = { channel: channel2 };
+
+ rtc.stop();
+
+ expect(channelCloseMock).toHaveBeenCalledTimes(2);
+ expect(rtc.peers).not.toHaveProperty(peer1InstanceId);
+ expect(rtc.peers).not.toHaveProperty(peer2InstanceId);
+
+ expect(socketSendMock).toBeCalledTimes(2);
+ expect(socketSendMock).lastCalledWith(WEBRTC_PEER_LEFT, {
+ instanceId,
+ scopeId
+ });
+ });
+
+ test('error handler logs message', async () => {
+ logSpy.mockReset();
+ const error = new Error('dummy');
+ rtc._handleError('test error message')(error);
+ expect(logSpy).toHaveBeenCalledTimes(1);
+ expect(logSpy.mock.calls[0][0]).toBe('test error message');
+ expect(logSpy.mock.calls[0][1]).toStrictEqual(error);
+ });
+});