diff --git a/README.md b/README.md
index 8022c90..d6f52a0 100644
--- a/README.md
+++ b/README.md
@@ -96,6 +96,16 @@ const myDeviceListQuery = new DeviceListQuery({
networkId: 1
});
+// Push message handler
+myDeviceHive.on(DeviceHive.MESSAGE_EVENT, (message) => {
+ console.log(message);
+});
+
+// Error handler
+myDeviceHive.on(DeviceHive.ERROR_EVENT, (error) => {
+ console.error(error);
+});
+
// Connecting and usin API
myDeviceHive.connect()
.then(() => myDeviceHive.device.list(myDeviceListQuery))
@@ -145,9 +155,19 @@ DeviceHive module
-### deviceHive.connect()
+### deviceHive.connect({ accessToken, refreshToken, login, password, reconnectionAttempts, reconnectionInterval })
Connect and authorize
+Params:
+| Param | Type | Description |
+| --- | --- | --- |
+| options.accessToken | string
| Access token (default DeviceHive constructor configuration) (optional) |
+| options.refreshToken | string
| Refresh token (default DeviceHive constructor configuration) (optional) |
+| options.login | string
| Login (default DeviceHive constructor configuration) (optional) |
+| options.password | string
| Password (default DeviceHive constructor configuration) (optional) |
+| options.reconnectionAttempts | number
| Reconnection attempts (default infinity (-1)) (optional) |
+| options.reconnectionInterval | number
| Reconnection interval in ms (default 5000) (optional) |
+
### DeviceHive.models : Object
diff --git a/eslint.json b/eslint.json
index 5ce04b4..58a038a 100644
--- a/eslint.json
+++ b/eslint.json
@@ -1,6 +1,6 @@
{
"parserOptions" : {
- "ecmaVersion" : 6,
+ "ecmaVersion" : 7,
"sourceType" : "module",
"ecmaFeatures" : {
"impliedStrict" : true,
@@ -39,7 +39,7 @@
"dot-notation" : "warn",
"eqeqeq" : "error",
"no-case-declarations" : "error",
- "no-empty-function" : "error",
+ "no-empty-function" : "warn",
"no-empty-pattern" : "error",
"no-eval" : "error",
"no-extend-native" : "error",
@@ -96,7 +96,6 @@
"sort-imports" : "error",
"arrow-spacing" : "error",
"no-class-assign" : "error",
- "no-confusing-arrow" : "error",
"no-dupe-class-members" : "error",
"no-duplicate-imports" : "error",
"no-this-before-super" : "error",
diff --git a/example/node/index.js b/example/node/index.js
index 9503faf..055ef6e 100644
--- a/example/node/index.js
+++ b/example/node/index.js
@@ -38,7 +38,6 @@ void async function start () {
console.log(await httpDeviceHive.device.list(deviceListQuery));
console.log(await httpDeviceHive.deviceType.list(deviceTypeListQuery));
console.log(await httpDeviceHive.network.list(networkListQuery));
- console.log(await httpDeviceHive.network.list(networkListQuery));
console.log(await httpDeviceHive.token.refresh(refreshToken));
}
diff --git a/example/node/subscriptions.js b/example/node/subscriptions.js
new file mode 100644
index 0000000..c7de50e
--- /dev/null
+++ b/example/node/subscriptions.js
@@ -0,0 +1,41 @@
+const DeviceHive = require(`../../index`);
+
+const deviceHive = new DeviceHive({
+ login: `dhadmin`,
+ password: `dhadmin_#911`,
+ //mainServiceURL: 'ws://localhost:8080/dh/websocket',
+ mainServiceURL: 'http://localhost:8080/dh/rest',
+ authServiceURL: 'http://localhost:8090/dh/rest',
+ pluginServiceURL: 'http://localhost:8110/dh/rest',
+ autoUpdateSession: true
+});
+
+
+void async function start () {
+ try {
+ deviceHive.on(DeviceHive.MESSAGE_EVENT, (message) => {
+ console.log(message);
+ });
+
+ deviceHive.on(DeviceHive.ERROR_EVENT, (error) => {
+ console.error(error);
+ });
+
+ await deviceHive.connect();
+
+ const { subscriptionId } = await deviceHive.notification.subscribe(new DeviceHive.models.query.NotificationPollQuery({
+ deviceId: `e50d6085-2aba-48e9-b1c3-73c673e414be`,
+ names: [`test`]
+ }));
+
+ console.log(subscriptionId);
+
+ setTimeout(async () => {
+ await deviceHive.notification.unsubscribe(subscriptionId);
+ console.log(`unsubscribed`);
+ }, 10000);
+
+ } catch (error) {
+ console.warn(error);
+ }
+}();
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 364b82b..450dc10 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,48 +1,48 @@
{
"name": "devicehive",
- "version": "2.0.3",
+ "version": "2.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/code-frame": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.49.tgz",
- "integrity": "sha1-vs2AVIJzREDJ0TfkbXc0DmTX9Rs=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz",
+ "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=",
"dev": true,
"requires": {
- "@babel/highlight": "7.0.0-beta.49"
+ "@babel/highlight": "7.0.0-beta.51"
}
},
"@babel/core": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.49.tgz",
- "integrity": "sha1-c94ggd1lJIlInwy0qpeCmhEzMU4=",
- "dev": true,
- "requires": {
- "@babel/code-frame": "7.0.0-beta.49",
- "@babel/generator": "7.0.0-beta.49",
- "@babel/helpers": "7.0.0-beta.49",
- "@babel/parser": "7.0.0-beta.49",
- "@babel/template": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.51.tgz",
+ "integrity": "sha1-DlS9a2OHNrKuWTwxpH8JaeKyuW0=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.51",
+ "@babel/generator": "7.0.0-beta.51",
+ "@babel/helpers": "7.0.0-beta.51",
+ "@babel/parser": "7.0.0-beta.51",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"convert-source-map": "^1.1.0",
"debug": "^3.1.0",
"json5": "^0.5.0",
"lodash": "^4.17.5",
- "micromatch": "^2.3.11",
+ "micromatch": "^3.1.10",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
}
},
"@babel/generator": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.49.tgz",
- "integrity": "sha1-6c/9qROZaszseTu8JauRvBnQv3o=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz",
+ "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49",
+ "@babel/types": "7.0.0-beta.51",
"jsesc": "^2.5.1",
"lodash": "^4.17.5",
"source-map": "^0.5.0",
@@ -50,214 +50,214 @@
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.49.tgz",
- "integrity": "sha1-fZAF1U/nrWy4dnkCUedVdUGRhuk=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.51.tgz",
+ "integrity": "sha1-OM95IL9fM4oif3VOKGtvut7gS1g=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.49.tgz",
- "integrity": "sha1-xi3VBCtUpZDV5x5gIMRrkdbGyHU=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.51.tgz",
+ "integrity": "sha1-ITP//j4vcVkeQhR7lHKRyirTkjc=",
"dev": true,
"requires": {
- "@babel/helper-explode-assignable-expression": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-explode-assignable-expression": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-call-delegate": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.49.tgz",
- "integrity": "sha1-S11BeCpoPV3GSXg0oyMQqNAqOvk=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.51.tgz",
+ "integrity": "sha1-BO1yfJfPBbyy/WRINzMasV1jyBk=",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-hoist-variables": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-define-map": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.49.tgz",
- "integrity": "sha1-TqBnqnIJNyQN85XNBzwk/K2cKzs=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.51.tgz",
+ "integrity": "sha1-2Ixkc36UjHE/nxFTM46EFf7kCxE=",
"dev": true,
"requires": {
- "@babel/helper-function-name": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "@babel/helper-function-name": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/helper-explode-assignable-expression": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.49.tgz",
- "integrity": "sha1-K/uV337BMHNb9lXkSiF6cNOxPpM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.51.tgz",
+ "integrity": "sha1-mHUzKti11cmC+kgcuCtzFwPyzS0=",
"dev": true,
"requires": {
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-function-name": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.49.tgz",
- "integrity": "sha1-olwRGbnwNSeGcBJuAiXAMEHI3jI=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz",
+ "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "7.0.0-beta.49",
- "@babel/template": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-get-function-arity": "7.0.0-beta.51",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.49.tgz",
- "integrity": "sha1-z1Aj8y0q2S0Ic3STnOwJUby1FEE=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz",
+ "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.49.tgz",
- "integrity": "sha1-2XQGUck7tPp5wba6xjQFH8TQP/U=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.51.tgz",
+ "integrity": "sha1-XX68hZZWe2RPyYmRLDo++YvgWPw=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.49.tgz",
- "integrity": "sha1-L2QrAD1FFV4KnnpK0OaI2Ru8FYM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.51.tgz",
+ "integrity": "sha1-KkJTZXQXZYiAbmAusXpS0yP4KHA=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-module-imports": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.49.tgz",
- "integrity": "sha1-QdfVmJEBbEk0MqRvdGREZVKJDHU=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.51.tgz",
+ "integrity": "sha1-zgBCgEX7t9XrwOp7+DV4nxU2arI=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49",
+ "@babel/types": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/helper-module-transforms": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.49.tgz",
- "integrity": "sha1-/GYL2p1kl0EuGHdqca7ZqeLl960=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.51.tgz",
+ "integrity": "sha1-E68MjuQfJ3dDyPxD1EQxXbIyb3M=",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "7.0.0-beta.49",
- "@babel/helper-simple-access": "7.0.0-beta.49",
- "@babel/helper-split-export-declaration": "7.0.0-beta.49",
- "@babel/template": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "@babel/helper-module-imports": "7.0.0-beta.51",
+ "@babel/helper-simple-access": "7.0.0-beta.51",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.51",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.49.tgz",
- "integrity": "sha1-qYtDw6bFS+9I+HsQ3EVo3sC0G/c=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.51.tgz",
+ "integrity": "sha1-IfIVjvCDoSPOHgRmW1u4TzcAgNc=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.49.tgz",
- "integrity": "sha1-Dp/LuDT4eLs2XSqOqQ7uIbo8zSM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.51.tgz",
+ "integrity": "sha1-D2pfK20cZERBP4+rYJQNebY8IDE=",
"dev": true
},
"@babel/helper-regex": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.49.tgz",
- "integrity": "sha1-/yRPGcKi8Wf/SzFlpjawj9ZBgWs=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.51.tgz",
+ "integrity": "sha1-mXIqPAxwRZavsSMoSwqIihoAPYI=",
"dev": true,
"requires": {
"lodash": "^4.17.5"
}
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.49.tgz",
- "integrity": "sha1-s/2qtBJ4TX6GV7rKsoaSPvyUmLg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.51.tgz",
+ "integrity": "sha1-DtxX4F3LXd4qC27m+NAmGYLe8l8=",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "7.0.0-beta.49",
- "@babel/helper-wrap-function": "7.0.0-beta.49",
- "@babel/template": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.51",
+ "@babel/helper-wrap-function": "7.0.0-beta.51",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-replace-supers": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.49.tgz",
- "integrity": "sha1-50RMcYBX9qCjZFyvjnj7VG/7DZ8=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.51.tgz",
+ "integrity": "sha1-J5phr7hJR2xsxw1VGfg99KdP+m8=",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "7.0.0-beta.49",
- "@babel/helper-optimise-call-expression": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-member-expression-to-functions": "7.0.0-beta.51",
+ "@babel/helper-optimise-call-expression": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-simple-access": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.49.tgz",
- "integrity": "sha1-l6QeJ4mpv4psMFNqJYt550RMXYI=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.51.tgz",
+ "integrity": "sha1-ydf+zYShgdUKOvzEIvyUqWi+MFA=",
"dev": true,
"requires": {
- "@babel/template": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.49.tgz",
- "integrity": "sha1-QNeO2glo0BGxxShm5XRs+yPldUg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz",
+ "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=",
"dev": true,
"requires": {
- "@babel/types": "7.0.0-beta.49"
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helper-wrap-function": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.49.tgz",
- "integrity": "sha1-OFWRRgtNk++W7jgZU5wM3Ju9R1g=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.51.tgz",
+ "integrity": "sha1-bFFvsEQQmWTuAxwiUAqDAxOGL7E=",
"dev": true,
"requires": {
- "@babel/helper-function-name": "7.0.0-beta.49",
- "@babel/template": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/helper-function-name": "7.0.0-beta.51",
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/helpers": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.49.tgz",
- "integrity": "sha1-BU2EAy1OlChqgFhlAAaOQQBaUdA=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.51.tgz",
+ "integrity": "sha1-lScr4qtGNNaCBCX4klAxqSiRg5c=",
"dev": true,
"requires": {
- "@babel/template": "7.0.0-beta.49",
- "@babel/traverse": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49"
+ "@babel/template": "7.0.0-beta.51",
+ "@babel/traverse": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51"
}
},
"@babel/highlight": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.49.tgz",
- "integrity": "sha1-lr3GtD4TSCASumaRsQGEktOWIsw=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz",
+ "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=",
"dev": true,
"requires": {
"chalk": "^2.0.0",
@@ -266,420 +266,421 @@
}
},
"@babel/parser": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.49.tgz",
- "integrity": "sha1-lE0MW6KBK7FZ7b0iZ0Ov0mUXm9w=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz",
+ "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.49.tgz",
- "integrity": "sha1-h2Gl4ti1JR5w3yj00KpkqiillrE=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.51.tgz",
+ "integrity": "sha1-99aS+Uakp/ynjkM2QHoAvq+KTeo=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-remap-async-to-generator": "7.0.0-beta.49",
- "@babel/plugin-syntax-async-generators": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-remap-async-to-generator": "7.0.0-beta.51",
+ "@babel/plugin-syntax-async-generators": "7.0.0-beta.51"
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.49.tgz",
- "integrity": "sha1-bQzWD3p718REo3HE6UcL/wL1d3w=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.51.tgz",
+ "integrity": "sha1-W8Rp5ebRuEpdYEa1npDKAWwghtY=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.51"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.49.tgz",
- "integrity": "sha1-H1PTZ4UQHV60tV1laGqis5+iHEs=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.51.tgz",
+ "integrity": "sha1-PsxtKRnVLJTL+uhiXaM1ghAvs9Y=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.51"
}
},
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.49.tgz",
- "integrity": "sha1-DvX7mr2pgM0Vhe9Mjo9oC2MmPHI=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.51.tgz",
+ "integrity": "sha1-0pbD6nTKN/1/pVu/jAzYWqfZn3s=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-regex": "7.0.0-beta.49",
- "regexpu-core": "^4.1.4"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-regex": "7.0.0-beta.51",
+ "regexpu-core": "^4.2.0"
}
},
"@babel/plugin-syntax-async-generators": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.49.tgz",
- "integrity": "sha1-UO6UMAKu3JqzqNEikr013Z7bHfg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.51.tgz",
+ "integrity": "sha1-aSGvHcPaD87d4KYQc+7Hl7jKpwc=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-syntax-object-rest-spread": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.49.tgz",
- "integrity": "sha1-R4SziAgj/xLnQsJrQemFf3AdY54=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.51.tgz",
+ "integrity": "sha1-bVehGcHwZMRY5FutRb7wqD7RDAA=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.49.tgz",
- "integrity": "sha1-Ph3T1drrQnDk7khjZB1Pqga7zRE=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.51.tgz",
+ "integrity": "sha1-ziZ1cgy0EkjCZDNRXJDJS50Bpv0=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.49.tgz",
- "integrity": "sha1-3ThFtjxoPRh9UYbuDogsQEbE8OM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.51.tgz",
+ "integrity": "sha1-KbnbbjhoigbsXCVjmZbYml6/2+M=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.49.tgz",
- "integrity": "sha1-kRpA65MEAYbOtpMQXKdt73/pfQM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.51.tgz",
+ "integrity": "sha1-lFOFBVoubTVmv1WvEnyNclzToXM=",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-remap-async-to-generator": "7.0.0-beta.49"
+ "@babel/helper-module-imports": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-remap-async-to-generator": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.49.tgz",
- "integrity": "sha1-eqn0b9+HO3IRqqLrDTfEw3Ghq9I=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.51.tgz",
+ "integrity": "sha1-IxKbr4FEcfOeqU7shKsf/nbJ/pY=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.49.tgz",
- "integrity": "sha1-3Vqd3ZhndciyDPW2EGWvs92eqsk=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.51.tgz",
+ "integrity": "sha1-vlVcefDaTrFop/4W14eppxc3AeA=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.49.tgz",
- "integrity": "sha1-U0JHHS5qMzczLqJGtGwL3fX8VE0=",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "7.0.0-beta.49",
- "@babel/helper-define-map": "7.0.0-beta.49",
- "@babel/helper-function-name": "7.0.0-beta.49",
- "@babel/helper-optimise-call-expression": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-replace-supers": "7.0.0-beta.49",
- "@babel/helper-split-export-declaration": "7.0.0-beta.49",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.51.tgz",
+ "integrity": "sha1-BD8x+2MnZkoy2Lpl3hV5nv3GXaA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.51",
+ "@babel/helper-define-map": "7.0.0-beta.51",
+ "@babel/helper-function-name": "7.0.0-beta.51",
+ "@babel/helper-optimise-call-expression": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-replace-supers": "7.0.0-beta.51",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.51",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.49.tgz",
- "integrity": "sha1-uCWdF0vwerS1ZWZWK0buZSDD39I=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.51.tgz",
+ "integrity": "sha1-jHKhqz4HZwNP+eZzLSWBwjwDLv4=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.49.tgz",
- "integrity": "sha1-Q2Y5LJyC0SMQVsHQApQ4pg02K4I=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.51.tgz",
+ "integrity": "sha1-1dRU5XTH7zPuSekYsEivspvpNfY=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.49.tgz",
- "integrity": "sha1-Na4rwYe+51LQ93hdJwTlK4c3c2k=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.51.tgz",
+ "integrity": "sha1-mAVYoeX34ohQ9f/eIEBCkeKqM/s=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-regex": "7.0.0-beta.49",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-regex": "7.0.0-beta.51",
"regexpu-core": "^4.1.3"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.49.tgz",
- "integrity": "sha1-+sJEgJ3ey/CV43VVjMtxbaEEIxY=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.51.tgz",
+ "integrity": "sha1-VB6vipfRSpgJs1nY9UgAHwhbm38=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.49.tgz",
- "integrity": "sha1-RXstCQBHlGhKpuGwQBUIC4CgihQ=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.51.tgz",
+ "integrity": "sha1-BLTj5As3AREt1u2jliUTJ1eIH9Q=",
"dev": true,
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.49.tgz",
- "integrity": "sha1-PscnJr8diaDU1RG+epVJBm9Xqt4=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.51.tgz",
+ "integrity": "sha1-RPR2sGxANVF6hAOiYk+xZMQ3FFU=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.49.tgz",
- "integrity": "sha1-rzn2Dnrvzpsl60rc7dBNUIZs4hg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.51.tgz",
+ "integrity": "sha1-cGU8NgtTJUJG9GWexFCwwKVthqo=",
"dev": true,
"requires": {
- "@babel/helper-function-name": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-function-name": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.49.tgz",
- "integrity": "sha1-B8g4JU1l5oZ+hlE+sPItXyawpWo=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.51.tgz",
+ "integrity": "sha1-RbB6lCI8+iJnAaeUYLQrMt8d7AU=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.49.tgz",
- "integrity": "sha1-FtB0gJVLBBXqcPHsPtvQWXvT3f4=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.51.tgz",
+ "integrity": "sha1-9oqL5/ZRd9JGUGo5FNrk1m5nWh8=",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-module-transforms": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.49.tgz",
- "integrity": "sha1-Cfs0XVknwro72J582xOlUGftOaA=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.51.tgz",
+ "integrity": "sha1-QDj54VJE4QkAy4n1t5bQUPHrGVs=",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-simple-access": "7.0.0-beta.49"
+ "@babel/helper-module-transforms": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-simple-access": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.49.tgz",
- "integrity": "sha1-aCJaOuExJ3G8Wjb3H/ENAsEkPZ8=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.51.tgz",
+ "integrity": "sha1-bn/ErZQhtyXN3zfMkk6vd38ijCc=",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-hoist-variables": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.49.tgz",
- "integrity": "sha1-cEjKWncYlwb0s+luS5luswWQ3WM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.51.tgz",
+ "integrity": "sha1-7i71dVedluQGE/ym5sjttcrbbG8=",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-module-transforms": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.49.tgz",
- "integrity": "sha1-wv/vHruvckqeWN3hFOV+Pmhkpec=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.51.tgz",
+ "integrity": "sha1-cHWhBllcv91CXta4MLefinr/UoM=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.49.tgz",
- "integrity": "sha1-swL1VwKEc0PBD/T7hDXMNXR1X+M=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.51.tgz",
+ "integrity": "sha1-rBjoi8HXm3GL2vSKdWgzzfW9zr8=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-replace-supers": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-replace-supers": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.49.tgz",
- "integrity": "sha1-HK1xoqMygeXvuxpGI6lkwHPOmi0=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.51.tgz",
+ "integrity": "sha1-mQGVsd/bG8yUkG8wNJUQie0e3U4=",
"dev": true,
"requires": {
- "@babel/helper-call-delegate": "7.0.0-beta.49",
- "@babel/helper-get-function-arity": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-call-delegate": "7.0.0-beta.51",
+ "@babel/helper-get-function-arity": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.49.tgz",
- "integrity": "sha1-1O15ZwM/T1tJNjwgNQOJm4NXyuI=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.51.tgz",
+ "integrity": "sha1-U28NWZ0nU9ygor6KZeLCRKe1YSs=",
"dev": true,
"requires": {
- "regenerator-transform": "^0.12.3"
+ "regenerator-transform": "^0.12.4"
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.49.tgz",
- "integrity": "sha1-SfE0295PZVg0whUk6eYaWNTheQA=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.51.tgz",
+ "integrity": "sha1-3bwLGuHds7z+aWnyyWgQPxHjK9k=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.49.tgz",
- "integrity": "sha1-arqwX8DMqCmq+eKoUES3l2Pmgco=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.51.tgz",
+ "integrity": "sha1-EAEpvI19z0vHmtzWEppCFCWdilA=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.49.tgz",
- "integrity": "sha1-CMxbZM9qWUKoe92bSkgY1MuhLfM=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.51.tgz",
+ "integrity": "sha1-SMvqzTG9Be6AC1+svLCcV4G9lhk=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-regex": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-regex": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.49.tgz",
- "integrity": "sha1-5gmu1rj8x+HrzKzyITimRyApQKI=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.51.tgz",
+ "integrity": "sha1-LQWV9WRh1DRbo1w41zAz+H7Lu8g=",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-annotate-as-pure": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.49.tgz",
- "integrity": "sha1-NlFBujVb9znu/Wwrud8cO3FG5FA=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.51.tgz",
+ "integrity": "sha1-SVDAyOPJ4eFB5Fzrq15hSCYyBMM=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49"
+ "@babel/helper-plugin-utils": "7.0.0-beta.51"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.49.tgz",
- "integrity": "sha1-w3XbVwl1diFSPUGstiqavw1DdLg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.51.tgz",
+ "integrity": "sha1-kBn5FQj0C1CmRDUEMijEFCws2GQ=",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/helper-regex": "7.0.0-beta.49",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/helper-regex": "7.0.0-beta.51",
"regexpu-core": "^4.1.3"
}
},
"@babel/preset-env": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.49.tgz",
- "integrity": "sha1-SoqLkhOfUfovkPv28frXWXUyrrw=",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "7.0.0-beta.49",
- "@babel/helper-plugin-utils": "7.0.0-beta.49",
- "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.49",
- "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.49",
- "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.49",
- "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.49",
- "@babel/plugin-syntax-async-generators": "7.0.0-beta.49",
- "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.49",
- "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.49",
- "@babel/plugin-transform-arrow-functions": "7.0.0-beta.49",
- "@babel/plugin-transform-async-to-generator": "7.0.0-beta.49",
- "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.49",
- "@babel/plugin-transform-block-scoping": "7.0.0-beta.49",
- "@babel/plugin-transform-classes": "7.0.0-beta.49",
- "@babel/plugin-transform-computed-properties": "7.0.0-beta.49",
- "@babel/plugin-transform-destructuring": "7.0.0-beta.49",
- "@babel/plugin-transform-dotall-regex": "7.0.0-beta.49",
- "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.49",
- "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.49",
- "@babel/plugin-transform-for-of": "7.0.0-beta.49",
- "@babel/plugin-transform-function-name": "7.0.0-beta.49",
- "@babel/plugin-transform-literals": "7.0.0-beta.49",
- "@babel/plugin-transform-modules-amd": "7.0.0-beta.49",
- "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.49",
- "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.49",
- "@babel/plugin-transform-modules-umd": "7.0.0-beta.49",
- "@babel/plugin-transform-new-target": "7.0.0-beta.49",
- "@babel/plugin-transform-object-super": "7.0.0-beta.49",
- "@babel/plugin-transform-parameters": "7.0.0-beta.49",
- "@babel/plugin-transform-regenerator": "7.0.0-beta.49",
- "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.49",
- "@babel/plugin-transform-spread": "7.0.0-beta.49",
- "@babel/plugin-transform-sticky-regex": "7.0.0-beta.49",
- "@babel/plugin-transform-template-literals": "7.0.0-beta.49",
- "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.49",
- "@babel/plugin-transform-unicode-regex": "7.0.0-beta.49",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.51.tgz",
+ "integrity": "sha1-W1gObp6DBBZsExcBfoY8Btz8BKI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "7.0.0-beta.51",
+ "@babel/helper-plugin-utils": "7.0.0-beta.51",
+ "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.51",
+ "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.51",
+ "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.51",
+ "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.51",
+ "@babel/plugin-syntax-async-generators": "7.0.0-beta.51",
+ "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.51",
+ "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.51",
+ "@babel/plugin-transform-arrow-functions": "7.0.0-beta.51",
+ "@babel/plugin-transform-async-to-generator": "7.0.0-beta.51",
+ "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.51",
+ "@babel/plugin-transform-block-scoping": "7.0.0-beta.51",
+ "@babel/plugin-transform-classes": "7.0.0-beta.51",
+ "@babel/plugin-transform-computed-properties": "7.0.0-beta.51",
+ "@babel/plugin-transform-destructuring": "7.0.0-beta.51",
+ "@babel/plugin-transform-dotall-regex": "7.0.0-beta.51",
+ "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.51",
+ "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.51",
+ "@babel/plugin-transform-for-of": "7.0.0-beta.51",
+ "@babel/plugin-transform-function-name": "7.0.0-beta.51",
+ "@babel/plugin-transform-literals": "7.0.0-beta.51",
+ "@babel/plugin-transform-modules-amd": "7.0.0-beta.51",
+ "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.51",
+ "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.51",
+ "@babel/plugin-transform-modules-umd": "7.0.0-beta.51",
+ "@babel/plugin-transform-new-target": "7.0.0-beta.51",
+ "@babel/plugin-transform-object-super": "7.0.0-beta.51",
+ "@babel/plugin-transform-parameters": "7.0.0-beta.51",
+ "@babel/plugin-transform-regenerator": "7.0.0-beta.51",
+ "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.51",
+ "@babel/plugin-transform-spread": "7.0.0-beta.51",
+ "@babel/plugin-transform-sticky-regex": "7.0.0-beta.51",
+ "@babel/plugin-transform-template-literals": "7.0.0-beta.51",
+ "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.51",
+ "@babel/plugin-transform-unicode-regex": "7.0.0-beta.51",
"browserslist": "^3.0.0",
"invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
"semver": "^5.3.0"
}
},
"@babel/template": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.49.tgz",
- "integrity": "sha1-44q+ghfLl5P0YaUwbXrXRdg+HSc=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz",
+ "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=",
"dev": true,
"requires": {
- "@babel/code-frame": "7.0.0-beta.49",
- "@babel/parser": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "@babel/code-frame": "7.0.0-beta.51",
+ "@babel/parser": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"lodash": "^4.17.5"
}
},
"@babel/traverse": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.49.tgz",
- "integrity": "sha1-TypzaCoYM07WYl0QCo0nMZ98LWg=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz",
+ "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=",
"dev": true,
"requires": {
- "@babel/code-frame": "7.0.0-beta.49",
- "@babel/generator": "7.0.0-beta.49",
- "@babel/helper-function-name": "7.0.0-beta.49",
- "@babel/helper-split-export-declaration": "7.0.0-beta.49",
- "@babel/parser": "7.0.0-beta.49",
- "@babel/types": "7.0.0-beta.49",
+ "@babel/code-frame": "7.0.0-beta.51",
+ "@babel/generator": "7.0.0-beta.51",
+ "@babel/helper-function-name": "7.0.0-beta.51",
+ "@babel/helper-split-export-declaration": "7.0.0-beta.51",
+ "@babel/parser": "7.0.0-beta.51",
+ "@babel/types": "7.0.0-beta.51",
"debug": "^3.1.0",
"globals": "^11.1.0",
"invariant": "^2.2.0",
@@ -687,9 +688,9 @@
}
},
"@babel/types": {
- "version": "7.0.0-beta.49",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.49.tgz",
- "integrity": "sha1-t+Oxw/TUz+Eb34yJ8e/V4WF7h6Y=",
+ "version": "7.0.0-beta.51",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz",
+ "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=",
"dev": true,
"requires": {
"esutils": "^2.0.2",
@@ -731,19 +732,19 @@
"dev": true
},
"acorn-node": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
- "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.4.0.tgz",
+ "integrity": "sha512-dPW3AldIZRYcQY8/tFrXQqGAFCVQSMLIuNvHyz/qeqLYrqo//DiKkAx6+fbPmz9I89rlTNNV+mhptwbaBGIj/g==",
"dev": true,
"requires": {
- "acorn": "^5.4.1",
+ "acorn": "^5.6.2",
"xtend": "^4.0.1"
},
"dependencies": {
"acorn": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
- "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
}
}
@@ -770,13 +771,10 @@
}
},
"arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
},
"arr-flatten": {
"version": "1.1.0",
@@ -784,6 +782,12 @@
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
"array-filter": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
@@ -814,9 +818,9 @@
"integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0="
},
"array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
"asn1.js": {
@@ -845,6 +849,12 @@
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true
},
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
"astw": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
@@ -857,7 +867,12 @@
"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==",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
+ "atob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
"dev": true
},
"babel-code-frame": {
@@ -977,9 +992,9 @@
}
},
"babel-loader": {
- "version": "8.0.0-beta.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.0-beta.3.tgz",
- "integrity": "sha512-yvaAx7cBEjh+R2oGL2vIPmveO6daS5TYP2FSPq4b6CUYjU/ilD4HHyfLIa9KUj6OKBcR9fQcl1NvUOTWNaJ6mw==",
+ "version": "8.0.0-beta.4",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.0-beta.4.tgz",
+ "integrity": "sha512-fQMCj8jRpF/2CPuVnpFrOb8+8pRuquKqoC+tspy5RWBmL37/2qc104sLLLqpwWltrFzpYb30utPpKc3H6P3ETQ==",
"dev": true,
"requires": {
"find-cache-dir": "^1.0.0",
@@ -1115,6 +1130,61 @@
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
"base64-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
@@ -1144,14 +1214,32 @@
}
},
"braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
+ "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"
+ }
+ }
}
},
"brorand": {
@@ -1235,61 +1323,20 @@
"dev": true
},
"browser-unpack": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.2.0.tgz",
- "integrity": "sha1-NXruMfxGeDFoTQY+Q1XgcKeClw0=",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.3.0.tgz",
+ "integrity": "sha512-hK81IeAN/PcqzSKTqKWe3jzmB41PV/23N1w1w2N/KBPv+sjp31sMlen9arVIENzrH8IzaCWA2Fx6SV0kJyhAFQ==",
"dev": true,
"requires": {
- "acorn": "^4.0.3",
- "browser-pack": "^5.0.1",
+ "acorn": "^5.6.2",
"concat-stream": "^1.5.0",
"minimist": "^1.1.1"
},
"dependencies": {
- "browser-pack": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-5.0.1.tgz",
- "integrity": "sha1-QZdxmyDG4KqglFHFER5T77b7wY0=",
- "dev": true,
- "requires": {
- "JSONStream": "^1.0.3",
- "combine-source-map": "~0.6.1",
- "defined": "^1.0.0",
- "through2": "^1.0.0",
- "umd": "^3.0.0"
- }
- },
- "combine-source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.6.1.tgz",
- "integrity": "sha1-m0oJwxYDPXaODxHgKfonMOB5rZY=",
- "dev": true,
- "requires": {
- "convert-source-map": "~1.1.0",
- "inline-source-map": "~0.5.0",
- "lodash.memoize": "~3.0.3",
- "source-map": "~0.4.2"
- }
- },
- "convert-source-map": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
- "dev": true
- },
- "inline-source-map": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.5.0.tgz",
- "integrity": "sha1-Skxd2OT7Xps82mDIIt+tyu5m4K8=",
- "dev": true,
- "requires": {
- "source-map": "~0.4.0"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "acorn": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
},
"minimist": {
@@ -1297,43 +1344,6 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"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"
- }
- },
- "source-map": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- },
- "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
- },
- "through2": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
- "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=",
- "dev": true,
- "requires": {
- "readable-stream": ">=1.1.13-1 <1.2.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- }
}
}
},
@@ -1608,6 +1618,23 @@
}
}
},
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
"cached-path-relative": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
@@ -1627,9 +1654,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30000847",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000847.tgz",
- "integrity": "sha512-Weo+tRtVWcN2da782Ebx/27hFNEb+KP+uP6tdqAa+2S5bp1zOJhVH9tEpDygagrfvU4QjeuPwi/5VGsgT4SLaA==",
+ "version": "1.0.30000855",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000855.tgz",
+ "integrity": "sha512-ajORrkXa5UYk62P5PK6ZmBraYOAOr9HWy+XxLwjDg8Ys/5KiSyarg8tIA32ZVqbFhtz67wyySXnU9imkh2ZT2w==",
"dev": true
},
"chai": {
@@ -1673,19 +1700,52 @@
"safe-buffer": "^5.0.1"
}
},
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.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"
+ }
+ }
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
"color-convert": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
- "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+ "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
"dev": true,
"requires": {
- "color-name": "^1.1.1"
+ "color-name": "1.1.1"
}
},
"color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
"dev": true
},
"combine-source-map": {
@@ -1726,9 +1786,9 @@
},
"dependencies": {
"acorn": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
- "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
},
"debug": {
@@ -1761,6 +1821,12 @@
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"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=",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1821,6 +1887,12 @@
"integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
"dev": true
},
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
"core-js": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
@@ -1966,6 +2038,47 @@
"object-keys": "^1.0.8"
}
},
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
"defined": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
@@ -2127,9 +2240,9 @@
}
},
"es-abstract": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz",
- "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==",
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
"dev": true,
"requires": {
"es-to-primitive": "^1.1.1",
@@ -2151,9 +2264,9 @@
}
},
"es5-ext": {
- "version": "0.10.44",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.44.tgz",
- "integrity": "sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==",
+ "version": "0.10.45",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
"dev": true,
"requires": {
"es6-iterator": "~2.0.3",
@@ -2228,9 +2341,9 @@
"dev": true
},
"escodegen": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
- "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz",
+ "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==",
"dev": true,
"requires": {
"esprima": "^3.1.3",
@@ -2362,21 +2475,47 @@
}
},
"expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "^2.1.0"
+ "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": {
+ "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",
+ "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"
+ }
+ }
}
},
"extend": {
@@ -2385,13 +2524,90 @@
"integrity": "sha1-0VFvsP9WJNLr+RI+odrFoZlABPg=",
"dev": true
},
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
"dev": true,
"requires": {
- "is-extglob": "^1.0.0"
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "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-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"
+ }
+ }
}
},
"falafel": {
@@ -2407,9 +2623,9 @@
},
"dependencies": {
"acorn": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
- "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
},
"isarray": {
@@ -2426,23 +2642,27 @@
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
- },
"fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
+ "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"
+ }
+ }
}
},
"find-cache-dir": {
@@ -2471,22 +2691,22 @@
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
"dev": true
},
- "from2": {
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "from2": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
@@ -2529,6 +2749,12 @@
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
@@ -2543,25 +2769,6 @@
"path-is-absolute": "^1.0.0"
}
},
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- }
- },
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
"globals": {
"version": "11.5.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz",
@@ -2598,6 +2805,38 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"hash-base": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
@@ -2753,6 +2992,26 @@
"loose-envify": "^1.0.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-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@@ -2765,25 +3024,49 @@
"integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=",
"dev": true
},
+ "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-date-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
"integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
"dev": true
},
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "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-primitive": "^2.0.0"
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "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
+ }
}
},
"is-extendable": {
@@ -2792,12 +3075,6 @@
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
},
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
"is-finite": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
@@ -2807,35 +3084,51 @@
"number-is-nan": "^1.0.0"
}
},
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "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": {
- "is-extglob": "^1.0.0"
+ "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-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
"dev": true,
"requires": {
- "kind-of": "^3.0.2"
+ "is-number": "^4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
}
},
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
},
"is-regex": {
"version": "1.0.4",
@@ -2863,6 +3156,12 @@
"integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=",
"dev": true
},
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -2870,13 +3169,10 @@
"dev": true
},
"isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
},
"isomorphic-fetch": {
"version": "2.2.1",
@@ -2887,6 +3183,12 @@
"whatwg-fetch": ">=0.10.0"
}
},
+ "js-levenshtein": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.3.tgz",
+ "integrity": "sha512-/812MXr9RBtMObviZ8gQBhHO8MOrGj8HlEE+4ccMTElNA/6I3u39u+bhny55Lk921yn44nSZFy9naNLElL5wgQ==",
+ "dev": true
+ },
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
@@ -2932,13 +3234,10 @@
"integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk="
},
"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
},
"labeled-stream-splicer": {
"version": "2.0.0",
@@ -3038,12 +3337,21 @@
"pify": "^3.0.0"
}
},
- "math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
"dev": true
},
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
"md5.js": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
@@ -3076,24 +3384,24 @@
}
},
"micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
+ "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"
}
},
"miller-rabin": {
@@ -3161,6 +3469,27 @@
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -3314,6 +3643,26 @@
}
}
},
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-odd": "^2.0.0",
+ "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"
+ }
+ },
"next-tick": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
@@ -3329,15 +3678,6 @@
"is-stream": "^1.0.1"
}
},
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
@@ -3349,12 +3689,52 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "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"
+ }
+ },
+ "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-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"dev": true
},
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
@@ -3365,14 +3745,13 @@
"es-abstract": "^1.5.1"
}
},
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
+ "isobject": "^3.0.1"
}
},
"once": {
@@ -3417,9 +3796,9 @@
"dev": true
},
"p-limit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
- "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
+ "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"
@@ -3468,17 +3847,11 @@
"pbkdf2": "^3.0.3"
}
},
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
- "dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- }
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
},
"path-browserify": {
"version": "0.0.0",
@@ -3544,18 +3917,18 @@
"find-up": "^2.1.0"
}
},
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
"prelude-ls": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
"dev": true
},
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
- "dev": true
- },
"pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
@@ -3621,31 +3994,6 @@
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
"dev": true
},
- "randomatic": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz",
- "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==",
- "dev": true,
- "requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "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
- }
- }
- },
"randombytes": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
@@ -3704,12 +4052,12 @@
"dev": true
},
"regenerate-unicode-properties": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-6.0.0.tgz",
- "integrity": "sha512-BvXxRS7RfVWxtm7vrq+0I0j7sqZ1zeSC+yzf5HS0qLnKcZPX541gFEGB39LvGuKHrkyKXrzXug+oC7xkM1Zovw==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
"dev": true,
"requires": {
- "regenerate": "^1.3.3"
+ "regenerate": "^1.4.0"
}
},
"regenerator-runtime": {
@@ -3727,27 +4075,28 @@
"private": "^0.1.6"
}
},
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "is-equal-shallow": "^0.1.3"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
}
},
"regexpu-core": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.1.5.tgz",
- "integrity": "sha512-3xo5pFze1F8oR4F9x3aFbdtdxAxQ9WBX6gXfLgeBt7KpDI0+oDF7WVntnhsPKqobU/GAYc2pmx+y3z0JI1+z3w==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz",
+ "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==",
"dev": true,
"requires": {
"regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^6.0.0",
+ "regenerate-unicode-properties": "^7.0.0",
"regjsgen": "^0.4.0",
"regjsparser": "^0.3.0",
- "unicode-match-property-ecmascript": "^1.0.3",
- "unicode-match-property-value-ecmascript": "^1.0.1"
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
}
},
"regjsgen": {
@@ -3773,12 +4122,6 @@
}
}
},
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
"repeat-element": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
@@ -3809,6 +4152,18 @@
"path-parse": "^1.0.5"
}
},
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
"ripemd160": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
@@ -3822,8 +4177,16 @@
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
},
"scope-analyzer": {
"version": "2.0.4",
@@ -3845,6 +4208,29 @@
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"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==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^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"
+ }
+ }
+ }
+ },
"sha.js": {
"version": "2.4.10",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz",
@@ -3883,12 +4269,141 @@
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "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",
+ "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"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^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"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "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"
+ }
+ }
+ }
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
"source-map-support": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
@@ -3898,12 +4413,48 @@
"source-map": "^0.5.6"
}
},
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
"sourcemap-codec": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz",
"integrity": "sha512-hX1eNBNuilj8yfFnECh0DzLgwKpBLMIvmhgEhixXNui8lMLBInTI8Kyxt++RwJnMNu7cAUo635L2+N1TxMJCzA==",
"dev": true
},
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "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"
+ }
+ }
+ }
+ },
"stream-browserify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
@@ -4027,9 +4578,9 @@
}
},
"terser": {
- "version": "3.7.5",
- "resolved": "https://registry.npmjs.org/terser/-/terser-3.7.5.tgz",
- "integrity": "sha512-nyy1mCqtuN5x5e0IQI2NpnlFsfXrgqhiC3Skqv7ZUUL3+fKpGrnso1ZWkEqgpqVrFz0hVbUzQY5i7Tonbg4l+w==",
+ "version": "3.7.6",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.7.6.tgz",
+ "integrity": "sha512-HbknfLRteizRcQWXTnpVK5rMleOEZh5g5y8sKzTm/W3pf4xrrdvajMSLMg2/45t0U8Hbk2+bcJ1IPXjO77kWtw==",
"dev": true,
"requires": {
"commander": "~2.14.1",
@@ -4076,9 +4627,9 @@
}
},
"tinyify": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-2.4.1.tgz",
- "integrity": "sha512-jOYMtR7PTtYplUqmo/qfFIF9VWeowKhyLwZHksSdwVU22qUUwMpHBjgwPmSBHxV99sOivt/tVN9RR3wzNBptGg==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-2.4.3.tgz",
+ "integrity": "sha512-+H0pfrYcR8k1oj5GytjNrbpbaSEyPtd6bO2b0PzojQl3VDltapddxEiVxKCi96UtXXOocP4qClUYDoBzAV9GTA==",
"dev": true,
"requires": {
"browser-pack-flat": "^3.0.9",
@@ -4102,6 +4653,48 @@
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true
},
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "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-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
"transform-ast": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz",
@@ -4118,9 +4711,9 @@
},
"dependencies": {
"is-buffer": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.2.tgz",
- "integrity": "sha512-imvkm8cOGKeZ/NwkAd+FAURi0hsL9gr3kvdi0r3MnqChcOdPaQRIOQiOU+sD40XzUIe6nFmSHYtQjbkDvaQbEg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
"dev": true
}
}
@@ -4244,65 +4837,142 @@
},
"dependencies": {
"acorn": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
- "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz",
+ "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==",
"dev": true
}
}
},
"unicode-canonical-property-names-ecmascript": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.3.tgz",
- "integrity": "sha512-iG/2t0F2LAU8aZYPkX5gi7ebukHnr3sWFESpb+zPQeeaQwOkfoO6ZW17YX7MdRPNG9pCy+tjzGill+Ah0Em0HA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
"dev": true
},
"unicode-match-property-ecmascript": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz",
- "integrity": "sha512-nFcaBFcr08UQNF15ZgI5ISh3yUnQm7SJRRxwYrL5VYX46pS+6Q7TCTv4zbK+j6/l7rQt0mMiTL2zpmeygny6rA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
"dev": true,
"requires": {
- "unicode-canonical-property-names-ecmascript": "^1.0.2",
- "unicode-property-aliases-ecmascript": "^1.0.3"
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
}
},
"unicode-match-property-value-ecmascript": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz",
- "integrity": "sha512-lM8B0FDZQh9yYGgiabRQcyWicB27VLOolSBRIxsO7FeQPtg+79Oe7sC8Mzr8BObDs+G9CeYmC/shHo6OggNEog==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
"dev": true
},
"unicode-property-aliases-ecmascript": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz",
- "integrity": "sha512-TdDmDOTxEf2ad1g3ZBpM6cqKIb2nJpVlz1Q++casDryKz18tpeMBhSng9hjC1CTQCkOV9Rw2knlSB6iRo7ad1w==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
"dev": true
},
- "universal-websocket-client": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/universal-websocket-client/-/universal-websocket-client-1.0.1.tgz",
- "integrity": "sha1-rXwA4izqFqKoPWq15nraKSjb6W8=",
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
"requires": {
- "ws": "^2.2.0"
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
},
"dependencies": {
- "safe-buffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
- "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
+ "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"
+ }
+ }
+ }
+ },
+ "universal-websocket-client": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/universal-websocket-client/-/universal-websocket-client-1.0.2.tgz",
+ "integrity": "sha512-Pi6BdJtEAISb77GTbOLBLIWdYGezXgnJejrVBYKXxzNTsLcjJS+mWIJ2BRZElSlOG/wc7+yfOe5y30bzTu3Qqg==",
+ "requires": {
+ "ws": "^3.3.3"
+ },
+ "dependencies": {
"ws": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz",
- "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
"requires": {
- "safe-buffer": "~5.0.1",
+ "async-limiter": "~1.0.0",
+ "safe-buffer": "~5.1.0",
"ultron": "~1.1.0"
}
}
}
},
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -4321,6 +4991,15 @@
}
}
},
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
"util": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
diff --git a/package.json b/package.json
index 053296b..e5e9828 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "devicehive",
- "version": "2.0.4",
+ "version": "2.1.0",
"description": "DeviceHive JS Library",
"main": "index.js",
"scripts": {
@@ -21,19 +21,19 @@
"query-string": "^5.1.1",
"randomstring": "^1.1.5",
"string-template": "^1.0.0",
- "universal-websocket-client": "^1.0.1"
+ "universal-websocket-client": "^1.0.2"
},
"devDependencies": {
- "@babel/core": "^7.0.0-beta.49",
- "@babel/preset-env": "^7.0.0-beta.49",
+ "@babel/core": "^7.0.0-beta.51",
+ "@babel/preset-env": "^7.0.0-beta.51",
"babel-core": "^6.26.3",
- "babel-loader": "^8.0.0-beta.3",
+ "babel-loader": "^8.0.0-beta.4",
"babelify": "^8.0.0",
"browserify": "^15.2.0",
"chai": "^4.1.2",
"exorcist": "^1.0.1",
"mocha": "^5.2.0",
- "tinyify": "^2.4.1",
+ "tinyify": "^2.4.3",
"ws": "^4.1.0"
}
}
diff --git a/src/ApiStrategy.js b/src/ApiStrategy.js
index 4940406..380691a 100644
--- a/src/ApiStrategy.js
+++ b/src/ApiStrategy.js
@@ -1,36 +1,39 @@
const EventEmitter = require('events');
+const Transport = require('./transports/base/Transport');
const HTTP = require('./transports/HTTP');
const WS = require('./transports/WS');
const API = require(`./controllers/API`);
+const ApiMap = require(`./controllers/transportResolvers/ApiMap`);
const Utils = require('./utils/Utils');
const UnsupportedTransportError = require('./error/UnsupportedTransportError');
/**
- * ApiStrategy
- * @event onMessage
+ * ApiStrategy. This class handles all transport specific moments
+ * @event message
+ * @event error
*/
class ApiStrategy extends EventEmitter {
+ static get MESSAGE_EVENT() { return Transport.MESSAGE_EVENT; }
+ static get ERROR_EVENT() { return Transport.ERROR_EVENT; }
+
/**
- *
+ * Returns transport by url
* @param url
* @returns Transport Class
*/
- static getType(url) {
- let result;
-
+ static getTransport(url) {
if (url.startsWith(HTTP.TYPE)) {
- result = HTTP;
+ return HTTP;
} else if (url.startsWith(WS.TYPE)) {
- result = WS;
+ return WS;
} else {
throw new UnsupportedTransportError();
}
-
- return result;
}
+
/**
* Creates ApiStrategy
* @param {object} urls ({ mainServiceURL, authServiceURL, pluginServiceURL })
@@ -40,7 +43,11 @@ class ApiStrategy extends EventEmitter {
const me = this;
+ me.subscriptionMap = new Map();
+ me.subscriptionIdsMap = new Map();
+ me.subscriptionLastTimestampMap = new Map();
me.reconnectionHandler = null;
+ me.reAuthorizationHandler = null;
me.urlsMap = new Map();
@@ -48,47 +55,135 @@ class ApiStrategy extends EventEmitter {
me.urlsMap.set(API.AUTH_BASE, authServiceURL);
me.urlsMap.set(API.PLUGIN_BASE, pluginServiceURL);
- me.strategy = new (ApiStrategy.getType(mainServiceURL))({ mainServiceURL, authServiceURL, pluginServiceURL });
+ me.transport = new (ApiStrategy.getTransport(mainServiceURL))({ url: mainServiceURL });
+
+ me._initTransportSpecificFunctionality();
- me.strategy.on(`message`, (message) => {
- switch (me.strategy.type) {
+ me.transport.on(Transport.MESSAGE_EVENT, (message) => {
+ switch (me.transport.type) {
case HTTP.TYPE:
- me.emit(`message`, message);
+ if (message.subscriptionId) {
+ message.subscriptionId = me._internalSubscriptionIdToExternal(message.subscriptionId);
+ }
+
+ if (message.subscriptionId && message.timestamp) {
+ me.subscriptionLastTimestampMap.set(message.subscriptionId, message.timestamp)
+ }
+
+ me.emit(ApiStrategy.MESSAGE_EVENT, message);
break;
case WS.TYPE:
if (message.subscriptionId && message.action) {
- me.emit(`message`, message[message.action.split(`/`)[0]]);
+ const messageData = message[message.action.split(`/`).shift()];
+
+ messageData.subscriptionId = me._internalSubscriptionIdToExternal(message.subscriptionId);
+
+ if (messageData.timestamp) {
+ me.subscriptionLastTimestampMap.set(messageData.subscriptionId, messageData.timestamp)
+ }
+
+ me.emit(ApiStrategy.MESSAGE_EVENT, messageData);
} else {
- me.emit(`message`, message);
+ me.emit(ApiStrategy.MESSAGE_EVENT, message);
}
break;
}
});
+
+ me.transport.on(Transport.RECONNECTED_EVENT, () => {
+ if (me.reAuthorizationHandler) {
+ const subscriptionKeys = Array.from(me.subscriptionMap.keys());
+ const subscriptionValues = Array.from(me.subscriptionMap.values());
+
+ me.reAuthorizationHandler()
+ .then(() => Promise.all(subscriptionValues
+ .map(({ key, parameters, body }) => me.send(key, parameters, body))))
+ .then(() => subscriptionKeys
+ .forEach((subscriptionId) => me.subscriptionMap.delete(subscriptionId)))
+ .catch((error) => me.emit(ApiStrategy.ERROR_EVENT, error));
+ }
+ });
+
+ me.transport.on(Transport.ERROR_EVENT, (error) => me.emit(ApiStrategy.ERROR_EVENT, error));
}
+ get reconnectionAttempts() {
+ const me = this;
+
+ return me.transport.reconnectionAttempts;
+ }
+
+ set reconnectionAttempts(value) {
+ const me = this;
+
+ me.transport.reconnectionAttempts = value;
+ }
+
+ get reconnectionInterval() {
+ const me = this;
+
+ return me.transport.reconnectionInterval;
+ }
+
+ set reconnectionInterval(value) {
+ const me = this;
+
+ me.transport.reconnectionInterval = value;
+ }
/**
- *
+ * Connect transport
+ * @returns {Promise}
+ */
+ connect() {
+ const me = this;
+
+ return me.transport.connect();
+ }
+
+ /**
+ * Authorize transport
* @param accessToken
* @returns {Promise}
*/
authorize(accessToken) {
const me = this;
- return me.strategy.authenticate(accessToken);
+ me.reAuthorizationHandler = () => me.transport.authenticate(accessToken);
+
+ return me.transport.authenticate(accessToken);
}
/**
- *
+ * Send message via transport
* @param key
* @param parameters
* @param body
*/
send(key, parameters, body) {
const me = this;
- const sendData = API.build(me.strategy.type, key, parameters, body);
+ const isSubscription = ApiMap.isSubscription(key);
+ const isUnsubscription = ApiMap.isUnsubscription(key);
+ let externalSubscriptionId, internalSubscriptionId;
+
+ if (isSubscription) {
+ me.subscriptionMap.forEach((subscriptionArguments, subscriptionId) => {
+ if (subscriptionArguments.key === key &&
+ subscriptionArguments.parameters === parameters &&
+ subscriptionArguments.body === body) {
+ externalSubscriptionId = me._internalSubscriptionIdToExternal(subscriptionId);
+ internalSubscriptionId = subscriptionId;
+ parameters.timestamp = me.subscriptionLastTimestampMap.get(externalSubscriptionId);
+ }
+ });
+ } else if (isUnsubscription) {
+ externalSubscriptionId = parameters.subscriptionId;
+ parameters.subscriptionId = me.subscriptionIdsMap.get(externalSubscriptionId);
+ }
+
+ const sendData = API.build(me.transport.type, key, parameters, body);
- switch (me.strategy.type) {
+ switch (me.transport.type) {
case HTTP.TYPE:
sendData.endpoint = `${me.urlsMap.get(sendData.base)}${sendData.endpoint}`;
break;
@@ -97,13 +192,41 @@ class ApiStrategy extends EventEmitter {
break;
}
- return me.strategy.send(sendData)
- .then((response) => API.normalizeResponse(me.strategy.type, key, response))
+ function handleResponse(response) {
+ let normalizedResponse = API.normalizeResponse(me.transport.type, key, response);
+
+ if (isSubscription) {
+ let newExternalSubscriptionId;
+
+ if (internalSubscriptionId) {
+ me.subscriptionIdsMap.forEach((internalSubId, externalSubId) => {
+ if (internalSubscriptionId === internalSubId) {
+ newExternalSubscriptionId = externalSubId;
+ }
+ });
+ } else {
+ newExternalSubscriptionId = Utils.randomString();
+ }
+
+ me.subscriptionMap.set(normalizedResponse.subscriptionId, { key, parameters, body });
+ me.subscriptionIdsMap.set(newExternalSubscriptionId, normalizedResponse.subscriptionId);
+ normalizedResponse = { subscriptionId: newExternalSubscriptionId };
+ } else if (isUnsubscription) {
+ me.subscriptionMap.delete(parameters.subscriptionId);
+ me.subscriptionIdsMap.delete(externalSubscriptionId);
+ }
+
+ return normalizedResponse;
+ }
+
+ return me.transport.send(sendData)
+ .then(handleResponse)
.catch(error => {
if (error === Utils.TOKEN_EXPIRED_MARK && me.reconnectionHandler) {
return me.reconnectionHandler()
- .then(() => me.strategy.send(sendData))
- .then((response) => API.normalizeResponse(me.strategy.type, key, response));
+ .then(() => me.transport.send(sendData))
+ .then(handleResponse)
+ .catch((reconnectionError) => { throw reconnectionError });
} else {
throw error;
}
@@ -116,7 +239,52 @@ class ApiStrategy extends EventEmitter {
disconnect() {
const me = this;
- me.strategy.disconnect();
+ me.transport.disconnect();
+ }
+
+ /**
+ * Initialize all transport specific functionality
+ * @private
+ */
+ _initTransportSpecificFunctionality() {
+ const me = this;
+
+ switch (me.transport.type) {
+ case HTTP.TYPE:
+ me.transport.initPingParameters(`${me.urlsMap.get(API.MAIN_BASE)}/info`, HTTP.GET_METHOD);
+ break;
+ }
+ }
+
+ /**
+ *
+ * @param subscriptionId
+ * @returns {*}
+ * @private
+ */
+ _externalSubscriptionIdToInternal(subscriptionId) {
+ const me = this;
+
+ return me.subscriptionIdsMap.get(subscriptionId) || subscriptionId;
+ }
+
+ /**
+ *
+ * @param subscriptionId
+ * @returns {*}
+ * @private
+ */
+ _internalSubscriptionIdToExternal(subscriptionId){
+ const me = this;
+ let result = subscriptionId;
+
+ me.subscriptionIdsMap.forEach((internalSubId, externalSubId) => {
+ if (internalSubId === subscriptionId) {
+ result = externalSubId;
+ }
+ });
+
+ return result;
}
}
diff --git a/src/DeviceHive.js b/src/DeviceHive.js
index 6faf45c..75911b9 100644
--- a/src/DeviceHive.js
+++ b/src/DeviceHive.js
@@ -52,6 +52,9 @@ const InvalidCredentialsError = require('./error/InvalidCredentialsError');
*/
class DeviceHive extends EventEmitter {
+ static get MESSAGE_EVENT() { return APIStrategy.MESSAGE_EVENT; }
+ static get ERROR_EVENT() { return APIStrategy.ERROR_EVENT; }
+
/**
* @type {Object} - Returns DeviceHive models
*/
@@ -100,10 +103,10 @@ class DeviceHive extends EventEmitter {
* @param {string} [options.accessToken] - Access token
* @param {string} [options.refreshToken] - Refresh token
* @param {string} [options.login] - Login
- * @param {string} [options.password] - Paaword
+ * @param {string} [options.password] - Password
* @param {string} options.mainServiceURL - Main Service URL
* @param {string} [options.authServiceURL] - Auth Service URL (required only for http)
- * @param {string} [options.pluginServiceURL] - Alug inServi ceURL (required only for http)
+ * @param {string} [options.pluginServiceURL] - Plugin Service URL (required only for http)
*/
constructor({ mainServiceURL, authServiceURL, pluginServiceURL, accessToken, refreshToken, login, password, autoUpdateSession = true }) {
super();
@@ -130,17 +133,22 @@ class DeviceHive extends EventEmitter {
me.plugin = new PluginAPI({ strategy: me.strategy });
- me.strategy.on(`message`, message => me.emit(`message`, message));
- me.strategy.on(`error`, error => me.emit(`error`, error));
+ me.strategy.on(APIStrategy.MESSAGE_EVENT, message => me.emit(DeviceHive.MESSAGE_EVENT, message));
+ me.strategy.on(APIStrategy.ERROR_EVENT, error => me.emit(DeviceHive.ERROR_EVENT, error && error.message ? error.message : error));
+
+ me.on(DeviceHive.ERROR_EVENT, Utils.emptyFn);
}
/**
* Connect to the DeviceHive service
* @returns {Promise}
*/
- async connect({ accessToken, refreshToken, login, password } = {}) {
+ async connect({ accessToken, refreshToken, login, password, reconnectionAttempts, reconnectionInterval } = {}) {
const me = this;
+ me.strategy.reconnectionAttempts = reconnectionAttempts;
+ me.strategy.reconnectionInterval = reconnectionInterval;
+
if (!accessToken && !refreshToken && !(login && password)) {
accessToken = accessToken || me.accessToken;
refreshToken = refreshToken || me.refreshToken;
@@ -150,6 +158,8 @@ class DeviceHive extends EventEmitter {
if (accessToken || refreshToken || (login && password)) {
try {
+ await me.strategy.connect();
+
if (login && password) {
const { accessToken, refreshToken } = await me.token.login(login, password);
diff --git a/src/controllers/API.js b/src/controllers/API.js
index e810691..4c0ecf7 100644
--- a/src/controllers/API.js
+++ b/src/controllers/API.js
@@ -6,9 +6,6 @@ const ApiMap = require(`./transportResolvers/ApiMap`);
*/
class API {
- static get HTTP_API() { return ApiMap.HTTP_API; }
- static get WS_API() { return ApiMap.WS_API; }
-
static get MAIN_BASE() { return ApiMap.MAIN_BASE; }
static get AUTH_BASE() { return ApiMap.AUTH_BASE; }
static get PLUGIN_BASE() { return ApiMap.PLUGIN_BASE; }
diff --git a/src/controllers/ConfigurationAPI.js b/src/controllers/ConfigurationAPI.js
index 65f1b2f..16d90b0 100644
--- a/src/controllers/ConfigurationAPI.js
+++ b/src/controllers/ConfigurationAPI.js
@@ -22,7 +22,7 @@ class ConfigurationAPI extends API {
* @returns {Promise} count of configuration
*/
put(configuration) {
- return this.send(ApiMap.putConfiguration, configuration.toObject(), configuration.toObject()); // TODO
+ return this.send(ApiMap.putConfiguration, configuration.toObject(), configuration.toObject());
}
/**
diff --git a/src/controllers/transportResolvers/ApiMap.js b/src/controllers/transportResolvers/ApiMap.js
index 25bf7f5..63de371 100644
--- a/src/controllers/transportResolvers/ApiMap.js
+++ b/src/controllers/transportResolvers/ApiMap.js
@@ -95,6 +95,21 @@ class ApiMap {
static get AUTH_BASE() { return `auth`; }
static get PLUGIN_BASE() { return `plugin`; }
+ /**
+ *
+ * @param key
+ */
+ static isSubscription(key) {
+ return key === ApiMap.subscribeNotification || key === ApiMap.subscribeCommand;
+ }
+
+ /**
+ *
+ * @param key
+ */
+ static isUnsubscription(key) {
+ return key === ApiMap.unsubscribeNotification || key === ApiMap.unsubscribeCommand;
+ }
/**
*
@@ -190,7 +205,7 @@ apiMap.set(ApiMap.updateCommand, { http: { method: 'PUT', uri: '/device/{deviceI
apiMap.set(ApiMap.pollCommand, { http: { method: 'GET', uri: '/device/{deviceId}/command/poll', base: ApiMap.MAIN_BASE } });
apiMap.set(ApiMap.pollManyCommand, { http: { method: 'GET', uri: '/device/command/poll', base: ApiMap.MAIN_BASE } });
apiMap.set(ApiMap.waitCommand, { http: { method: 'GET', uri: '/device/{deviceId}/command/{commandId}/poll', base: ApiMap.MAIN_BASE } });
-apiMap.set(ApiMap.subscribeCommand, { http: { method: 'GET', uri: '/device/command/poll', base: ApiMap.MAIN_BASE, subscription: true }, ws: { action: 'command/subscribe', response: null } });
+apiMap.set(ApiMap.subscribeCommand, { http: { method: 'GET', uri: '/device/command/poll', base: ApiMap.MAIN_BASE, subscription: true }, ws: { action: 'command/subscribe', response: [`subscriptionId`] } });
apiMap.set(ApiMap.unsubscribeCommand, { http: { unsubscription: true }, ws: { action: 'command/unsubscribe', response: null } });
apiMap.set(ApiMap.listNotification, { http: { method: 'GET', uri: '/device/{deviceId}/notification', base: ApiMap.MAIN_BASE }, ws: { action: 'notification/list', response: { bodyKey: 'notifications' } } });
@@ -198,7 +213,7 @@ apiMap.set(ApiMap.getNotification, { http: { method: 'GET', uri: '/device/{devic
apiMap.set(ApiMap.insertNotification, { http: { method: 'POST', uri: '/device/{deviceId}/notification', base: ApiMap.MAIN_BASE }, ws: { action: 'notification/insert', bodyKey: 'notification', response: { bodyKey: 'notification' } } });
apiMap.set(ApiMap.pollNotification, { http: { method: 'GET', uri: '/device/{deviceId}/notification/poll', base: ApiMap.MAIN_BASE } });
apiMap.set(ApiMap.pollManyNotification, { http: { method: 'GET', uri: '/device/notification/poll', base: ApiMap.MAIN_BASE } });
-apiMap.set(ApiMap.subscribeNotification, { http: { method: 'GET', uri: '/device/notification/poll', base: ApiMap.MAIN_BASE, subscription: true }, ws: { action: 'notification/subscribe', response: null } });
+apiMap.set(ApiMap.subscribeNotification, { http: { method: 'GET', uri: '/device/notification/poll', base: ApiMap.MAIN_BASE, subscription: true }, ws: { action: 'notification/subscribe', response: [`subscriptionId`] } });
apiMap.set(ApiMap.unsubscribeNotification, { http: { unsubscription: true }, ws: { action: 'notification/unsubscribe', response: null } });
apiMap.set(ApiMap.listNetwork, { http: { method: 'GET', uri: '/network', base: ApiMap.MAIN_BASE }, ws: { action: 'network/list', response: { bodyKey: 'networks' } } });
diff --git a/src/controllers/transportResolvers/HttpApiResolver.js b/src/controllers/transportResolvers/HttpApiResolver.js
index 26c1213..35a3303 100644
--- a/src/controllers/transportResolvers/HttpApiResolver.js
+++ b/src/controllers/transportResolvers/HttpApiResolver.js
@@ -14,7 +14,6 @@ class HttpApiResolver {
* @returns {string}
*/
static buildUrl(base, parameters = {}) {
- // console.log(base, parameters);
const pathRegex = /[^{}]+(?=\})/g;
const pathParameterKeys = pathRegex.test(base) ? base.match(pathRegex) : [];
const pathParameters = {};
diff --git a/src/error/ReconnectionAttemptFailedError.js b/src/error/ReconnectionAttemptFailedError.js
new file mode 100644
index 0000000..f16c08e
--- /dev/null
+++ b/src/error/ReconnectionAttemptFailedError.js
@@ -0,0 +1,17 @@
+/**
+ * ReconnectionAttemptFailedError class
+ */
+class ReconnectionAttemptFailedError extends Error {
+
+ /**
+ * Creates new InvalidCredentialsError
+ */
+ constructor(attempt) {
+ super();
+
+ this.message = `Reconnection attempt number ${attempt} is failed`;
+ }
+}
+
+
+module.exports = ReconnectionAttemptFailedError;
\ No newline at end of file
diff --git a/src/transports/HTTP.js b/src/transports/HTTP.js
index cba6109..8bd2484 100644
--- a/src/transports/HTTP.js
+++ b/src/transports/HTTP.js
@@ -1,15 +1,20 @@
require('isomorphic-fetch');
const Transport = require(`./base/Transport`);
const Utils = require('../utils/Utils');
-
+const ReconnectionAttemptFailedError = require('../error/ReconnectionAttemptFailedError');
+const { URL } = require(`url`);
/**
- * Rest API
+ * HTTP Transport class
+ * @event open
+ * @event message
+ * @event error
+ * @event reconnected
*/
class HTTP extends Transport {
static get TYPE() { return `http`; }
-
+ static get GET_METHOD() { return `GET`; }
/**
* Creates HTTP
@@ -22,6 +27,22 @@ class HTTP extends Transport {
me.type = HTTP.TYPE;
me.token= ``;
me.subscriptionMap = new Map();
+ me.reconnectionIntervalHandler = null;
+ me.pingUrl = ``;
+ me.pingMethod = ``;
+ }
+
+ /**
+ * Connect HTTP transport
+ */
+ connect() {
+ const me = this;
+
+ return new Promise((resolve) => {
+ me._ping()
+ .then(resolve)
+ .catch(() => me._startReconnection());
+ });
}
/**
@@ -30,19 +51,29 @@ class HTTP extends Transport {
*/
authenticate(token) {
const me = this;
+
me.token = token;
+
return Promise.resolve();
}
/**
- * Rest API send method
+ * HTTP transport send method
+ * @param endpoint
+ * @param method
+ * @param body
+ * @param subscription
+ * @param unsubscription
+ * @param noAuth
+ * @param polling
+ * @returns {*}
*/
- send({ endpoint, method, body, subscription, unsubscription, noAuth }) {
+ send({ endpoint, method, body, subscription, unsubscription, noAuth, polling=false }) {
const me = this;
if (subscription === true) {
const subscriptionId = Utils.randomString();
- const longPollingHandler = me.initLongPolling(endpoint, method, body);
+ const longPollingHandler = me._initLongPolling(subscriptionId, endpoint, method, body);
longPollingHandler.poll();
@@ -57,42 +88,94 @@ class HTTP extends Transport {
longPollingHandler.stop();
me.subscriptionMap.delete(subscriptionId);
- return Promise.resolve({ status: `success` })
+ return Promise.resolve({ status: `success` });
} else {
- return Promise.resolve({ status: `No such subscription` })
+ return Promise.resolve({ status: `No such subscription` });
}
} else {
return fetch(endpoint, { headers: me._getHeaders(noAuth), method: method, body: JSON.stringify(body) })
.then(response => response.text())
- .then(responseText => {
- return responseText ? JSON.parse(responseText) : responseText
- });
+ .then(responseText => responseText ? JSON.parse(responseText) : responseText)
+ .catch(error => {
+ if (!polling) { throw error; }
+ else { return me._ping().catch(() => me._startReconnection()); }
+ })
}
}
/**
- *
+ * Disconnects HTTP transport
+ */
+ disconnect() {
+ const me = this;
+
+ me._stopAllPolling();
+
+ me.token= ``;
+ }
+
+ /**
+ * Initialize http sever ping parameters
+ * @param pingUrl
+ * @param pingMethod
+ */
+ initPingParameters(pingUrl, pingMethod) {
+ const me = this;
+
+ me.pingUrl = pingUrl;
+ me.pingMethod = pingMethod;
+ }
+
+ /**
+ * Ping server
+ * @returns {Promise}
+ * @private
+ */
+ _ping() {
+ const me = this;
+
+ return fetch(me.pingUrl, { headers: me._getHeaders(true), method: me.pingMethod });
+ }
+
+ /**
+ * Initialize polling functionality
+ * @param subscriptionId
* @param endpoint
* @param method
* @param body
* @returns {{poll: poll, stop: stop}}
*/
- initLongPolling(endpoint, method, body) {
+ _initLongPolling(subscriptionId, endpoint, method, body) {
const me = this;
let stopped = false;
+ const parsedEndpoint = new URL(endpoint);
/**
* Poll notifications
*/
function poll () {
- me.send({ endpoint, method, body })
+ me.send({ endpoint: parsedEndpoint.href, method, body, polling: true })
.then((messageList) => {
if (!stopped) {
- messageList.forEach((message) => me.emit(`message`, message));
- poll(endpoint, method, body)
+ if (messageList && messageList.length) {
+ let latestTimestamp;
+
+ messageList.forEach((message) => {
+ message.subscriptionId = subscriptionId;
+ me.emit(Transport.MESSAGE_EVENT, message);
+
+ latestTimestamp = Utils.getLatestTimestamp(message.timestamp, latestTimestamp);
+ });
+
+ if (latestTimestamp) {
+ parsedEndpoint.searchParams.set(`timestamp`, latestTimestamp);
+ }
+ }
+
+ poll();
}
})
- .catch((error) => console.warn(error));
+ .catch((error) => me.emit(Transport.ERROR_EVENT, error));
}
/**
@@ -106,7 +189,54 @@ class HTTP extends Transport {
}
/**
- *
+ * Reconnection routine
+ * @private
+ */
+ _startReconnection() {
+ const me = this;
+ let successfulPinged = false;
+ let reconnectionCounter = 0;
+
+ me._stopAllPolling();
+
+ me.reconnectionIntervalHandler = setInterval(() => {
+ me._ping()
+ .then(() => {
+ if (!successfulPinged) {
+ successfulPinged = true;
+ clearInterval(me.reconnectionIntervalHandler);
+
+ me.emit(Transport.RECONNECTED_EVENT);
+ }
+ })
+ .catch(() => {
+ if (!successfulPinged) {
+ reconnectionCounter++;
+
+ if (reconnectionCounter === me.reconnectionAttempts) {
+ clearInterval(me.reconnectionIntervalHandler);
+ }
+
+ me.emit(Transport.ERROR_EVENT, new ReconnectionAttemptFailedError(reconnectionCounter));
+ }
+ });
+ }, me.reconnectionInterval);
+ }
+
+ /**
+ * Stop all polling handlers
+ * @private
+ */
+ _stopAllPolling() {
+ const me = this;
+
+ me.subscriptionMap.forEach((pollingHandler) => pollingHandler.stop());
+ me.subscriptionMap.clear();
+ }
+
+ /**
+ * Returns request headers
+ * @param noAuth
* @returns {Object}
* @private
*/
@@ -123,15 +253,6 @@ class HTTP extends Transport {
return headers;
}
-
- /**
- * Disconnects HTTP transport
- */
- disconnect() {
- const me = this;
-
- me.token= ``;
- }
}
diff --git a/src/transports/WS.js b/src/transports/WS.js
index 4c6b792..31d3032 100644
--- a/src/transports/WS.js
+++ b/src/transports/WS.js
@@ -2,99 +2,93 @@ const Transport = require(`./base/Transport`);
const Utils = require('../utils/Utils');
const WebSocket = require('universal-websocket-client');
const WebSocketError = require('../error/WebSocketError');
+const ReconnectionAttemptFailedError = require('../error/ReconnectionAttemptFailedError');
/**
- * WebSocket Transport
+ * WebSocket Transport class
+ * @event open
+ * @event message
+ * @event error
+ * @event reconnected
*/
class WS extends Transport {
static get TYPE() { return `ws`; }
+ static get OPEN_EVENT() { return `open`; }
+ static get MESSAGE_EVENT() { return `message`; }
+ static get ERROR_EVENT() { return `error`; }
+ static get CLOSE_EVENT() { return `close`; }
+
+ static get ERROR_CONNECTION_RESET_CODE() { return `ECONNRESET`; }
+ static get ERROR_CONNECTION_REFUSED_CODE() { return `ECONNREFUSED`; }
+
/**
* Creates WS
- * @param {String} mainServiceURL - WebSocket URL
+ * @param {String} url - WebSocket URL
*/
- constructor({ mainServiceURL }) {
+ constructor({ url } = {}) {
super();
- this.type = WS.TYPE;
- this.isOpend = false;
- this.socket = new WebSocket(mainServiceURL);
-
- this.socket.addEventListener('message', event => {
- try {
- const messageData = JSON.parse(event.data);
-
- if (messageData.requestId) {
- this.emit(messageData.requestId, messageData);
- } else {
- this.emit('message', messageData);
- }
- } catch (error) {
- console.warn(error);
- }
- });
-
- this.socket.addEventListener('error', error => {
- this.emit('error', new WebSocketError(error));
- });
+ const me = this;
- this.socket.addEventListener('open', () => this.isOpend = true);
+ me.type = WS.TYPE;
+ me.url = url;
+ me.isOpend = false;
+ me.isReconnecting = false;
+ me.reconnectionCounter = 0;
}
/**
- * Gettting socket according to if it opened
- * @returns {Promise} when socket opened
+ * Connect WebSocket transport
+ * @returns {Promise}
*/
- _getSocket() {
- return new Promise(resolve => {
- if (this.isOpend === true) {
- resolve(this.socket);
- } else {
- this.socket.addEventListener('open', () => {
- this.isOpend = true;
- resolve(this.socket);
- });
- }
+ connect() {
+ const me = this;
+
+ return new Promise((resolve) => {
+ me.once(Transport.OPEN_EVENT, resolve);
+ me._open();
});
}
/**
- * TODO
* Authenticate transport
* @param {String} token - Auth token
+ * @returns {*}
*/
authenticate(token) {
- this.send({
- action: `authenticate`,
- token: token
- });
+ const me = this;
+
+ return me.send({ action: `authenticate`, token: token });
}
/**
* WebSocket API send method
*/
send(params) {
- return this._getSocket()
+ const me = this;
+
+ return me._getSocket()
.then(() => {
const { requestId = Utils.randomString() } = params;
params.requestId = requestId;
return new Promise((resolve) => {
- this.socket.send(JSON.stringify(params));
+ me.socket.send(JSON.stringify(params));
const listener = messageData => {
if (messageData.requestId === requestId) {
- this.removeListener(params.requestId, listener);
+ me.removeListener(params.requestId, listener);
resolve(messageData);
}
};
- this.addListener(params.requestId, listener);
+ me.addListener(params.requestId, listener);
});
});
}
@@ -107,6 +101,102 @@ class WS extends Transport {
me.socket.close();
}
+
+ /**
+ * Opens WS connection
+ * @private
+ */
+ _open() {
+ const me = this;
+
+ me.socket = new WebSocket(me.url);
+
+ me.socket.addEventListener(WS.MESSAGE_EVENT, event => {
+ try {
+ const messageData = JSON.parse(event.data);
+
+ if (messageData.requestId) {
+ me.emit(messageData.requestId, messageData);
+ } else {
+ me.emit(Transport.MESSAGE_EVENT, messageData);
+ }
+ } catch (error) {
+ console.warn(error);
+ }
+ });
+
+ me.socket.addEventListener(WS.ERROR_EVENT, (error) => {
+ me.isReconnecting = false;
+
+ switch (error.code){
+ case WS.ERROR_CONNECTION_RESET_CODE:
+ case WS.ERROR_CONNECTION_REFUSED_CODE:
+ me._reconnect();
+ break;
+ default:
+ me.emit(Transport.ERROR_EVENT, new WebSocketError(error));
+ break;
+ }
+ });
+
+ me.socket.addEventListener(WS.OPEN_EVENT, () => {
+ me.isOpend = true;
+ me.reconnectionCounter = 0;
+
+ if (me.isReconnecting === true) {
+ me.isReconnecting = false;
+
+ me.emit(Transport.RECONNECTED_EVENT);
+ } else {
+ me.emit(Transport.OPEN_EVENT);
+ }
+ });
+
+ me.socket.addEventListener(WS.CLOSE_EVENT, () => me.isOpend = false);
+ }
+
+ /**
+ * Gettting socket according to if it opened
+ * @returns {Promise} when socket opened
+ */
+ _getSocket() {
+ const me = this;
+
+ return new Promise((resolve, reject) => {
+ if (me.isOpend === true) {
+ resolve(me.socket);
+ } else if (me.isReconnecting === true) {
+ reject(new Error(`WebSocket is reconnecting`));
+ } else {
+ me.socket.addEventListener(WS.OPEN_EVENT, () => {
+ me.isOpend = true;
+ resolve(me.socket);
+ });
+ }
+ });
+ }
+
+ /**
+ * Reconnection routine
+ * @private
+ */
+ _reconnect() {
+ const me = this;
+
+ if (me.reconnectionCounter) {
+ me.emit(Transport.ERROR_EVENT, new ReconnectionAttemptFailedError(me.reconnectionCounter));
+ }
+
+ me.isOpend = false;
+ me.isReconnecting = true;
+ me.socket.removeAllListeners();
+
+ if (me.reconnectionCounter !== me.reconnectionAttempts) {
+ setTimeout(() => me._open(), me.reconnectionInterval);
+ }
+
+ me.reconnectionCounter++;
+ }
}
diff --git a/src/transports/base/Transport.js b/src/transports/base/Transport.js
index 1e06051..28aa3f6 100644
--- a/src/transports/base/Transport.js
+++ b/src/transports/base/Transport.js
@@ -1,11 +1,47 @@
const EventEmitter = require('events');
+const Utils = require(`../../utils/Utils`);
/**
+ * Base Transport class
+ * @event open
* @event message
+ * @event error
+ * @event reconnected
*/
class Transport extends EventEmitter {
+ static get OPEN_EVENT() { return `open`; }
+ static get MESSAGE_EVENT() { return `message`; }
+ static get ERROR_EVENT() { return `error`; }
+ static get RECONNECTED_EVENT() { return `reconnected`; }
+
+ static get INFINITY_RECONNECTION() { return -1; }
+ static get RECONNECTION_TIMEOUT_MS() { return 5000; }
+
+ get reconnectionAttempts() {
+ return this._reconnectionAttempts;
+ }
+
+ set reconnectionAttempts(value) {
+ this._reconnectionAttempts = Utils.isDefined(value) ? value : Transport.INFINITY_RECONNECTION;
+ }
+
+ get reconnectionInterval() {
+ return this._reconnectionInterval;
+ }
+
+ set reconnectionInterval(value) {
+ this._reconnectionInterval = Utils.isDefined(value) ? value : Transport.RECONNECTION_TIMEOUT_MS;
+ }
+
+ /**
+ * Connect transport
+ */
+ connect() {
+ console.warn(`Method "connect" should be implemented in nested classes`);
+ }
+
/**
* Authenticate transport with token
* @param token
diff --git a/src/utils/Utils.js b/src/utils/Utils.js
index 102e21c..9c068a1 100644
--- a/src/utils/Utils.js
+++ b/src/utils/Utils.js
@@ -47,6 +47,33 @@ class Utils {
deviceTypeIds: tokenPayload.dt
});
}
+
+ /**
+ * Checks for value is not undefined and not null
+ * @param value
+ * @returns {boolean}
+ */
+ static isDefined(value) {
+ return !(typeof value === 'undefined' || value === null);
+ }
+
+ /**
+ * Empty function
+ */
+ static emptyFn() {}
+
+ /**
+ * Returns latest timestamp
+ * @param ts1
+ * @param ts2
+ * @returns {*}
+ */
+ static getLatestTimestamp(ts1, ts2) {
+ if (!ts1) { return ts2; }
+ else if (!ts2) { return ts1; }
+
+ return new Date(ts1).getTime() > new Date(ts2).getTime() ? ts1 : ts2;
+ }
}
diff --git a/test/unit/controllers/ConfigurationAPI.http.spec.js b/test/unit/controllers/ConfigurationAPI.http.spec.js
index e99c46d..2ec9256 100644
--- a/test/unit/controllers/ConfigurationAPI.http.spec.js
+++ b/test/unit/controllers/ConfigurationAPI.http.spec.js
@@ -3,15 +3,13 @@ const assert = chai.assert;
const http = require('http');
const url = require('url');
const querystring = require('querystring');
-
-const EventEmitter = require('events');
-const events = new EventEmitter();
-
const DeviceHive = require('../../../index');
+const EventEmitter = require('events');
-let authService, mainService;
describe('ConfigurationAPI HTTP', () => {
+ const events = new EventEmitter();
+ let authService, mainService, deviceHive;
before(done => {
// authService
@@ -25,24 +23,29 @@ describe('ConfigurationAPI HTTP', () => {
// mainService
mainService = http.createServer((request, res) => {
-
let body = [];
- request.on('error', (err) => {
- console.error(err);
- }).on('data', (chunk) => {
- body.push(chunk);
- }).on('end', () => {
- body = Buffer.concat(body).toString();
- parsedURL = url.parse(request.url);
- events.emit('request', {
- method: request.method,
- url: {
- ...parsedURL,
- parameters: querystring.parse(parsedURL.query)
- },
- body: body ? JSON.parse(body) : null
+
+ request
+ .on('error', done)
+ .on('data', (chunk) => body.push(chunk))
+ .on('end', () => {
+ let parsedURL = url.parse(request.url);
+
+ body = Buffer.concat(body).toString();
+
+ events.emit('request', {
+ method: request.method,
+ url: {
+ ...parsedURL,
+ parameters: querystring.parse(parsedURL.query)
+ },
+ body: body ? JSON.parse(body) : null
+ });
});
- });
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
@@ -55,8 +58,9 @@ describe('ConfigurationAPI HTTP', () => {
});
deviceHive.connect()
- .then(() => done());
- })
+ .then(() => done())
+ .catch(done);
+ });
after(() => {
authService.close();
diff --git a/test/unit/controllers/ConfigurationAPI.ws.spec.js b/test/unit/controllers/ConfigurationAPI.ws.spec.js
index 072afd1..7777331 100644
--- a/test/unit/controllers/ConfigurationAPI.ws.spec.js
+++ b/test/unit/controllers/ConfigurationAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('ConfigurationAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', (socket) => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('ConfigurationAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/DeviceAPI.http.spec.js b/test/unit/controllers/DeviceAPI.http.spec.js
index 3ab1849..a6eca90 100644
--- a/test/unit/controllers/DeviceAPI.http.spec.js
+++ b/test/unit/controllers/DeviceAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('DeviceAPI', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/DeviceAPI.ws.spec.js b/test/unit/controllers/DeviceAPI.ws.spec.js
index 33cff90..b9bae5e 100644
--- a/test/unit/controllers/DeviceAPI.ws.spec.js
+++ b/test/unit/controllers/DeviceAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('DeviceAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('DeviceAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/DeviceCommandAPI.http.spec.js b/test/unit/controllers/DeviceCommandAPI.http.spec.js
index 34253cd..83bf6e8 100644
--- a/test/unit/controllers/DeviceCommandAPI.http.spec.js
+++ b/test/unit/controllers/DeviceCommandAPI.http.spec.js
@@ -44,6 +44,10 @@ describe('DeviceCommandAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/DeviceCommandAPI.ws.spec.js b/test/unit/controllers/DeviceCommandAPI.ws.spec.js
index a690828..09007d2 100644
--- a/test/unit/controllers/DeviceCommandAPI.ws.spec.js
+++ b/test/unit/controllers/DeviceCommandAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('DeviceCommandAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('DeviceCommandAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
@@ -57,7 +56,8 @@ describe('DeviceCommandAPI WS', () => {
const expected = {
deviceId: 1,
commandId: 1
- }
+ };
+
deviceHive.command.get(expected.deviceId, expected.commandId);
// sent data
@@ -179,7 +179,7 @@ describe('DeviceCommandAPI WS', () => {
timestamp: '2018-02-09T10:09:03.033Z',
returnUpdatedCommands: 'returnUpdatedCommands',
waitTimeout: '10',
- limit: '1',
+ limit: '1'
};
// Configurating Command List query
@@ -197,20 +197,14 @@ describe('DeviceCommandAPI WS', () => {
});
it('DeviceCommandAPI.unsubscribe()', done => {
-
const expected = {
subscriptionId: '10'
};
- // Configurating Command List query
- const commandPollQuery = new DeviceHive.models.query.CommandPollQuery(expected);
-
deviceHive.command.unsubscribe(expected.subscriptionId);
- // sent data
events.once('request', data => {
assert.equal(data.action, 'command/unsubscribe', 'Not correct action');
- assert.include(data, expected, 'Not correct data');
done();
});
diff --git a/test/unit/controllers/DeviceNotificationAPI.http.spec.js b/test/unit/controllers/DeviceNotificationAPI.http.spec.js
index 260cc1a..30b0467 100644
--- a/test/unit/controllers/DeviceNotificationAPI.http.spec.js
+++ b/test/unit/controllers/DeviceNotificationAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('NotificationAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/DeviceNotificationAPI.ws.spec.js b/test/unit/controllers/DeviceNotificationAPI.ws.spec.js
index fc3facd..e77e17b 100644
--- a/test/unit/controllers/DeviceNotificationAPI.ws.spec.js
+++ b/test/unit/controllers/DeviceNotificationAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('NotificationAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('NotificationAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
@@ -147,20 +146,14 @@ describe('NotificationAPI WS', () => {
});
it('NotificationAPI.unsubscribe()', done => {
-
const expected = {
subscriptionId: '10'
};
- // Configurating Notification List query
- const notificationPollQuery = new DeviceHive.models.query.NotificationPollQuery(expected);
-
deviceHive.notification.unsubscribe(expected.subscriptionId);
- // sent data
events.once('request', data => {
assert.equal(data.action, 'notification/unsubscribe', 'Not correct action');
- assert.include(data, expected, 'Not correct data');
done();
});
diff --git a/test/unit/controllers/DeviceTypeAPI.http.spec.js b/test/unit/controllers/DeviceTypeAPI.http.spec.js
index aec2f66..0fb4032 100644
--- a/test/unit/controllers/DeviceTypeAPI.http.spec.js
+++ b/test/unit/controllers/DeviceTypeAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('DeviceTypeAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/DeviceTypeAPI.ws.spec.js b/test/unit/controllers/DeviceTypeAPI.ws.spec.js
index 7378a26..e91e4a5 100644
--- a/test/unit/controllers/DeviceTypeAPI.ws.spec.js
+++ b/test/unit/controllers/DeviceTypeAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('DeviceTypeAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('DeviceTypeAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/NetworkAPI.http.spec.js b/test/unit/controllers/NetworkAPI.http.spec.js
index b96e9b8..863636a 100644
--- a/test/unit/controllers/NetworkAPI.http.spec.js
+++ b/test/unit/controllers/NetworkAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('NetworkAPI', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/NetworkAPI.ws.spec.js b/test/unit/controllers/NetworkAPI.ws.spec.js
index abb35b1..87d9c05 100644
--- a/test/unit/controllers/NetworkAPI.ws.spec.js
+++ b/test/unit/controllers/NetworkAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('NetworkAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('NetworkAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/PluginAPI.http.spec.js b/test/unit/controllers/PluginAPI.http.spec.js
index fda4d71..ca37feb 100644
--- a/test/unit/controllers/PluginAPI.http.spec.js
+++ b/test/unit/controllers/PluginAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('PluginAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// pluginService
diff --git a/test/unit/controllers/ServerInfoAPI.http.spec.js b/test/unit/controllers/ServerInfoAPI.http.spec.js
index 0f9a048..29e645a 100644
--- a/test/unit/controllers/ServerInfoAPI.http.spec.js
+++ b/test/unit/controllers/ServerInfoAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('InfoAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/ServerInfoAPI.ws.spec.js b/test/unit/controllers/ServerInfoAPI.ws.spec.js
index d41e76f..5aa1103 100644
--- a/test/unit/controllers/ServerInfoAPI.ws.spec.js
+++ b/test/unit/controllers/ServerInfoAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('InfoAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('InfoAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/TokenAPI.http.spec.js b/test/unit/controllers/TokenAPI.http.spec.js
index e75fb20..ae980bb 100644
--- a/test/unit/controllers/TokenAPI.http.spec.js
+++ b/test/unit/controllers/TokenAPI.http.spec.js
@@ -14,24 +14,40 @@ let authService, mainService, deviceHive;
describe('TokenAPI HTTP', () => {
before(done => {
- // authService
+ // mainService
+ mainService = http.createServer((request, res) => {
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
+ }).listen(3390);
+
authService = http.createServer((request, res) => {
+ let body = [];
+
if (request.url === '/token' && request.method === 'POST') {
const cred = {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
res.write(JSON.stringify(cred));
+ res.end();
+ } else {
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}
- let body = [];
request.on('error', (err) => {
console.error(err);
}).on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
+ let parsedURL = url.parse(request.url);
+
body = Buffer.concat(body).toString();
- parsedURL = url.parse(request.url);
+
events.emit('request', {
method: request.method,
url: {
@@ -41,9 +57,6 @@ describe('TokenAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
-
- res.end();
-
}).listen(3391);
// Configaratuion DeviceHive
@@ -57,9 +70,10 @@ describe('TokenAPI HTTP', () => {
deviceHive.connect()
.then(() => done());
- })
+ });
after(() => {
+ mainService.close();
authService.close();
});
diff --git a/test/unit/controllers/TokenAPI.ws.spec.js b/test/unit/controllers/TokenAPI.ws.spec.js
index a1a455a..f249e92 100644
--- a/test/unit/controllers/TokenAPI.ws.spec.js
+++ b/test/unit/controllers/TokenAPI.ws.spec.js
@@ -16,8 +16,8 @@ describe('TokenAPI WS', () => {
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +26,12 @@ describe('TokenAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
}
events.emit('request', message);
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});
diff --git a/test/unit/controllers/UserAPI.http.spec.js b/test/unit/controllers/UserAPI.http.spec.js
index a69244a..73ef3d1 100644
--- a/test/unit/controllers/UserAPI.http.spec.js
+++ b/test/unit/controllers/UserAPI.http.spec.js
@@ -43,6 +43,10 @@ describe('UserAPI HTTP', () => {
body: body ? JSON.parse(body) : null
});
});
+
+ res.writeHead(200, {'Content-Type': 'application/json'});
+ res.write(JSON.stringify({ message: 'Mock server response'}));
+ res.end();
}).listen(3390);
// Configaratuion DeviceHive
diff --git a/test/unit/controllers/UserAPI.ws.spec.js b/test/unit/controllers/UserAPI.ws.spec.js
index 0b33f0b..10fab53 100644
--- a/test/unit/controllers/UserAPI.ws.spec.js
+++ b/test/unit/controllers/UserAPI.ws.spec.js
@@ -12,12 +12,10 @@ let mainService, deviceHive;
describe('NetworkAPI WS', () => {
before(done => {
- // WS SERVER
-
mainService = new ws.Server({ port: 4390 });
- mainService.on('connection', ws => {
- ws.on('message', data => {
+ mainService.on('connection', socket => {
+ socket.on('message', data => {
const message = JSON.parse(data);
if (message.action === 'token') {
const cred = {
@@ -26,13 +24,12 @@ describe('NetworkAPI WS', () => {
accessToken: 'eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'eyJhbGciOiJIUzI1NiJ8'
};
- ws.send(JSON.stringify(cred));
+ socket.send(JSON.stringify(cred));
} else {
events.emit('request', message);
}
- ws.send('{}');
-
+ socket.send(JSON.stringify({ requestId: message.requestId }));
});
});