diff --git a/.babelrc b/.babelrc deleted file mode 100644 index afaefc15..00000000 --- a/.babelrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "presets": [ - ["latest", { - "es2015": { - "modules": false - } - }] - ], - "plugins": [ - "external-helpers" - ] -} diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 0dbc21fb..00000000 --- a/.flowconfig +++ /dev/null @@ -1,14 +0,0 @@ -[ignore] -.*/node_modules/.* -.*/dist/.* -.*/build/.* - -[include] -./src/ -./tests-lib/ -./test/ - -[libs] -./declarations/ - -[options] diff --git a/YdbClient/test.html b/YdbClient/test.html deleted file mode 100644 index cd578f12..00000000 --- a/YdbClient/test.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/Util/NamedEventHandler.js b/lib/NamedEventHandler.js similarity index 100% rename from src/Util/NamedEventHandler.js rename to lib/NamedEventHandler.js diff --git a/src/Util/Tree.js b/lib/Tree.js similarity index 100% rename from src/Util/Tree.js rename to lib/Tree.js diff --git a/YdbClient/decoding.js b/lib/decoding.js similarity index 100% rename from YdbClient/decoding.js rename to lib/decoding.js diff --git a/YdbClient/encoding.js b/lib/encoding.js similarity index 100% rename from YdbClient/encoding.js rename to lib/encoding.js diff --git a/YdbClient/encoding.test.js b/lib/encoding.test.js similarity index 100% rename from YdbClient/encoding.test.js rename to lib/encoding.test.js diff --git a/YdbClient/globals.js b/lib/globals.js similarity index 100% rename from YdbClient/globals.js rename to lib/globals.js diff --git a/YdbClient/idb.js b/lib/idb.js similarity index 100% rename from YdbClient/idb.js rename to lib/idb.js diff --git a/YdbClient/idb.test.js b/lib/idb.test.js similarity index 100% rename from YdbClient/idb.test.js rename to lib/idb.test.js diff --git a/YdbClient/logging.js b/lib/logging.js similarity index 100% rename from YdbClient/logging.js rename to lib/logging.js diff --git a/src/Util/mutualExclude.js b/lib/mutualExclude.js similarity index 100% rename from src/Util/mutualExclude.js rename to lib/mutualExclude.js diff --git a/src/Util/fromCodePoint.js b/lib/random.js similarity index 100% rename from src/Util/fromCodePoint.js rename to lib/random.js diff --git a/src/Util/simpleDiff.js b/lib/simpleDiff.js similarity index 96% rename from src/Util/simpleDiff.js rename to lib/simpleDiff.js index d5154eb8..1bc8e344 100644 --- a/src/Util/simpleDiff.js +++ b/lib/simpleDiff.js @@ -12,7 +12,7 @@ * * @typedef {Object} SimpleDiff * @property {Number} pos The index where changes were applied - * @property {Number} delete The number of characters to delete starting + * @property {Number} remove The number of characters to delete starting * at `index`. * @property {String} insert The new text to insert at `index` after applying * `delete` diff --git a/YdbClient/test.js b/lib/test.js similarity index 68% rename from YdbClient/test.js rename to lib/test.js index ecbf023c..f19a947b 100644 --- a/YdbClient/test.js +++ b/lib/test.js @@ -1,4 +1,5 @@ import * as logging from './logging.js' +import simpleDiff from './simpleDiff.js' export const run = async (name, f) => { console.log(`%cStart:%c ${name}`, 'color:blue;', '') @@ -23,3 +24,10 @@ export const compareArrays = (as, bs) => { } return true } + +export const compareStrings = (a, b) => { + if (a !== b) { + const diff = simpleDiff(a, b) + logging.print(`%c${a.slice(0, diff.pos)}%c${a.slice(diff.pos, diff.remove)}%c${diff.insert}%c${a.slice(diff.pos + diff.remove)}`, 'color:grey', 'color:red', 'color:green', 'color:grey') + } +} diff --git a/package-lock.json b/package-lock.json index c846ae46..03cb332c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "dev": true, "requires": { - "mime-types": "2.1.15", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, @@ -46,7 +46,7 @@ "dev": true, "optional": true, "requires": { - "acorn": "2.7.0" + "acorn": "^2.1.0" }, "dependencies": { "acorn": { @@ -64,7 +64,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -81,10 +81,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -99,9 +99,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "ansi-escapes": { @@ -128,8 +128,8 @@ "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" + "arrify": "^1.0.0", + "micromatch": "^2.1.5" } }, "apache-crypt": { @@ -138,7 +138,7 @@ "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=", "dev": true, "requires": { - "unix-crypt-td-js": "1.0.0" + "unix-crypt-td-js": "^1.0.0" } }, "apache-md5": { @@ -153,7 +153,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -162,7 +162,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.0.3" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -189,8 +189,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "array-union": { @@ -199,7 +199,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -251,11 +251,6 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -283,21 +278,21 @@ "integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", "dev": true, "requires": { - "babel-core": "6.25.0", - "babel-polyfill": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "chokidar": "1.7.0", - "commander": "2.10.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.0.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.6", - "v8flags": "2.1.1" + "babel-core": "^6.24.1", + "babel-polyfill": "^6.23.0", + "babel-register": "^6.24.1", + "babel-runtime": "^6.22.0", + "chokidar": "^1.6.1", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.0.0", + "lodash": "^4.2.0", + "output-file-sync": "^1.1.0", + "path-is-absolute": "^1.0.0", + "slash": "^1.0.0", + "source-map": "^0.5.0", + "v8flags": "^2.0.10" } }, "babel-code-frame": { @@ -306,9 +301,9 @@ "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" } }, "babel-core": { @@ -317,25 +312,25 @@ "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", "dev": true, "requires": { - "babel-code-frame": "6.22.0", - "babel-generator": "6.25.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "convert-source-map": "1.5.0", - "debug": "2.6.8", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.6" + "babel-code-frame": "^6.22.0", + "babel-generator": "^6.25.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.25.0", + "babel-traverse": "^6.25.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "convert-source-map": "^1.1.0", + "debug": "^2.1.1", + "json5": "^0.5.0", + "lodash": "^4.2.0", + "minimatch": "^3.0.2", + "path-is-absolute": "^1.0.0", + "private": "^0.1.6", + "slash": "^1.0.0", + "source-map": "^0.5.0" } }, "babel-generator": { @@ -344,14 +339,14 @@ "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.25.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -360,9 +355,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -371,10 +366,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -383,10 +378,10 @@ "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" } }, "babel-helper-explode-assignable-expression": { @@ -395,9 +390,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -406,11 +401,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -419,8 +414,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -429,8 +424,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -439,8 +434,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -449,9 +444,9 @@ "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" } }, "babel-helper-remap-async-to-generator": { @@ -460,11 +455,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -473,12 +468,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -487,8 +482,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-messages": { @@ -497,7 +492,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -506,7 +501,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-external-helpers": { @@ -515,7 +510,7 @@ "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { @@ -542,9 +537,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.23.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -553,7 +548,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -562,7 +557,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -571,11 +566,11 @@ "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1", + "lodash": "^4.2.0" } }, "babel-plugin-transform-es2015-classes": { @@ -584,15 +579,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.24.1", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -601,8 +596,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -611,7 +606,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -620,8 +615,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -630,7 +625,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -639,9 +634,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -650,7 +645,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -659,9 +654,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -670,10 +665,10 @@ "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-types": "6.25.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -682,9 +677,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -693,9 +688,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -704,8 +699,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.23.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -714,12 +709,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -728,8 +723,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -738,7 +733,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -747,9 +742,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -758,7 +753,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -767,7 +762,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -776,9 +771,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -787,9 +782,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.23.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { @@ -807,7 +802,7 @@ "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", "dev": true, "requires": { - "babel-runtime": "6.23.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-strict-mode": { @@ -816,8 +811,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -826,9 +821,9 @@ "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.22.0", + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" } }, "babel-preset-es2015": { @@ -837,30 +832,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.24.1", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.24.1" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-es2016": { @@ -869,7 +864,7 @@ "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", "dev": true, "requires": { - "babel-plugin-transform-exponentiation-operator": "6.24.1" + "babel-plugin-transform-exponentiation-operator": "^6.24.1" } }, "babel-preset-es2017": { @@ -878,8 +873,8 @@ "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.24.1" } }, "babel-preset-latest": { @@ -888,9 +883,9 @@ "integrity": "sha1-Z33gaRVKdIXC0lxXfAL2JLhbheg=", "dev": true, "requires": { - "babel-preset-es2015": "6.24.1", - "babel-preset-es2016": "6.24.1", - "babel-preset-es2017": "6.24.1" + "babel-preset-es2015": "^6.24.1", + "babel-preset-es2016": "^6.24.1", + "babel-preset-es2017": "^6.24.1" } }, "babel-register": { @@ -899,13 +894,13 @@ "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", "dev": true, "requires": { - "babel-core": "6.25.0", - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.15" + "babel-core": "^6.24.1", + "babel-runtime": "^6.22.0", + "core-js": "^2.4.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.2" } }, "babel-runtime": { @@ -914,8 +909,8 @@ "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" } }, "babel-template": { @@ -924,11 +919,11 @@ "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "lodash": "4.17.4" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.25.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "lodash": "^4.2.0" } }, "babel-traverse": { @@ -937,15 +932,15 @@ "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", "dev": true, "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.22.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.25.0", + "babylon": "^6.17.2", + "debug": "^2.2.0", + "globals": "^9.0.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" } }, "babel-types": { @@ -954,10 +949,10 @@ "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.22.0", + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^1.0.1" } }, "babylon": { @@ -991,7 +986,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "bcryptjs": { @@ -1019,7 +1014,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -1028,7 +1023,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1038,9 +1033,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "browser-resolve": { @@ -1078,7 +1073,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -1099,8 +1094,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -1124,8 +1119,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" }, "dependencies": { "lazy-cache": { @@ -1142,11 +1137,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "chance": { @@ -1167,22 +1162,22 @@ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, "chokidar": { @@ -1191,15 +1186,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "circular-json": { @@ -1214,7 +1209,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -1229,8 +1224,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -1258,7 +1253,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-logger": { @@ -1279,7 +1274,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1288,7 +1283,7 @@ "integrity": "sha512-q/r9trjmuikWDRJNTBHAVnWhuU6w+z80KgBq7j9YDclik5E7X4xi0KnlZBNFA1zOQ+SH/vHMWd2mC9QTOz7GpA==", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } }, "concat-map": { @@ -1303,10 +1298,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "concurrently": { @@ -1317,12 +1312,12 @@ "requires": { "chalk": "0.5.1", "commander": "2.6.0", - "date-fns": "1.28.5", - "lodash": "4.17.4", + "date-fns": "^1.23.0", + "lodash": "^4.5.1", "rx": "2.3.24", - "spawn-command": "0.0.2-1", - "supports-color": "3.2.3", - "tree-kill": "1.1.0" + "spawn-command": "^0.0.2-1", + "supports-color": "^3.2.3", + "tree-kill": "^1.1.0" }, "dependencies": { "ansi-regex": { @@ -1343,11 +1338,11 @@ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" }, "dependencies": { "supports-color": { @@ -1370,7 +1365,7 @@ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.0" } }, "strip-ansi": { @@ -1379,7 +1374,7 @@ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.1" } }, "supports-color": { @@ -1388,7 +1383,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -1399,9 +1394,9 @@ "integrity": "sha1-bTDXpjx/FwhXprOqazY9lz3KWI4=", "dev": true, "requires": { - "debug": "2.2.0", + "debug": "~2.2.0", "finalhandler": "0.5.1", - "parseurl": "1.3.1", + "parseurl": "~1.3.1", "utils-merge": "1.0.0" }, "dependencies": { @@ -1452,9 +1447,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.2.14" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -1464,7 +1459,7 @@ "dev": true, "optional": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1474,7 +1469,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -1485,10 +1480,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-what": { @@ -1510,7 +1505,7 @@ "dev": true, "optional": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "currently-unhandled": { @@ -1519,7 +1514,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cutest": { @@ -1528,9 +1523,9 @@ "integrity": "sha512-bRyVi9vWknRWw+wIx0hhsCJKnsvRsB3Jmssl0zlFrKyqrYeBPpMKoZItpl7nziZi9ZqrgYoGo21fWKvnJIo8Dw==", "dev": true, "requires": { - "live-server": "1.2.0", - "meow": "3.7.0", - "stacktrace-js": "2.0.0" + "live-server": "^1.2.0", + "meow": "^3.7.0", + "stacktrace-js": "^2.0.0" } }, "dashdash": { @@ -1540,7 +1535,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "date-fns": { @@ -1588,8 +1583,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "deglob": { @@ -1598,12 +1593,12 @@ "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", "dev": true, "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1" + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" } }, "del": { @@ -1612,13 +1607,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -1645,7 +1640,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "doctrine": { @@ -1654,7 +1649,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-serializer": { @@ -1663,8 +1658,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -1687,7 +1682,7 @@ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -1696,8 +1691,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexer": { @@ -1713,7 +1708,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -1734,7 +1729,7 @@ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "iconv-lite": "0.4.23" + "iconv-lite": "~0.4.13" } }, "entities": { @@ -1749,7 +1744,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "error-stack-parser": { @@ -1758,7 +1753,7 @@ "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", "dev": true, "requires": { - "stackframe": "1.0.3" + "stackframe": "^1.0.3" } }, "es-abstract": { @@ -1767,11 +1762,11 @@ "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -1780,9 +1775,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "escape-html": { @@ -1804,11 +1799,11 @@ "dev": true, "optional": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -1845,9 +1840,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-generator": { @@ -1856,14 +1851,14 @@ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.6", + "trim-right": "^1.0.1" } }, "babel-runtime": { @@ -1872,8 +1867,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-traverse": { @@ -1882,15 +1877,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1899,10 +1894,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1994,12 +1989,12 @@ "integrity": "sha1-FPaTOrsgxiZm0n47e59bncBxKpo=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "detect-indent": "3.0.1", - "lodash": "4.17.4", - "source-map": "0.5.6" + "babel-messages": "^6.8.0", + "babel-runtime": "^6.9.0", + "babel-types": "^6.10.2", + "detect-indent": "^3.0.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0" } }, "detect-indent": { @@ -2008,9 +2003,9 @@ "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" } }, "get-stdin": { @@ -2031,7 +2026,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } } } @@ -2042,17 +2037,17 @@ "integrity": "sha1-ZhIBysfvhokkkCRG/awVJyU8XU0=", "dev": true, "requires": { - "esdoc-accessor-plugin": "1.0.0", - "esdoc-brand-plugin": "1.0.0", - "esdoc-coverage-plugin": "1.1.0", - "esdoc-external-ecmascript-plugin": "1.0.0", - "esdoc-integrate-manual-plugin": "1.0.0", - "esdoc-integrate-test-plugin": "1.0.0", - "esdoc-lint-plugin": "1.0.1", - "esdoc-publish-html-plugin": "1.1.0", - "esdoc-type-inference-plugin": "1.0.1", - "esdoc-undocumented-identifier-plugin": "1.0.0", - "esdoc-unexported-identifier-plugin": "1.0.0" + "esdoc-accessor-plugin": "^1.0.0", + "esdoc-brand-plugin": "^1.0.0", + "esdoc-coverage-plugin": "^1.0.0", + "esdoc-external-ecmascript-plugin": "^1.0.0", + "esdoc-integrate-manual-plugin": "^1.0.0", + "esdoc-integrate-test-plugin": "^1.0.0", + "esdoc-lint-plugin": "^1.0.0", + "esdoc-publish-html-plugin": "^1.0.0", + "esdoc-type-inference-plugin": "^1.0.0", + "esdoc-undocumented-identifier-plugin": "^1.0.0", + "esdoc-unexported-identifier-plugin": "^1.0.0" } }, "esdoc-type-inference-plugin": { @@ -2079,43 +2074,43 @@ "integrity": "sha512-qy4i3wODqKMYfz9LUI8N2qYDkHkoieTbiHpMrYUI/WbjhXJQr7lI4VngixTgaG+yHX+NBCv7nW4hA0ShbvaNKw==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.22.0", - "chalk": "2.4.1", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.5.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.3.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { "ansi-regex": { @@ -2130,7 +2125,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -2139,9 +2134,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { @@ -2171,7 +2166,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -2180,7 +2175,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -2203,8 +2198,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.7.1" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "debug": { @@ -2222,7 +2217,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } } } @@ -2233,8 +2228,8 @@ "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", "dev": true, "requires": { - "debug": "2.6.8", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" } }, "eslint-plugin-import": { @@ -2243,16 +2238,16 @@ "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.8", + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0" + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.1.1", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0" }, "dependencies": { "doctrine": { @@ -2261,8 +2256,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "find-up": { @@ -2271,7 +2266,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "path-type": { @@ -2280,7 +2275,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "read-pkg": { @@ -2289,9 +2284,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -2300,8 +2295,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } } } @@ -2312,10 +2307,10 @@ "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { - "ignore": "3.3.8", - "minimatch": "3.0.4", - "resolve": "1.3.3", - "semver": "5.5.0" + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "^5.4.1" }, "dependencies": { "semver": { @@ -2338,10 +2333,10 @@ "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", "dev": true, "requires": { - "doctrine": "2.1.0", - "has": "1.0.1", - "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.1" + "doctrine": "^2.0.2", + "has": "^1.0.1", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.0" } }, "eslint-plugin-standard": { @@ -2356,8 +2351,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -2372,8 +2367,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" }, "dependencies": { "acorn": { @@ -2397,7 +2392,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -2406,7 +2401,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2439,7 +2434,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -2448,7 +2443,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -2457,7 +2452,7 @@ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.1" } }, "extend": { @@ -2472,7 +2467,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "external-editor": { @@ -2481,9 +2476,9 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.23", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -2492,7 +2487,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extsprintf": { @@ -2537,7 +2532,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": ">=0.5.1" } }, "fbjs": { @@ -2546,13 +2541,13 @@ "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "dev": true, "requires": { - "core-js": "1.2.7", - "isomorphic-fetch": "2.2.1", - "loose-envify": "1.3.1", - "object-assign": "4.1.1", - "promise": "7.3.1", - "setimmediate": "1.0.5", - "ua-parser-js": "0.7.18" + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.9" }, "dependencies": { "core-js": { @@ -2569,7 +2564,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -2578,8 +2573,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "filename-regex": { @@ -2594,11 +2589,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -2607,11 +2602,11 @@ "integrity": "sha1-LEANjUUwk1vCMlScX6OF7Afeb80=", "dev": true, "requires": { - "debug": "2.2.0", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "debug": "~2.2.0", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -2643,8 +2638,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "flat-cache": { @@ -2653,10 +2648,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "for-in": { @@ -2671,7 +2666,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -2694,9 +2689,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.15" + "mime-types": "^2.1.12" } }, "from": { @@ -2717,9 +2712,9 @@ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" } }, "fs-readdir-recursive": { @@ -2741,8 +2736,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.6.39" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.39" }, "dependencies": { "abbrev": { @@ -2757,8 +2752,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -2778,8 +2773,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -2823,7 +2818,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -2831,7 +2826,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -2839,7 +2834,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -2847,7 +2842,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^0.4.1", "concat-map": "0.0.1" } }, @@ -2878,7 +2873,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -2901,7 +2896,7 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -2910,7 +2905,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -2959,7 +2954,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -2985,9 +2980,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -3000,10 +2995,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -3012,9 +3007,9 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -3023,14 +3018,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { @@ -3039,7 +3034,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3055,12 +3050,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -3080,8 +3075,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -3095,10 +3090,10 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -3112,9 +3107,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -3122,8 +3117,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3142,7 +3137,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -3168,7 +3163,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "jsbn": { @@ -3189,7 +3184,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -3234,7 +3229,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "minimatch": { @@ -3242,7 +3237,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3270,17 +3265,17 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", + "detect-libc": "^1.0.2", "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -3289,8 +3284,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -3299,10 +3294,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3327,7 +3322,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3348,8 +3343,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3386,10 +3381,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3405,13 +3400,13 @@ "bundled": true, "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "request": { @@ -3420,28 +3415,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { @@ -3449,7 +3444,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -3480,7 +3475,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -3489,15 +3484,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -3513,9 +3508,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3523,7 +3518,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -3537,7 +3532,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3551,9 +3546,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -3562,14 +3557,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -3578,7 +3573,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -3587,7 +3582,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -3628,7 +3623,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3663,7 +3658,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -3672,12 +3667,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3686,8 +3681,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -3696,7 +3691,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "global-modules": { @@ -3705,8 +3700,8 @@ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", "dev": true, "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" + "global-prefix": "^0.1.4", + "is-windows": "^0.2.0" } }, "global-prefix": { @@ -3715,10 +3710,10 @@ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.2.14" + "homedir-polyfill": "^1.0.0", + "ini": "^1.3.4", + "is-windows": "^0.2.0", + "which": "^1.2.12" } }, "globals": { @@ -3733,12 +3728,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "graceful-fs": { @@ -3767,8 +3762,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" }, "dependencies": { "ajv": { @@ -3778,10 +3773,10 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } } } @@ -3792,7 +3787,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -3801,7 +3796,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -3816,7 +3811,7 @@ "integrity": "sha1-omHEwqbGZ+DHe3AKfyl8Oe86pYk=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.1" } }, "hawk": { @@ -3826,10 +3821,10 @@ "dev": true, "optional": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "hoek": { @@ -3844,8 +3839,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "homedir-polyfill": { @@ -3854,7 +3849,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -3869,12 +3864,12 @@ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.1", - "domutils": "1.5.1", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.3" + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" } }, "http-auth": { @@ -3883,10 +3878,10 @@ "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=", "dev": true, "requires": { - "apache-crypt": "1.2.1", - "apache-md5": "1.1.2", - "bcryptjs": "2.4.3", - "uuid": "3.1.0" + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" } }, "http-errors": { @@ -3898,7 +3893,7 @@ "depd": "1.1.0", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "statuses": ">= 1.3.1 < 2" } }, "http-signature": { @@ -3908,9 +3903,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "ice-cap": { @@ -3929,12 +3924,12 @@ "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.8.3", - "jsdom": "7.2.2", - "lodash": "4.17.4" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "~3.8.1", + "jsdom": "^7.0.2", + "lodash": "^4.1.0" } }, "domhandler": { @@ -3943,7 +3938,7 @@ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "htmlparser2": { @@ -3952,11 +3947,11 @@ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" }, "dependencies": { "entities": { @@ -3979,10 +3974,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3999,7 +3994,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore": { @@ -4020,7 +4015,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -4029,8 +4024,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4051,20 +4046,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.4.1", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -4079,7 +4074,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -4088,9 +4083,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -4105,7 +4100,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "supports-color": { @@ -4114,7 +4109,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -4125,7 +4120,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "is-arrayish": { @@ -4140,7 +4135,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.8.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4155,7 +4150,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -4182,7 +4177,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4203,7 +4198,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4218,7 +4213,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-module": { @@ -4233,7 +4228,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-path-cwd": { @@ -4248,7 +4243,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -4257,7 +4252,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-posix-bracket": { @@ -4284,7 +4279,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-resolvable": { @@ -4363,8 +4358,8 @@ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dev": true, "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -4386,8 +4381,8 @@ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -4412,21 +4407,21 @@ "dev": true, "optional": true, "requires": { - "abab": "1.0.4", - "acorn": "2.7.0", - "acorn-globals": "1.0.9", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "escodegen": "1.9.1", - "nwmatcher": "1.4.3", - "parse5": "1.5.1", - "request": "2.83.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.4", - "webidl-conversions": "2.0.1", - "whatwg-url-compat": "0.6.5", - "xml-name-validator": "2.0.1" + "abab": "^1.0.0", + "acorn": "^2.4.0", + "acorn-globals": "^1.0.4", + "cssom": ">= 0.3.0 < 0.4.0", + "cssstyle": ">= 0.2.29 < 0.3.0", + "escodegen": "^1.6.1", + "nwmatcher": ">= 1.3.7 < 2.0.0", + "parse5": "^1.5.1", + "request": "^2.55.0", + "sax": "^1.1.4", + "symbol-tree": ">= 3.1.0 < 4.0.0", + "tough-cookie": "^2.2.0", + "webidl-conversions": "^2.0.0", + "whatwg-url-compat": "~0.6.5", + "xml-name-validator": ">= 2.0.1 < 3.0.0" }, "dependencies": { "acorn": { @@ -4488,7 +4483,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsprim": { @@ -4510,7 +4505,7 @@ "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", "dev": true, "requires": { - "array-includes": "3.0.3" + "array-includes": "^3.0.3" } }, "kind-of": { @@ -4519,7 +4514,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } }, "klaw": { @@ -4528,7 +4523,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, "lazy-cache": { @@ -4537,7 +4532,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "0.1.0" + "set-getter": "^0.1.0" } }, "levn": { @@ -4546,8 +4541,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "live-server": { @@ -4556,19 +4551,19 @@ "integrity": "sha1-RJhkS7+Bpm8Y3Y3/3vYcTBw3TKM=", "dev": true, "requires": { - "chokidar": "1.7.0", - "colors": "1.1.2", - "connect": "3.5.1", - "cors": "2.8.4", - "event-stream": "3.3.4", - "faye-websocket": "0.11.1", - "http-auth": "3.1.3", - "morgan": "1.8.2", - "object-assign": "4.1.1", - "opn": "5.1.0", - "proxy-middleware": "0.15.0", - "send": "0.16.1", - "serve-index": "1.9.0" + "chokidar": "^1.6.0", + "colors": "^1.1.2", + "connect": "3.5.x", + "cors": "^2.8.4", + "event-stream": "^3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.6.1", + "object-assign": "^4.1.1", + "opn": "^5.1.0", + "proxy-middleware": "^0.15.0", + "send": "^0.16.1", + "serve-index": "^1.7.2" }, "dependencies": { "colors": { @@ -4583,8 +4578,8 @@ "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "dev": true, "requires": { - "object-assign": "4.1.1", - "vary": "1.1.1" + "object-assign": "^4", + "vary": "^1" } }, "debug": { @@ -4614,13 +4609,13 @@ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "fresh": { @@ -4638,7 +4633,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "statuses": ">= 1.3.1 < 2" } }, "mime": { @@ -4659,7 +4654,7 @@ "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "proxy-middleware": { @@ -4675,18 +4670,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.1", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" } } } @@ -4697,10 +4692,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { @@ -4709,8 +4704,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -4811,7 +4806,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "loud-rejection": { @@ -4820,8 +4815,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lru-cache": { @@ -4830,8 +4825,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "magic-string": { @@ -4840,7 +4835,7 @@ "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=", "dev": true, "requires": { - "vlq": "0.2.2" + "vlq": "^0.2.1" } }, "map-obj": { @@ -4867,15 +4862,15 @@ "integrity": "sha1-Vte36xgDPwz5vFLrIJD6x9weifo=", "dev": true, "requires": { - "arr-union": "3.1.0", - "async-array-reduce": "0.2.1", - "extend-shallow": "2.0.1", - "fs-exists-sync": "0.1.0", - "glob": "7.1.2", - "has-glob": "0.1.1", - "is-valid-glob": "0.3.0", - "lazy-cache": "2.0.2", - "resolve-dir": "0.1.1" + "arr-union": "^3.1.0", + "async-array-reduce": "^0.2.0", + "extend-shallow": "^2.0.1", + "fs-exists-sync": "^0.1.0", + "glob": "^7.0.5", + "has-glob": "^0.1.1", + "is-valid-glob": "^0.3.0", + "lazy-cache": "^2.0.1", + "resolve-dir": "^0.1.0" } }, "meow": { @@ -4884,16 +4879,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "minimist": { @@ -4910,19 +4905,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "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" } }, "mime-db": { @@ -4937,7 +4932,7 @@ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "mimic-fn": { @@ -4952,7 +4947,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4976,11 +4971,11 @@ "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=", "dev": true, "requires": { - "basic-auth": "1.1.0", + "basic-auth": "~1.1.0", "debug": "2.6.8", - "depd": "1.1.0", - "on-finished": "2.3.0", - "on-headers": "1.0.1" + "depd": "~1.1.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" } }, "ms": { @@ -5020,8 +5015,8 @@ "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dev": true, "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "normalize-package-data": { @@ -5030,10 +5025,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -5042,7 +5037,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.0.2" + "remove-trailing-separator": "^1.0.1" } }, "nth-check": { @@ -5051,7 +5046,7 @@ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "number-is-nan": { @@ -5092,8 +5087,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "on-finished": { @@ -5117,7 +5112,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -5126,7 +5121,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "optionator": { @@ -5135,12 +5130,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -5169,9 +5164,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-limit": { @@ -5180,7 +5175,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5189,7 +5184,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -5210,10 +5205,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -5222,7 +5217,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -5250,7 +5245,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -5277,9 +5272,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pause-stream": { @@ -5288,7 +5283,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "performance-now": { @@ -5316,7 +5311,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-conf": { @@ -5325,8 +5320,8 @@ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, "requires": { - "find-up": "2.1.0", - "load-json-file": "4.0.0" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "dependencies": { "find-up": { @@ -5335,7 +5330,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "load-json-file": { @@ -5344,10 +5339,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "parse-json": { @@ -5356,8 +5351,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "pify": { @@ -5374,9 +5369,9 @@ "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", "dev": true, "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" + "debug-log": "^1.0.0", + "find-root": "^1.0.0", + "xtend": "^4.0.1" } }, "pkg-dir": { @@ -5385,7 +5380,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pluralize": { @@ -5430,7 +5425,7 @@ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "prop-types": { @@ -5439,9 +5434,9 @@ "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "dev": true, "requires": { - "fbjs": "0.8.16", - "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "fbjs": "^0.8.16", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" } }, "pseudomap": { @@ -5469,12 +5464,12 @@ "integrity": "sha512-08P1DqKz4OZPJSlwSiZQxQ1a0F56+KEz6MttlpDNE42+WpjGuOyvsEQepScpdeyilHWrQwh61M5C1KelP8I8IA==", "dev": true, "requires": { - "clone": "2.1.1", - "deep-equal": "1.0.1", - "eventemitter3": "2.0.3", - "extend": "3.0.1", - "parchment": "1.1.3", - "quill-delta": "3.6.2" + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.1", + "parchment": "^1.1.3", + "quill-delta": "^3.6.2" } }, "quill-cursors": { @@ -5483,8 +5478,8 @@ "integrity": "sha512-mWkhOA9TvdFklG1QwVAOS70hOSpiHiJ+eoIbSeEXI6no6wNQLavYo3eWYHXgvi6Z5/SjS0oSn+NLdpYuXgdA8Q==", "dev": true, "requires": { - "rangefix": "0.2.5", - "tinycolor2": "1.4.1" + "rangefix": "^0.2.5", + "tinycolor2": "^1.4.1" } }, "quill-delta": { @@ -5493,8 +5488,8 @@ "integrity": "sha512-grWEQq9woEidPDogtDNxQKmy2LFf9zBC0EU/YTSw6TwKmMjtihTxdnPtPRfrqazB2MSJ7YdCWxmsJ7aQKRSEgg==", "dev": true, "requires": { - "deep-equal": "1.0.1", - "extend": "3.0.1", + "deep-equal": "^1.0.1", + "extend": "^3.0.1", "fast-diff": "1.1.2" } }, @@ -5504,8 +5499,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -5514,7 +5509,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5523,7 +5518,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -5534,7 +5529,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -5557,9 +5552,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "dependencies": { "load-json-file": { @@ -5568,11 +5563,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "strip-bom": { @@ -5581,7 +5576,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -5592,8 +5587,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -5602,13 +5597,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -5617,10 +5612,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "redent": { @@ -5629,8 +5624,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regenerate": { @@ -5651,9 +5646,9 @@ "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "private": "0.1.7" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -5662,8 +5657,8 @@ "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", "dev": true, "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" } }, "regexpu-core": { @@ -5672,9 +5667,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.2", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -5689,7 +5684,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -5724,7 +5719,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { @@ -5734,28 +5729,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" }, "dependencies": { "mime-db": { @@ -5772,7 +5767,7 @@ "dev": true, "optional": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } } } @@ -5789,8 +5784,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve": { @@ -5799,7 +5794,7 @@ "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-dir": { @@ -5808,8 +5803,8 @@ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", "dev": true, "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" + "expand-tilde": "^1.2.2", + "global-modules": "^0.2.3" } }, "resolve-from": { @@ -5824,8 +5819,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "right-align": { @@ -5834,7 +5829,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -5843,7 +5838,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "rollup": { @@ -5853,7 +5848,7 @@ "dev": true, "requires": { "@types/estree": "0.0.38", - "@types/node": "6.0.110" + "@types/node": "*" } }, "rollup-plugin-babel": { @@ -5862,10 +5857,10 @@ "integrity": "sha1-FlKBl7D5OKFTb0RoPHqT1XMYL1c=", "dev": true, "requires": { - "babel-core": "6.25.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "object-assign": "4.1.1", - "rollup-pluginutils": "1.5.2" + "babel-core": "6", + "babel-plugin-transform-es2015-classes": "^6.9.0", + "object-assign": "^4.1.0", + "rollup-pluginutils": "^1.5.0" } }, "rollup-plugin-commonjs": { @@ -5874,11 +5869,11 @@ "integrity": "sha1-mLFYm/4ypsD2d5C2DAtJmXKv7Yk=", "dev": true, "requires": { - "acorn": "4.0.13", - "estree-walker": "0.3.1", - "magic-string": "0.19.1", - "resolve": "1.3.3", - "rollup-pluginutils": "2.0.1" + "acorn": "^4.0.1", + "estree-walker": "^0.3.0", + "magic-string": "^0.19.0", + "resolve": "^1.1.7", + "rollup-pluginutils": "^2.0.1" }, "dependencies": { "estree-walker": { @@ -5893,8 +5888,8 @@ "integrity": "sha1-fslbNXP2VDpGpkYb2afFRFJdD8A=", "dev": true, "requires": { - "estree-walker": "0.3.1", - "micromatch": "2.3.11" + "estree-walker": "^0.3.0", + "micromatch": "^2.3.11" } } } @@ -5905,10 +5900,10 @@ "integrity": "sha1-iTTZilsNstBe/O4qwGoXCkxwsEQ=", "dev": true, "requires": { - "acorn": "4.0.13", - "estree-walker": "0.2.1", - "magic-string": "0.16.0", - "rollup-pluginutils": "1.5.2" + "acorn": "^4.0.3", + "estree-walker": "^0.2.0", + "magic-string": "^0.16.0", + "rollup-pluginutils": "^1.2.0" }, "dependencies": { "magic-string": { @@ -5917,7 +5912,7 @@ "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=", "dev": true, "requires": { - "vlq": "0.2.2" + "vlq": "^0.2.1" } } } @@ -5928,7 +5923,7 @@ "integrity": "sha1-Szrqjdxa/Jt/n/v7FEHATvOQcbQ=", "dev": true, "requires": { - "matched": "0.4.4" + "matched": "^0.4.3" } }, "rollup-plugin-node-resolve": { @@ -5937,10 +5932,10 @@ "integrity": "sha1-i4l8TDAw1QASd7BRSyXSygloPuA=", "dev": true, "requires": { - "browser-resolve": "1.11.2", - "builtin-modules": "1.1.1", - "is-module": "1.0.0", - "resolve": "1.3.3" + "browser-resolve": "^1.11.0", + "builtin-modules": "^1.1.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" } }, "rollup-plugin-uglify": { @@ -5949,7 +5944,7 @@ "integrity": "sha1-1KpvXfE1Iurhuhd4DHxMcJYDg1k=", "dev": true, "requires": { - "uglify-js": "2.8.29" + "uglify-js": "^2.6.1" } }, "rollup-pluginutils": { @@ -5958,8 +5953,8 @@ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", "dev": true, "requires": { - "estree-walker": "0.2.1", - "minimatch": "3.0.4" + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" } }, "rollup-regenerator-runtime": { @@ -5968,7 +5963,7 @@ "integrity": "sha1-/Su7Z1/gkzUSQ+hyhzooHa2mvLY=", "dev": true, "requires": { - "regenerator-runtime": "0.10.5" + "regenerator-runtime": "^0.10.0" } }, "rollup-watch": { @@ -5986,7 +5981,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-parallel": { @@ -6013,7 +6008,7 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "safe-buffer": { @@ -6047,13 +6042,13 @@ "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.3", "batch": "0.6.1", "debug": "2.6.8", - "escape-html": "1.0.3", - "http-errors": "1.6.1", - "mime-types": "2.1.15", - "parseurl": "1.3.1" + "escape-html": "~1.0.3", + "http-errors": "~1.6.1", + "mime-types": "~2.1.15", + "parseurl": "~1.3.1" } }, "set-getter": { @@ -6062,7 +6057,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "0.3.0" + "to-object-path": "^0.3.0" } }, "set-immediate-shim": { @@ -6089,7 +6084,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6116,7 +6111,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "sntp": { @@ -6126,7 +6121,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "source-map": { @@ -6141,7 +6136,7 @@ "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", "dev": true, "requires": { - "source-map": "0.5.6" + "source-map": "^0.5.6" } }, "spawn-command": { @@ -6156,7 +6151,7 @@ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -6177,7 +6172,7 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "sprintf-js": { @@ -6193,14 +6188,14 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-generator": { @@ -6209,7 +6204,7 @@ "integrity": "sha1-s32LDZoqblLAbMjhhfmPGZ+2OAQ=", "dev": true, "requires": { - "stackframe": "1.0.3" + "stackframe": "^1.0.3" } }, "stackframe": { @@ -6225,7 +6220,7 @@ "dev": true, "requires": { "source-map": "0.5.6", - "stackframe": "1.0.3" + "stackframe": "^1.0.3" } }, "stacktrace-js": { @@ -6234,9 +6229,9 @@ "integrity": "sha1-d2ymRqlbxsayuQd2U2p/xyxt21g=", "dev": true, "requires": { - "error-stack-parser": "2.0.1", - "stack-generator": "2.0.1", - "stacktrace-gps": "3.0.1" + "error-stack-parser": "^2.0.1", + "stack-generator": "^2.0.1", + "stacktrace-gps": "^3.0.1" } }, "standard": { @@ -6245,15 +6240,15 @@ "integrity": "sha512-nu0jAcHiSc8H+gJCXeiziMVZNDYi8MuqrYJKxTgjP4xKXZMKm311boqQIzDrYI/ktosltxt2CbDjYQs9ANC8IA==", "dev": true, "requires": { - "eslint": "4.18.2", + "eslint": "~4.18.0", "eslint-config-standard": "11.0.0", "eslint-config-standard-jsx": "5.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-react": "7.7.0", - "eslint-plugin-standard": "3.0.1", - "standard-engine": "8.0.1" + "eslint-plugin-import": "~2.9.0", + "eslint-plugin-node": "~6.0.0", + "eslint-plugin-promise": "~3.7.0", + "eslint-plugin-react": "~7.7.0", + "eslint-plugin-standard": "~3.0.1", + "standard-engine": "~8.0.0" } }, "standard-engine": { @@ -6262,10 +6257,10 @@ "integrity": "sha512-LA531C3+nljom/XRvdW/hGPXwmilRkaRkENhO3FAGF1Vtq/WtCXzgmnc5S6vUHHsgv534MRy02C1ikMwZXC+tw==", "dev": true, "requires": { - "deglob": "2.1.0", - "get-stdin": "6.0.0", - "minimist": "1.2.0", - "pkg-conf": "2.1.0" + "deglob": "^2.1.0", + "get-stdin": "^6.0.0", + "minimist": "^1.1.0", + "pkg-conf": "^2.0.0" }, "dependencies": { "minimist": { @@ -6288,7 +6283,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "string-width": { @@ -6297,8 +6292,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { @@ -6313,7 +6308,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -6324,7 +6319,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -6340,7 +6335,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -6355,7 +6350,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" }, "dependencies": { "get-stdin": { @@ -6391,12 +6386,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.1", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ansi-styles": { @@ -6405,7 +6400,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { @@ -6414,9 +6409,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -6431,7 +6426,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -6448,10 +6443,10 @@ "integrity": "sha1-h64FrBQw1H2m76Hrx7Bw+QxnTVQ=", "dev": true, "requires": { - "commander": "2.10.0", - "ez-async": "1.0.0-alpha.1", - "load-json-file": "2.0.0", - "regenerator-runtime": "0.10.5" + "commander": "^2.9.0", + "ez-async": "^1.0.0-alpha.1", + "load-json-file": "^2.0.0", + "regenerator-runtime": "^0.10.1" } }, "text-table": { @@ -6478,7 +6473,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-fast-properties": { @@ -6493,7 +6488,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "tough-cookie": { @@ -6502,7 +6497,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { @@ -6537,7 +6532,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -6553,7 +6548,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "typedarray": { @@ -6574,9 +6569,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } }, "uglify-to-browserify": { @@ -6631,8 +6626,7 @@ "uws": { "version": "10.148.0", "resolved": "https://registry.npmjs.org/uws/-/uws-10.148.0.tgz", - "integrity": "sha512-aJpFgMMyxubiE/ll4nj9nWoQbv0HzZZDWXfwyu78nuFObX0Zoyv3TWjkqKPQ1vb2sMPZoz67tri7QNE6dybNmQ==", - "dev": true + "integrity": "sha512-aJpFgMMyxubiE/ll4nj9nWoQbv0HzZZDWXfwyu78nuFObX0Zoyv3TWjkqKPQ1vb2sMPZoz67tri7QNE6dybNmQ==" }, "v8flags": { "version": "2.1.1", @@ -6640,7 +6634,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "validate-npm-package-license": { @@ -6649,8 +6643,8 @@ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "vary": { @@ -6666,9 +6660,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vlq": { @@ -6690,7 +6684,7 @@ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "websocket-extensions": "0.1.1" + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -6712,7 +6706,7 @@ "dev": true, "optional": true, "requires": { - "tr46": "0.0.3" + "tr46": "~0.0.1" } }, "which": { @@ -6721,7 +6715,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "window-size": { @@ -6748,15 +6742,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" - } - }, - "ws": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.0.tgz", - "integrity": "sha512-c18dMeW+PEQdDFzkhDsnBAlS4Z8KGStBQQUcQ5mf7Nf689jyGk0594L+i9RaQuf4gog6SvWLJorz2NfSaqxZ7w==", - "requires": { - "async-limiter": "1.0.0" + "mkdirp": "^0.5.1" } }, "xml-name-validator": { @@ -6784,9 +6770,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } diff --git a/src/Bindings/Binding.js b/src/Bindings/Binding.js index 195550b0..f24f54a3 100644 --- a/src/Bindings/Binding.js +++ b/src/Bindings/Binding.js @@ -1,5 +1,5 @@ -import { createMutualExclude } from '../Util/mutualExclude.js' +import { createMutualExclude } from '../../lib/mutualExclude.js' /** * Abstract class for bindings. diff --git a/src/Bindings/DomBinding/domObserver.js b/src/Bindings/DomBinding/domObserver.js index 0dfb176e..0c27443b 100644 --- a/src/Bindings/DomBinding/domObserver.js +++ b/src/Bindings/DomBinding/domObserver.js @@ -4,7 +4,7 @@ import { iterateUntilUndeleted, removeAssociation, insertNodeHelper } from './util.js' -import diff from '../../Util/simpleDiff.js' +import diff from '../../../lib/simpleDiff.js' import YXmlFragment from '../../Types/YXml/YXmlFragment.js' /** diff --git a/src/Bindings/TextareaBinding/TextareaBinding.js b/src/Bindings/TextareaBinding/TextareaBinding.js index e02edafe..70e1942b 100644 --- a/src/Bindings/TextareaBinding/TextareaBinding.js +++ b/src/Bindings/TextareaBinding/TextareaBinding.js @@ -1,6 +1,6 @@ import Binding from '../Binding.js' -import simpleDiff from '../../Util/simpleDiff.js' +import simpleDiff from '../../../lib/simpleDiff.js' import { getRelativePosition, fromRelativePosition } from '../../Util/relativePosition.js' function typeObserver () { diff --git a/src/Connector.js b/src/Connector.js deleted file mode 100644 index 99f6ad0a..00000000 --- a/src/Connector.js +++ /dev/null @@ -1,298 +0,0 @@ -import BinaryEncoder from './Util/Binary/Encoder.js' -import BinaryDecoder from './Util/Binary/Decoder.js' - -import { sendSyncStep1, readSyncStep1 } from './MessageHandler/syncStep1.js' -import { readSyncStep2 } from './MessageHandler/syncStep2.js' -import { integrateRemoteStructs } from './MessageHandler/integrateRemoteStructs.js' - -// TODO: reintroduce or remove -// import debug from 'debug' - -// TODO: rename Connector - -export default class AbstractConnector { - constructor (y, opts) { - this.y = y - this.opts = opts - if (opts.role == null || opts.role === 'master') { - this.role = 'master' - } else if (opts.role === 'slave') { - this.role = 'slave' - } else { - throw new Error("Role must be either 'master' or 'slave'!") - } - this.log = debug('y:connector') - this.logMessage = debug('y:connector-message') - this._forwardAppliedStructs = opts.forwardAppliedOperations || false // TODO: rename - this.role = opts.role - this.connections = new Map() - this.isSynced = false - this.userEventListeners = [] - this.whenSyncedListeners = [] - this.currentSyncTarget = null - this.debug = opts.debug === true - this.broadcastBuffer = new BinaryEncoder() - this.broadcastBufferSize = 0 - this.protocolVersion = 11 - this.authInfo = opts.auth || null - this.checkAuth = opts.checkAuth || function () { return Promise.resolve('write') } // default is everyone has write access - if (opts.maxBufferLength == null) { - this.maxBufferLength = -1 - } else { - this.maxBufferLength = opts.maxBufferLength - } - } - - reconnect () { - this.log('reconnecting..') - } - - disconnect () { - this.log('discronnecting..') - this.connections = new Map() - this.isSynced = false - this.currentSyncTarget = null - this.whenSyncedListeners = [] - return Promise.resolve() - } - - onUserEvent (f) { - this.userEventListeners.push(f) - } - - removeUserEventListener (f) { - this.userEventListeners = this.userEventListeners.filter(g => f !== g) - } - - userLeft (user) { - if (this.connections.has(user)) { - this.log('%s: User left %s', this.y.userID, user) - this.connections.delete(user) - // check if isSynced event can be sent now - this._setSyncedWith(null) - for (var f of this.userEventListeners) { - f({ - action: 'userLeft', - user: user - }) - } - } - } - - userJoined (user, role, auth) { - if (role == null) { - throw new Error('You must specify the role of the joined user!') - } - if (this.connections.has(user)) { - throw new Error('This user already joined!') - } - this.log('%s: User joined %s', this.y.userID, user) - this.connections.set(user, { - uid: user, - isSynced: false, - role: role, - processAfterAuth: [], - processAfterSync: [], - auth: auth || null, - receivedSyncStep2: false - }) - let defer = {} - defer.promise = new Promise(function (resolve) { defer.resolve = resolve }) - this.connections.get(user).syncStep2 = defer - for (var f of this.userEventListeners) { - f({ - action: 'userJoined', - user: user, - role: role - }) - } - this._syncWithUser(user) - } - - // Execute a function _when_ we are connected. - // If not connected, wait until connected - whenSynced (f) { - if (this.isSynced) { - f() - } else { - this.whenSyncedListeners.push(f) - } - } - - _syncWithUser (userID) { - if (this.role === 'slave') { - return // "The current sync has not finished or this is controlled by a master!" - } - sendSyncStep1(this, userID) - } - - _fireIsSyncedListeners () { - if (!this.isSynced) { - this.isSynced = true - // It is safer to remove this! - // call whensynced listeners - for (var f of this.whenSyncedListeners) { - f() - } - this.whenSyncedListeners = [] - this.y._setContentReady() - this.y.emit('synced') - } - } - - send (uid, buffer) { - const y = this.y - if (!(buffer instanceof ArrayBuffer || buffer instanceof Uint8Array)) { - throw new Error('Expected Message to be an ArrayBuffer or Uint8Array - don\'t use this method to send custom messages') - } - this.log('User%s to User%s: Send \'%y\'', y.userID, uid, buffer) - this.logMessage('User%s to User%s: Send %Y', y.userID, uid, [y, buffer]) - } - - broadcast (buffer) { - const y = this.y - if (!(buffer instanceof ArrayBuffer || buffer instanceof Uint8Array)) { - throw new Error('Expected Message to be an ArrayBuffer or Uint8Array - don\'t use this method to send custom messages') - } - this.log('User%s: Broadcast \'%y\'', y.userID, buffer) - this.logMessage('User%s: Broadcast: %Y', y.userID, [y, buffer]) - } - - /* - Buffer operations, and broadcast them when ready. - */ - broadcastStruct (struct) { - const firstContent = this.broadcastBuffer.length === 0 - if (firstContent) { - this.broadcastBuffer.writeVarString(this.y.room) - this.broadcastBuffer.writeVarString('update') - this.broadcastBufferSize = 0 - this.broadcastBufferSizePos = this.broadcastBuffer.pos - this.broadcastBuffer.writeUint32(0) - } - this.broadcastBufferSize++ - struct._toBinary(this.broadcastBuffer) - if (this.maxBufferLength > 0 && this.broadcastBuffer.length > this.maxBufferLength) { - // it is necessary to send the buffer now - // cache the buffer and check if server is responsive - const buffer = this.broadcastBuffer - buffer.setUint32(this.broadcastBufferSizePos, this.broadcastBufferSize) - this.broadcastBuffer = new BinaryEncoder() - this.whenRemoteResponsive().then(() => { - this.broadcast(buffer.createBuffer()) - }) - } else if (firstContent) { - // send the buffer when all transactions are finished - // (or buffer exceeds maxBufferLength) - setTimeout(() => { - if (this.broadcastBuffer.length > 0) { - const buffer = this.broadcastBuffer - buffer.setUint32(this.broadcastBufferSizePos, this.broadcastBufferSize) - this.broadcast(buffer.createBuffer()) - this.broadcastBuffer = new BinaryEncoder() - } - }, 0) - } - } - - /* - * Somehow check the responsiveness of the remote clients/server - * Default behavior: - * Wait 100ms before broadcasting the next batch of operations - * - * Only used when maxBufferLength is set - * - */ - whenRemoteResponsive () { - return new Promise(function (resolve) { - setTimeout(resolve, 100) - }) - } - - /* - You received a raw message, and you know that it is intended for Yjs. Then call this function. - */ - receiveMessage (sender, buffer, skipAuth) { - const y = this.y - const userID = y.userID - skipAuth = skipAuth || false - if (!(buffer instanceof ArrayBuffer || buffer instanceof Uint8Array)) { - return Promise.reject(new Error('Expected Message to be an ArrayBuffer or Uint8Array!')) - } - if (sender === userID) { - return Promise.resolve() - } - let decoder = new BinaryDecoder(buffer) - let encoder = new BinaryEncoder() - let roomname = decoder.readVarString() // read room name - encoder.writeVarString(roomname) - let messageType = decoder.readVarString() - let senderConn = this.connections.get(sender) - this.log('User%s from User%s: Receive \'%s\'', userID, sender, messageType) - this.logMessage('User%s from User%s: Receive %Y', userID, sender, [y, buffer]) - if (senderConn == null && !skipAuth) { - throw new Error('Received message from unknown peer!') - } - if (messageType === 'sync step 1' || messageType === 'sync step 2') { - let auth = decoder.readVarUint() - if (senderConn.auth == null) { - senderConn.processAfterAuth.push([messageType, senderConn, decoder, encoder, sender]) - // check auth - return this.checkAuth(auth, y, sender).then(authPermissions => { - if (senderConn.auth == null) { - senderConn.auth = authPermissions - y.emit('userAuthenticated', { - user: senderConn.uid, - auth: authPermissions - }) - } - let messages = senderConn.processAfterAuth - senderConn.processAfterAuth = [] - - messages.forEach(m => - this.computeMessage(m[0], m[1], m[2], m[3], m[4]) - ) - }) - } - } - if ((skipAuth || senderConn.auth != null) && (messageType !== 'update' || senderConn.isSynced)) { - this.computeMessage(messageType, senderConn, decoder, encoder, sender, skipAuth) - } else { - senderConn.processAfterSync.push([messageType, senderConn, decoder, encoder, sender, false]) - } - } - - computeMessage (messageType, senderConn, decoder, encoder, sender, skipAuth) { - if (messageType === 'sync step 1' && (senderConn.auth === 'write' || senderConn.auth === 'read')) { - // cannot wait for sync step 1 to finish, because we may wait for sync step 2 in sync step 1 (->lock) - readSyncStep1(decoder, encoder, this.y, senderConn, sender) - } else { - const y = this.y - y.transact(function () { - if (messageType === 'sync step 2' && senderConn.auth === 'write') { - readSyncStep2(decoder, encoder, y, senderConn, sender) - } else if (messageType === 'update' && (skipAuth || senderConn.auth === 'write')) { - integrateRemoteStructs(y, decoder) - } else { - throw new Error('Unable to receive message') - } - }, true) - } - } - - _setSyncedWith (user) { - if (user != null) { - const userConn = this.connections.get(user) - userConn.isSynced = true - const messages = userConn.processAfterSync - userConn.processAfterSync = [] - messages.forEach(m => { - this.computeMessage(m[0], m[1], m[2], m[3], m[4]) - }) - } - const conns = Array.from(this.connections.values()) - if (conns.length > 0 && conns.every(u => u.isSynced)) { - this._fireIsSyncedListeners() - } - } -} diff --git a/src/Connectors/WebsocketsConnector/WebsocketsConnector.js b/src/Connectors/WebsocketsConnector/WebsocketsConnector.js deleted file mode 100644 index acf6bbe2..00000000 --- a/src/Connectors/WebsocketsConnector/WebsocketsConnector.js +++ /dev/null @@ -1,140 +0,0 @@ -import BinaryEncoder from '../../Util/Binary/Encoder.js' -/* global WebSocket */ -import NamedEventHandler from '../../Util/NamedEventHandler.js' -import decodeMessage, { messageSS, messageSubscribe, messageStructs } from './decodeMessage.js' -import { createMutualExclude } from '../../Util/mutualExclude.js' -import { messageCheckUpdateCounter } from './decodeMessage.js' - -export const STATE_DISCONNECTED = 0 -export const STATE_CONNECTED = 1 - -export default class WebsocketsConnector extends NamedEventHandler { - constructor (url = 'ws://localhost:1234') { - super() - this.url = url - this._state = STATE_DISCONNECTED - this._socket = null - this._rooms = new Map() - this._connectToServer = true - this._reconnectTimeout = 300 - this._mutualExclude = createMutualExclude() - this._persistence = null - this.connect() - } - - getRoom (roomName) { - return this._rooms.get(roomName) || { y: null, roomName, localUpdateCounter: 1 } - } - - syncPersistence (persistence) { - this._persistence = persistence - if (this._state === STATE_CONNECTED) { - persistence.getAllDocuments().then(docs => { - const encoder = new BinaryEncoder() - docs.forEach(doc => { - messageCheckUpdateCounter(doc.roomName, encoder, doc.remoteUpdateCounter) - }); - this.send(encoder) - }) - } - } - - connectY (roomName, y) { - let room = this._rooms.get(roomName) - if (room !== undefined) { - throw new Error('Room is already taken! There can be only one Yjs instance per roomName!') - } - this._rooms.set(roomName, { - roomName, - y, - localUpdateCounter: 1 - }) - y.on('afterTransaction', (y, transaction) => { - this._mutualExclude(() => { - if (transaction.encodedStructsLen > 0) { - const encoder = new BinaryEncoder() - const room = this._rooms.get(roomName) - messageStructs(roomName, y, encoder, transaction.encodedStructs, ++room.localUpdateCounter) - this.send(encoder) - } - }) - }) - if (this._state === STATE_CONNECTED) { - const encoder = new BinaryEncoder() - messageSS(roomName, y, encoder) - messageSubscribe(roomName, y, encoder) - this.send(encoder) - } - } - - _setState (state) { - this._state = state - this.emit('stateChanged', { - state: this.state - }) - } - - get state () { - return this._state === STATE_DISCONNECTED ? 'disconnected' : 'connected' - } - - _onOpen () { - this._setState(STATE_CONNECTED) - if (this._persistence === null) { - const encoder = new BinaryEncoder() - for (const [roomName, room] of this._rooms) { - const y = room.y - messageSS(roomName, y, encoder) - messageSubscribe(roomName, y, encoder) - } - this.send(encoder) - } else { - this.syncPersistence(this._persistence) - } - } - - send (encoder) { - if (encoder.length > 0 && this._socket.readyState === WebSocket.OPEN) { - this._socket.send(encoder.createBuffer()) - } - } - - _onClose () { - this._setState(STATE_DISCONNECTED) - this._socket = null - if (this._connectToServer) { - setTimeout(() => { - if (this._connectToServer) { - this.connect() - } - }, this._reconnectTimeout) - this.connect() - } - } - - _onMessage (message) { - if (message.data.byteLength > 0) { - const reply = decodeMessage(this, message.data, null, false, this._persistence) - this.send(reply) - } - } - - disconnect (code = 1000, reason = 'Client manually disconnected') { - const socket = this._socket - this._connectToServer = false - socket.close(code, reason) - } - - connect () { - if (this._socket === null) { - const socket = new WebSocket(this.url) - socket.binaryType = 'arraybuffer' - this._socket = socket - this._connectToServer = true - // Connection opened - socket.addEventListener('open', this._onOpen.bind(this)) - socket.addEventListener('close', this._onClose.bind(this)) - socket.addEventListener('message', this._onMessage.bind(this)) - } - } -} diff --git a/src/Connectors/WebsocketsConnector/decodeMessage.js b/src/Connectors/WebsocketsConnector/decodeMessage.js deleted file mode 100644 index 7027e3a7..00000000 --- a/src/Connectors/WebsocketsConnector/decodeMessage.js +++ /dev/null @@ -1,159 +0,0 @@ -import BinaryDecoder from '../../Util/Binary/Decoder.js' -import BinaryEncoder from '../../Util/Binary/Encoder.js' -import { readStateSet, writeStateSet } from '../../MessageHandler/stateSet.js' -import { writeStructs } from '../../MessageHandler/syncStep1.js' -import { writeDeleteSet, readDeleteSet } from '../../MessageHandler/deleteSet.js' -import { integrateRemoteStructs } from '../../MessageHandler/integrateRemoteStructs.js' - -const CONTENT_GET_SS = 4 -export function messageGetSS (roomName, y, encoder) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_GET_SS) -} - -const CONTENT_SUBSCRIBE = 3 -export function messageSubscribe (roomName, y, encoder) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_SUBSCRIBE) -} - -const CONTENT_SS = 0 -export function messageSS (roomName, y, encoder) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_SS) - writeStateSet(y, encoder) -} - -const CONTENT_STRUCTS_DSS = 2 -export function messageStructsDSS (roomName, y, encoder, ss, updateCounter) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_STRUCTS_DSS) - encoder.writeVarUint(updateCounter) - const structsDS = new BinaryEncoder() - writeStructs(y, structsDS, ss) - writeDeleteSet(y, structsDS) - encoder.writeVarUint(structsDS.length) - encoder.writeBinaryEncoder(structsDS) -} - -const CONTENT_STRUCTS = 5 -export function messageStructs (roomName, y, encoder, structsBinaryEncoder, updateCounter) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_STRUCTS) - encoder.writeVarUint(updateCounter) - encoder.writeVarUint(structsBinaryEncoder.length) - encoder.writeBinaryEncoder(structsBinaryEncoder) -} - -const CONTENT_CHECK_COUNTER = 6 -export function messageCheckUpdateCounter (roomName, encoder, updateCounter = 0) { - encoder.writeVarString(roomName) - encoder.writeVarUint(CONTENT_CHECK_COUNTER) - encoder.writeVarUint(updateCounter) -} - -/** - * Decodes a client-message. - * - * A client-message consists of multiple message-elements that are concatenated without delimiter. - * Each has the following structure: - * - roomName - * - content_type - * - content (additional info that is encoded based on the value of content_type) - * - * The message is encoded until no more message-elements are available. - * - * @param {*} connector The connector that handles the connections - * @param {*} message The binary encoded message - * @param {*} ws The connection object - */ -export default function decodeMessage (connector, message, ws, isServer = false, persistence) { - const decoder = new BinaryDecoder(message) - const encoder = new BinaryEncoder() - while (decoder.hasContent()) { - const roomName = decoder.readVarString() - const contentType = decoder.readVarUint() - const room = connector.getRoom(roomName) - const y = room.y - switch (contentType) { - case CONTENT_CHECK_COUNTER: - const updateCounter = decoder.readVarUint() - if (room.localUpdateCounter !== updateCounter) { - messageGetSS(roomName, y, encoder) - } - connector.subscribe(roomName, ws) - break - case CONTENT_STRUCTS: - console.log(`${roomName}: received update`) - connector._mutualExclude(() => { - const remoteUpdateCounter = decoder.readVarUint() - persistence.setRemoteUpdateCounter(roomName, remoteUpdateCounter) - const messageLen = decoder.readVarUint() - if (y === null) { - persistence._persistStructs(roomName, decoder.readArrayBuffer(messageLen)) - } else { - y.transact(() => { - integrateRemoteStructs(y, decoder) - }, true) - } - }) - break - case CONTENT_GET_SS: - if (y !== null) { - messageSS(roomName, y, encoder) - } else { - persistence._createYInstance(roomName).then(y => { - const encoder = new BinaryEncoder() - messageSS(roomName, y, encoder) - connector.send(encoder, ws) - }) - } - break - case CONTENT_SUBSCRIBE: - connector.subscribe(roomName, ws) - break - case CONTENT_SS: - // received state set - // reply with missing content - const ss = readStateSet(decoder) - const sendStructsDSS = () => { - if (y !== null) { // TODO: how to sync local content? - const encoder = new BinaryEncoder() - messageStructsDSS(roomName, y, encoder, ss, room.localUpdateCounter) // room.localUpdateHandler in case it changes - if (isServer) { - messageSS(roomName, y, encoder) - } - connector.send(encoder, ws) - } - } - if (room.persistenceLoaded !== undefined) { - room.persistenceLoaded.then(sendStructsDSS) - } else { - sendStructsDSS() - } - break - case CONTENT_STRUCTS_DSS: - console.log(`${roomName}: synced`) - connector._mutualExclude(() => { - const remoteUpdateCounter = decoder.readVarUint() - persistence.setRemoteUpdateCounter(roomName, remoteUpdateCounter) - const messageLen = decoder.readVarUint() - if (y === null) { - persistence._persistStructsDS(roomName, decoder.readArrayBuffer(messageLen)) - } else { - y.transact(() => { - integrateRemoteStructs(y, decoder) - readDeleteSet(y, decoder) - }, true) - } - }) - break - default: - console.error('Unexpected content type!') - if (ws !== null) { - ws.close() // TODO: specify reason - } - } - } - return encoder -} diff --git a/src/Connectors/WebsocketsConnector/server.js b/src/Connectors/WebsocketsConnector/server.js deleted file mode 100644 index 23e6f9b8..00000000 --- a/src/Connectors/WebsocketsConnector/server.js +++ /dev/null @@ -1,124 +0,0 @@ -import Y from '../../Y.js' -import uws from 'uws' -import BinaryEncoder from '../../Util/Binary/Encoder.js' -import decodeMessage, { messageStructs } from './decodeMessage.js' -import FilePersistence from '../../Persistences/FilePersistence.js' - -const WebsocketsServer = uws.Server -const persistence = new FilePersistence('.yjsPersisted') -/** - * Maps from room-name to .. - * { - * connections, // Set of ws-clients that listen to the room - * y // Yjs instance that handles the room - * } - */ -const rooms = new Map() -/** - * Maps from ws-connection to Set - the set of connected roomNames - */ -const connections = new Map() -const port = process.env.PORT || 1234 -const wss = new WebsocketsServer({ - port, - perMessageDeflate: {} -}) - -/** - * Set of room names that are scheduled to be sweeped (destroyed because they don't have a connection anymore) - */ -const scheduledSweeps = new Set() -/* TODO: enable sweeping -setInterval(function sweepRoomes () { - scheduledSweeps.forEach(roomName => { - const room = rooms.get(roomName) - if (room !== undefined) { - if (room.connections.size === 0) { - persistence.saveState(roomName, room.y).then(() => { - if (room.connections.size === 0) { - room.y.destroy() - rooms.delete(roomName) - } - }) - } - } - }) - scheduledSweeps.clear() -}, 5000) */ - -const wsConnector = { - send: (encoder, ws) => { - const message = encoder.createBuffer() - ws.send(message, null, null, true) - }, - _mutualExclude: f => { f() }, - subscribe: function subscribe (roomName, ws) { - let roomNames = connections.get(ws) - if (roomNames === undefined) { - roomNames = new Set() - connections.set(ws, roomNames) - } - roomNames.add(roomName) - const room = this.getRoom(roomName) - room.connections.add(ws) - }, - getRoom: function getRoom (roomName) { - let room = rooms.get(roomName) - if (room === undefined) { - const y = new Y(roomName, null, null, { gc: true }) - const persistenceLoaded = persistence.readState(roomName, y) - room = { - name: roomName, - connections: new Set(), - y, - persistenceLoaded, - localUpdateCounter: 1 - } - y.on('afterTransaction', (y, transaction) => { - if (transaction.encodedStructsLen > 0) { - // save to persistence - persistence.saveUpdate(roomName, y, transaction.encodedStructs) - // forward update to clients - persistence._mutex(() => { // do not broadcast if persistence.readState is called - const encoder = new BinaryEncoder() - messageStructs(roomName, y, encoder, transaction.encodedStructs, ++room.localUpdateCounter) - const message = encoder.createBuffer() - // when changed, broakcast update to all connections - room.connections.forEach(conn => { - conn.send(message, null, null, true) - }) - }) - } - }) - rooms.set(roomName, room) - } - return room - } -} - -wss.on('connection', (ws) => { - ws.on('message', function onWSMessage (message) { - if (message.byteLength > 0) { - const reply = decodeMessage(wsConnector, message, ws, true, persistence) - if (reply.length > 0) { - ws.send(reply.createBuffer(), null, null, true) - } - } - }) - ws.on('close', function onWSClose () { - const roomNames = connections.get(ws) - if (roomNames !== undefined) { - roomNames.forEach(roomName => { - const room = rooms.get(roomName) - if (room !== undefined) { - const connections = room.connections - connections.delete(ws) - if (connections.size === 0) { - scheduledSweeps.add(roomName) - } - } - }) - connections.delete(ws) - } - }) -}) diff --git a/src/Persistence.js b/src/Persistence.js deleted file mode 100644 index 20fc9178..00000000 --- a/src/Persistence.js +++ /dev/null @@ -1,122 +0,0 @@ -import BinaryEncoder from './Util/Binary/Encoder.js' -import BinaryDecoder from './Util/Binary/Decoder.js' -import { toBinary, fromBinary } from './MessageHandler/binaryEncode.js' -import { integrateRemoteStructs } from './MessageHandler/integrateRemoteStructs.js' -import { createMutualExclude } from './Util/mutualExclude.js' - -function getFreshCnf () { - let buffer = new BinaryEncoder() - buffer.writeUint32(0) - return { - len: 0, - buffer - } -} - -/** - * Abstract persistence class. - */ -export default class AbstractPersistence { - constructor (opts) { - this.opts = opts - this.ys = new Map() - } - - _init (y) { - let cnf = this.ys.get(y) - if (cnf === undefined) { - cnf = getFreshCnf() - cnf.mutualExclude = createMutualExclude() - this.ys.set(y, cnf) - return this.init(y).then(() => { - y.on('afterTransaction', (y, transaction) => { - let cnf = this.ys.get(y) - if (cnf.len > 0) { - cnf.buffer.setUint32(0, cnf.len) - this.saveUpdate(y, cnf.buffer.createBuffer(), transaction) - let _cnf = getFreshCnf() - for (let key in _cnf) { - cnf[key] = _cnf[key] - } - } - }) - return this.retrieve(y) - }).then(function () { - return Promise.resolve(cnf) - }) - } else { - return Promise.resolve(cnf) - } - } - deinit (y) { - this.ys.delete(y) - y.persistence = null - } - - destroy () { - this.ys = null - } - - /** - * Remove all persisted data that belongs to a room. - * Automatically destroys all Yjs all Yjs instances that persist to - * the room. If `destroyYjsInstances = false` the persistence functionality - * will be removed from the Yjs instances. - * - * ** Must be overwritten! ** - */ - removePersistedData (room, destroyYjsInstances = true) { - this.ys.forEach((cnf, y) => { - if (y.room === room) { - if (destroyYjsInstances) { - y.destroy() - } else { - this.deinit(y) - } - } - }) - } - - /* overwrite */ - saveUpdate (buffer) { - } - - /** - * Save struct to update buffer. - * saveUpdate is called when transaction ends - */ - saveStruct (y, struct) { - let cnf = this.ys.get(y) - if (cnf !== undefined) { - cnf.mutualExclude(function () { - struct._toBinary(cnf.buffer) - cnf.len++ - }) - } - } - - /* overwrite */ - retrieve (y, model, updates) { - let cnf = this.ys.get(y) - if (cnf !== undefined) { - cnf.mutualExclude(function () { - y.transact(function () { - if (model != null) { - fromBinary(y, new BinaryDecoder(new Uint8Array(model))) - } - if (updates != null) { - for (let i = 0; i < updates.length; i++) { - integrateRemoteStructs(y, new BinaryDecoder(new Uint8Array(updates[i]))) - } - } - }) - y.emit('persistenceReady') - }) - } - } - - /* overwrite */ - persist (y) { - return toBinary(y).createBuffer() - } -} diff --git a/src/Store/DeleteStore.js b/src/Store/DeleteStore.js index f35bd928..e3155d04 100644 --- a/src/Store/DeleteStore.js +++ b/src/Store/DeleteStore.js @@ -1,5 +1,5 @@ -import Tree from '../Util/Tree.js' +import Tree from '../../lib/Tree.js' import ID from '../Util/ID/ID.js' class DSNode { diff --git a/src/Store/OperationStore.js b/src/Store/OperationStore.js index 6ee790a6..3ed7519b 100644 --- a/src/Store/OperationStore.js +++ b/src/Store/OperationStore.js @@ -1,4 +1,4 @@ -import Tree from '../Util/Tree.js' +import Tree from '../../lib/Tree.js' import RootID from '../Util/ID/RootID.js' import { getStruct } from '../Util/structReferences.js' import { logID } from '../MessageHandler/messageToString.js' diff --git a/src/Struct/Delete.js b/src/Struct/Delete.js index aa149fce..6bcf67e6 100644 --- a/src/Struct/Delete.js +++ b/src/Struct/Delete.js @@ -1,7 +1,7 @@ import { getStructReference } from '../Util/structReferences.js' import ID from '../Util/ID/ID.js' import { logID } from '../MessageHandler/messageToString.js' -import { writeStructToTransaction } from '../Transaction.js' +import { writeStructToTransaction } from '../Util/Transaction.js' /** * @private diff --git a/src/Struct/GC.js b/src/Struct/GC.js index 1b8eb4f3..7d997321 100644 --- a/src/Struct/GC.js +++ b/src/Struct/GC.js @@ -1,7 +1,7 @@ import { getStructReference } from '../Util/structReferences.js' import { RootFakeUserID } from '../Util/ID/RootID.js' import ID from '../Util/ID/ID.js' -import { writeStructToTransaction } from '../Transaction.js' +import { writeStructToTransaction } from '../Util/Transaction.js' // TODO should have the same base class as Item export default class GC { diff --git a/src/Struct/Item.js b/src/Struct/Item.js index 30d21385..241fc3de 100644 --- a/src/Struct/Item.js +++ b/src/Struct/Item.js @@ -2,7 +2,7 @@ import { getStructReference } from '../Util/structReferences.js' import ID from '../Util/ID/ID.js' import { default as RootID, RootFakeUserID } from '../Util/ID/RootID.js' import Delete from './Delete.js' -import { transactionTypeChanged, writeStructToTransaction } from '../Transaction.js' +import { transactionTypeChanged, writeStructToTransaction } from '../Util/Transaction.js' import GC from './GC.js' /** diff --git a/src/Util/Binary/Decoder.js b/src/Util/Binary/Decoder.js deleted file mode 100644 index 9a726c96..00000000 --- a/src/Util/Binary/Decoder.js +++ /dev/null @@ -1,187 +0,0 @@ -import ID from '../ID/ID.js' -import { default as RootID, RootFakeUserID } from '../ID/RootID.js' - -/** - * A BinaryDecoder handles the decoding of an ArrayBuffer. - */ -export default class BinaryDecoder { - /** - * @param {Uint8Array|Buffer} buffer The binary data that this instance - * decodes. - */ - constructor (buffer) { - if (buffer instanceof ArrayBuffer) { - this.uint8arr = new Uint8Array(buffer) - } else if ( - buffer instanceof Uint8Array || - ( - typeof Buffer !== 'undefined' && buffer instanceof Buffer - ) - ) { - this.uint8arr = buffer - } else { - throw new Error('Expected an ArrayBuffer or Uint8Array!') - } - this.pos = 0 - } - - hasContent () { - return this.pos !== this.uint8arr.length - } - - /** - * Clone this decoder instance. - * Optionally set a new position parameter. - */ - clone (newPos = this.pos) { - let decoder = new BinaryDecoder(this.uint8arr) - decoder.pos = newPos - return decoder - } - - /** - * Number of bytes. - */ - get length () { - return this.uint8arr.length - } - - - /** - * Read `len` bytes as an ArrayBuffer. - */ - readArrayBuffer (len) { - const arrayBuffer = new Uint8Array(len) - const view = new Uint8Array(this.uint8arr.buffer, this.pos, len) - arrayBuffer.set(view) - this.pos += len - return arrayBuffer.buffer - } - - /** - * Skip one byte, jump to the next position. - */ - skip8 () { - this.pos++ - } - - /** - * Read one byte as unsigned integer. - */ - readUint8 () { - return this.uint8arr[this.pos++] - } - - /** - * Read 4 bytes as unsigned integer. - * - * @return {number} An unsigned integer. - */ - readUint32 () { - let uint = - this.uint8arr[this.pos] + - (this.uint8arr[this.pos + 1] << 8) + - (this.uint8arr[this.pos + 2] << 16) + - (this.uint8arr[this.pos + 3] << 24) - this.pos += 4 - return uint - } - - /** - * Look ahead without incrementing position. - * to the next byte and read it as unsigned integer. - * - * @return {number} An unsigned integer. - */ - peekUint8 () { - return this.uint8arr[this.pos] - } - - /** - * Read unsigned integer (32bit) with variable length. - * 1/8th of the storage is used as encoding overhead. - * * numbers < 2^7 is stored in one byte. - * * numbers < 2^14 is stored in two bytes. - * - * @return {number} An unsigned integer. - */ - readVarUint () { - let num = 0 - let len = 0 - while (true) { - let r = this.uint8arr[this.pos++] - num = num | ((r & 0b1111111) << len) - len += 7 - if (r < 1 << 7) { - return num >>> 0 // return unsigned number! - } - if (len > 35) { - throw new Error('Integer out of range!') - } - } - } - - /** - * Read string of variable length - * * varUint is used to store the length of the string - * - * Transforming utf8 to a string is pretty expensive. The code performs 10x better - * when String.fromCodePoint is fed with all characters as arguments. - * But most environments have a maximum number of arguments per functions. - * For effiency reasons we apply a maximum of 10000 characters at once. - * - * @return {String} The read String. - */ - readVarString () { - let remainingLen = this.readVarUint() - let encodedString = '' - let i = 0 - while (remainingLen > 0) { - const nextLen = Math.min(remainingLen, 10000) - const bytes = new Array(nextLen) - for (let i = 0; i < nextLen; i++) { - bytes[i] = this.uint8arr[this.pos++] - } - encodedString += String.fromCodePoint.apply(null, bytes) - remainingLen -= nextLen - } - /* - //let bytes = new Array(len) - for (let i = 0; i < len; i++) { - //bytes[i] = this.uint8arr[this.pos++] - encodedString += String.fromCodePoint(this.uint8arr[this.pos++]) - // encodedString += String(this.uint8arr[this.pos++]) - } - */ - //let encodedString = String.fromCodePoint.apply(null, bytes) - return decodeURIComponent(escape(encodedString)) - } - - /** - * Look ahead and read varString without incrementing position - */ - peekVarString () { - let pos = this.pos - let s = this.readVarString() - this.pos = pos - return s - } - - /** - * Read ID. - * * If first varUint read is 0xFFFFFF a RootID is returned. - * * Otherwise an ID is returned. - * - * @return ID - */ - readID () { - let user = this.readVarUint() - if (user === RootFakeUserID) { - // read property name and type id - const rid = new RootID(this.readVarString(), null) - rid.type = this.readVarUint() - return rid - } - return new ID(user, this.readVarUint()) - } -} diff --git a/src/Util/Binary/Encoder.js b/src/Util/Binary/Encoder.js deleted file mode 100644 index 829356c9..00000000 --- a/src/Util/Binary/Encoder.js +++ /dev/null @@ -1,210 +0,0 @@ -import { RootFakeUserID } from '../ID/RootID.js' - -const bits7 = 0b1111111 -const bits8 = 0b11111111 - -/** - * A BinaryEncoder handles the encoding to an ArrayBuffer. - */ -export default class BinaryEncoder { - constructor () { - // TODO: implement chained Uint8Array buffers instead of Array buffer - // TODO: Rewrite all methods as functions! - this._currentPos = 0 - this._currentBuffer = new Uint8Array(1000) - this._data = [] - } - - /** - * The current length of the encoded data. - */ - get length () { - let len = 0 - for (let i = 0; i < this._data.length; i++) { - len += this._data[i].length - } - len += this._currentPos - return len - } - - /** - * The current write pointer (the same as {@link length}). - */ - get pos () { - return this.length - } - - /** - * Transform to ArrayBuffer. - * - * @return {ArrayBuffer} The created ArrayBuffer. - */ - createBuffer () { - const len = this.length - const uint8array = new Uint8Array(len) - let curPos = 0 - for (let i = 0; i < this._data.length; i++) { - let d = this._data[i] - uint8array.set(d, curPos) - curPos += d.length - } - uint8array.set(new Uint8Array(this._currentBuffer.buffer, 0, this._currentPos), curPos) - return uint8array.buffer - } - - /** - * Write one byte to the encoder. - * - * @param {number} num The byte that is to be encoded. - */ - write (num) { - if (this._currentPos === this._currentBuffer.length) { - this._data.push(this._currentBuffer) - this._currentBuffer = new Uint8Array(this._currentBuffer.length * 2) - this._currentPos = 0 - } - this._currentBuffer[this._currentPos++] = num - } - - set (pos, num) { - let buffer = null - // iterate all buffers and adjust position - for (let i = 0; i < this._data.length && buffer === null; i++) { - const b = this._data[i] - if (pos < b.length) { - buffer = b // found buffer - } else { - pos -= b.length - } - } - if (buffer === null) { - // use current buffer - buffer = this._currentBuffer - } - buffer[pos] = num - } - - /** - * Write one byte as an unsigned integer. - * - * @param {number} num The number that is to be encoded. - */ - writeUint8 (num) { - this.write(num & bits8) - } - - /** - * Write one byte as an unsigned Integer at a specific location. - * - * @param {number} pos The location where the data will be written. - * @param {number} num The number that is to be encoded. - */ - setUint8 (pos, num) { - this.set(pos, num & bits8) - } - - /** - * Write two bytes as an unsigned integer. - * - * @param {number} num The number that is to be encoded. - */ - writeUint16 (num) { - this.write(num & bits8) - this.write((num >>> 8) & bits8) - } - /** - * Write two bytes as an unsigned integer at a specific location. - * - * @param {number} pos The location where the data will be written. - * @param {number} num The number that is to be encoded. - */ - setUint16 (pos, num) { - this.set(pos, num & bits8) - this.set(pos + 1, (num >>> 8) & bits8) - } - - /** - * Write two bytes as an unsigned integer - * - * @param {number} num The number that is to be encoded. - */ - writeUint32 (num) { - for (let i = 0; i < 4; i++) { - this.write(num & bits8) - num >>>= 8 - } - } - - /** - * Write two bytes as an unsigned integer at a specific location. - * - * @param {number} pos The location where the data will be written. - * @param {number} num The number that is to be encoded. - */ - setUint32 (pos, num) { - for (let i = 0; i < 4; i++) { - this.set(pos + i, num & bits8) - num >>>= 8 - } - } - - /** - * Write a variable length unsigned integer. - * - * @param {number} num The number that is to be encoded. - */ - writeVarUint (num) { - while (num >= 0b10000000) { - this.write(0b10000000 | (bits7 & num)) - num >>>= 7 - } - this.write(bits7 & num) - } - - /** - * Write a variable length string. - * - * @param {String} str The string that is to be encoded. - */ - writeVarString (str) { - const encodedString = unescape(encodeURIComponent(str)) - const len = encodedString.length - this.writeVarUint(len) - for (let i = 0; i < len; i++) { - this.write(encodedString.codePointAt(i)) - } - } - - /** - * Write the content of another binary encoder. - * - * @param encoder The BinaryEncoder to be written. - */ - writeBinaryEncoder (encoder) { - this.writeArrayBuffer(encoder.createBuffer()) - } - - writeArrayBuffer (arrayBuffer) { - const prevBufferLen = this._currentBuffer.length - this._data.push(new Uint8Array(this._currentBuffer.buffer, 0, this._currentPos)) - this._data.push(new Uint8Array(arrayBuffer)) - this._currentBuffer = new Uint8Array(prevBufferLen) - this._currentPos = 0 - } - - /** - * Write an ID at the current position. - * - * @param {ID} id The ID that is to be written. - */ - writeID (id) { - const user = id.user - this.writeVarUint(user) - if (user !== RootFakeUserID) { - this.writeVarUint(id.clock) - } else { - this.writeVarString(id.name) - this.writeVarUint(id.type) - } - } -} diff --git a/src/Transaction.js b/src/Util/Transaction.js similarity index 98% rename from src/Transaction.js rename to src/Util/Transaction.js index a01a7b37..3642b3c8 100644 --- a/src/Transaction.js +++ b/src/Util/Transaction.js @@ -1,4 +1,4 @@ -import BinaryEncoder from './Util/Binary/Encoder.js' +import BinaryEncoder from './Binary/Encoder.js' /** * A transaction is created for every change on the Yjs model. It is possible diff --git a/src/Y.dist.js b/src/Y.dist.js index 1b0c7754..c1d5ca5b 100644 --- a/src/Y.dist.js +++ b/src/Y.dist.js @@ -1,7 +1,7 @@ -import Y from './Y.js' -import UndoManager from './Util/UndoManager.js' -import { integrateRemoteStructs } from './MessageHandler/integrateRemoteStructs.js' +export { default as Y } from './Y.js' +export { default as UndoManager } from './Util/UndoManager.js' +export { integrateRemoteStructs } from './MessageHandler/integrateRemoteStructs.js' import Connector from './Connector.js' import Persistence from './Persistence.js' @@ -52,5 +52,3 @@ Y.utils = { toBinary, fromBinary } - -export default Y diff --git a/src/Y.js b/src/Y.js index be03faf1..ce999b77 100644 --- a/src/Y.js +++ b/src/Y.js @@ -3,8 +3,8 @@ import OperationStore from './Store/OperationStore.js' import StateStore from './Store/StateStore.js' import { generateRandomUint32 } from './Util/generateRandomUint32.js' import RootID from './Util/ID/RootID.js' -import NamedEventHandler from './Util/NamedEventHandler.js' -import Transaction from './Transaction.js' +import NamedEventHandler from '../lib/NamedEventHandler.js' +import Transaction from './Util/Transaction.js' export { default as DomBinding } from './Bindings/DomBinding/DomBinding.js' diff --git a/YdbClient/README.md b/src/YdbClient/README.md similarity index 100% rename from YdbClient/README.md rename to src/YdbClient/README.md diff --git a/YdbClient/TODO.md b/src/YdbClient/TODO.md similarity index 100% rename from YdbClient/TODO.md rename to src/YdbClient/TODO.md diff --git a/YdbClient/YdbClient.js b/src/YdbClient/YdbClient.js similarity index 100% rename from YdbClient/YdbClient.js rename to src/YdbClient/YdbClient.js diff --git a/YdbClient/YdbClient.test.js b/src/YdbClient/YdbClient.test.js similarity index 100% rename from YdbClient/YdbClient.test.js rename to src/YdbClient/YdbClient.test.js diff --git a/YdbClient/broadcastchannel.js b/src/YdbClient/broadcastchannel.js similarity index 100% rename from YdbClient/broadcastchannel.js rename to src/YdbClient/broadcastchannel.js diff --git a/YdbClient/idbactions.js b/src/YdbClient/idbactions.js similarity index 100% rename from YdbClient/idbactions.js rename to src/YdbClient/idbactions.js diff --git a/YdbClient/idbactions.test.js b/src/YdbClient/idbactions.test.js similarity index 100% rename from YdbClient/idbactions.test.js rename to src/YdbClient/idbactions.test.js diff --git a/YdbClient/index.js b/src/YdbClient/index.js similarity index 100% rename from YdbClient/index.js rename to src/YdbClient/index.js diff --git a/YdbClient/message.js b/src/YdbClient/message.js similarity index 100% rename from YdbClient/message.js rename to src/YdbClient/message.js diff --git a/test/diff.tests.js b/test/diff.tests.js index 0b27c328..d2e8e363 100644 --- a/test/diff.tests.js +++ b/test/diff.tests.js @@ -1,5 +1,5 @@ import { test } from '../node_modules/cutest/cutest.js' -import simpleDiff from '../src/Util/simpleDiff.js' +import simpleDiff from '../lib/simpleDiff.js' import Chance from 'chance' function runDiffTest (t, a, b, expected) { diff --git a/test/red-black-tree.js b/test/red-black-tree.js index 05ac3599..75f9b5ad 100644 --- a/test/red-black-tree.js +++ b/test/red-black-tree.js @@ -1,4 +1,4 @@ -import RedBlackTree from '../src/Util/Tree.js' +import RedBlackTree from '../lib/Tree.js' import ID from '../src/Util/ID/ID.js' import Chance from 'chance' import { test, proxyConsole } from 'cutest'