From b48a2a517cb6ffb16ac4f429097a7e76f04be753 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Wed, 15 May 2019 22:50:36 -0400 Subject: [PATCH 01/29] #117 Trying again to submit this patch to fix the process exiting properly when there is a hook error. --- .gitattributes | 1 + index.js | 1 - package-lock.json | 3708 ++++++++++++++++++--------------- src/lib/cucumberjs/hooks.js | 3 +- tests/jasmine/jasmine-spec.js | 2 +- tests/mocha/mocha-spec.js | 2 +- 6 files changed, 2020 insertions(+), 1697 deletions(-) create mode 100644 .gitattributes delete mode 100644 index.js diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..cbdcbbc --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.js text eol=lf diff --git a/index.js b/index.js deleted file mode 100644 index f4f0e99..0000000 --- a/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/index'); diff --git a/package-lock.json b/package-lock.json index 4b16281..f90bae7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,16 @@ "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", "dev": true, "requires": { - "chokidar": "2.0.4", - "commander": "2.11.0", - "convert-source-map": "1.5.0", - "fs-readdir-recursive": "1.1.0", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "output-file-sync": "2.0.1", - "slash": "2.0.0", - "source-map": "0.5.7" + "chokidar": "^2.0.3", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "output-file-sync": "^2.0.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" }, "dependencies": { "anymatch": { @@ -29,8 +29,8 @@ "dev": true, "optional": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "arr-diff": { @@ -44,24 +44,26 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "optional": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -69,8 +71,9 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -82,19 +85,19 @@ "dev": true, "optional": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "lodash.debounce": "4.0.8", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" } }, "expand-brackets": { @@ -104,13 +107,13 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -120,7 +123,7 @@ "dev": true, "optional": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -130,7 +133,7 @@ "dev": true, "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -140,7 +143,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -150,7 +153,7 @@ "dev": true, "optional": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -162,7 +165,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -172,7 +175,7 @@ "dev": true, "optional": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -184,9 +187,9 @@ "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -205,14 +208,14 @@ "dev": true, "optional": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -222,7 +225,7 @@ "dev": true, "optional": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -232,7 +235,7 @@ "dev": true, "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -242,11 +245,12 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "optional": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -254,8 +258,9 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -273,8 +278,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.11.1", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -286,7 +291,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -307,14 +313,16 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -327,17 +335,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -378,7 +389,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -429,7 +440,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -438,7 +449,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -454,7 +465,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -466,8 +478,9 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -480,22 +493,25 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -504,13 +520,14 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -527,9 +544,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -538,16 +555,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -556,8 +573,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -572,8 +589,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -591,7 +608,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -603,6 +621,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1.0.2" } @@ -625,8 +644,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": { @@ -688,7 +707,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -724,6 +744,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -736,15 +757,16 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -759,13 +781,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -786,15 +808,30 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -802,8 +839,8 @@ "dev": true, "optional": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -813,7 +850,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -825,7 +862,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -835,7 +872,7 @@ "dev": true, "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -845,16 +882,17 @@ "dev": true, "optional": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "dev": true, + "optional": true }, "is-glob": { "version": "4.0.0", @@ -863,7 +901,7 @@ "dev": true, "optional": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-number": { @@ -871,8 +909,9 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -880,8 +919,9 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -890,13 +930,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true }, "lodash": { "version": "4.17.11", @@ -911,19 +953,19 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "nan": { @@ -939,9 +981,9 @@ "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "is-plain-obj": "1.1.0", - "mkdirp": "0.5.1" + "graceful-fs": "^4.1.11", + "is-plain-obj": "^1.1.0", + "mkdirp": "^0.5.1" } }, "slash": { @@ -957,7 +999,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "requires": { - "@babel/highlight": "7.0.0" + "@babel/highlight": "^7.0.0" } }, "@babel/core": { @@ -965,20 +1007,20 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.1.2.tgz", "integrity": "sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw==", "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.1.3", - "@babel/helpers": "7.1.2", - "@babel/parser": "7.1.3", - "@babel/template": "7.1.2", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3", - "convert-source-map": "1.5.0", - "debug": "3.2.6", - "json5": "0.5.1", - "lodash": "4.17.11", - "resolve": "1.4.0", - "semver": "5.6.0", - "source-map": "0.5.7" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.1.2", + "@babel/helpers": "^7.1.2", + "@babel/parser": "^7.1.2", + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.1.2", + "convert-source-map": "^1.1.0", + "debug": "^3.1.0", + "json5": "^0.5.0", + "lodash": "^4.17.10", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "dependencies": { "debug": { @@ -986,7 +1028,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "lodash": { @@ -1011,11 +1053,11 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.1.3.tgz", "integrity": "sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ==", "requires": { - "@babel/types": "7.1.3", - "jsesc": "2.5.1", - "lodash": "4.17.11", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "@babel/types": "^7.1.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { @@ -1035,7 +1077,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -1043,8 +1085,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", "requires": { - "@babel/helper-explode-assignable-expression": "7.1.0", - "@babel/types": "7.1.3" + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-call-delegate": { @@ -1052,9 +1094,9 @@ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz", "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==", "requires": { - "@babel/helper-hoist-variables": "7.0.0", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-define-map": { @@ -1062,9 +1104,9 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz", "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==", "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/types": "7.1.3", - "lodash": "4.17.11" + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" }, "dependencies": { "lodash": { @@ -1079,8 +1121,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", "requires": { - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-function-name": { @@ -1088,9 +1130,9 @@ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "requires": { - "@babel/helper-get-function-arity": "7.0.0", - "@babel/template": "7.1.2", - "@babel/types": "7.1.3" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-get-function-arity": { @@ -1098,7 +1140,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-hoist-variables": { @@ -1106,7 +1148,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz", "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-member-expression-to-functions": { @@ -1114,7 +1156,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-module-imports": { @@ -1122,7 +1164,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-module-transforms": { @@ -1130,12 +1172,12 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz", "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==", "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-simple-access": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "@babel/template": "7.1.2", - "@babel/types": "7.1.3", - "lodash": "4.17.11" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0", + "lodash": "^4.17.10" }, "dependencies": { "lodash": { @@ -1150,7 +1192,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-plugin-utils": { @@ -1163,7 +1205,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz", "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==", "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.10" }, "dependencies": { "lodash": { @@ -1178,11 +1220,11 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-wrap-function": "7.1.0", - "@babel/template": "7.1.2", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-replace-supers": { @@ -1190,10 +1232,10 @@ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz", "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==", "requires": { - "@babel/helper-member-expression-to-functions": "7.0.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-simple-access": { @@ -1201,8 +1243,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "requires": { - "@babel/template": "7.1.2", - "@babel/types": "7.1.3" + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helper-split-export-declaration": { @@ -1210,7 +1252,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "requires": { - "@babel/types": "7.1.3" + "@babel/types": "^7.0.0" } }, "@babel/helper-wrap-function": { @@ -1218,10 +1260,10 @@ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz", "integrity": "sha512-R6HU3dete+rwsdAfrOzTlE9Mcpk4RjU3aX3gi9grtmugQY0u79X7eogUvfXA5sI81Mfq1cn6AgxihfN33STjJA==", "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/template": "7.1.2", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, "@babel/helpers": { @@ -1229,9 +1271,9 @@ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.1.2.tgz", "integrity": "sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA==", "requires": { - "@babel/template": "7.1.2", - "@babel/traverse": "7.1.4", - "@babel/types": "7.1.3" + "@babel/template": "^7.1.2", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.1.2" } }, "@babel/highlight": { @@ -1239,9 +1281,9 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "requires": { - "chalk": "2.4.1", - "esutils": "2.0.2", - "js-tokens": "4.0.0" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { @@ -1249,7 +1291,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.0" + "color-convert": "^1.9.0" } }, "chalk": { @@ -1257,9 +1299,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "has-flag": { @@ -1277,7 +1319,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } } } @@ -1292,9 +1334,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.1.0.tgz", "integrity": "sha512-Fq803F3Jcxo20MXUSDdmZZXrPe6BWyGcWBPPNB/M7WaUYESKDeKMOGIxEzQOjGSmW/NWb6UaPZrtTB2ekhB/ew==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0", - "@babel/plugin-syntax-async-generators": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.0.0" } }, "@babel/plugin-proposal-json-strings": { @@ -1302,8 +1344,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz", "integrity": "sha512-kfVdUkIAGJIVmHmtS/40i/fg/AGnw/rsZBCaapY5yjeO5RA9m165Xbw9KMOu2nqXP5dTFjEjHdfNdoVcHv133Q==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-json-strings": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.0.0" } }, "@babel/plugin-proposal-object-rest-spread": { @@ -1311,8 +1353,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz", "integrity": "sha512-14fhfoPcNu7itSen7Py1iGN0gEm87hX/B+8nZPqkdmANyyYWYMY2pjA3r8WXbWVKMzfnSNS0xY8GVS0IjXi/iw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-object-rest-spread": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -1320,8 +1362,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz", "integrity": "sha512-JPqAvLG1s13B/AuoBjdBYvn38RqW6n1TzrQO839/sIpqLpbnXKacsAgpZHzLD83Sm8SDXMkkrAvEnJ25+0yIpw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.0.0" } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -1329,9 +1371,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz", "integrity": "sha512-tM3icA6GhC3ch2SkmSxv7J/hCWKISzwycub6eGsDrFDgukD4dZ/I+x81XgW0YslS6mzNuQ1Cbzh5osjIMgepPQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.2.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.2.0" } }, "@babel/plugin-syntax-async-generators": { @@ -1339,7 +1381,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz", "integrity": "sha512-im7ged00ddGKAjcZgewXmp1vxSZQQywuQXe2B1A7kajjZmDeY/ekMPmWr9zJgveSaQH0k7BcGrojQhcK06l0zA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-json-strings": { @@ -1347,7 +1389,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz", "integrity": "sha512-UlSfNydC+XLj4bw7ijpldc1uZ/HB84vw+U6BTuqMdIEmz/LDe63w/GHtpQMdXWdqQZFeAI9PjnHe/vDhwirhKA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -1355,7 +1397,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz", "integrity": "sha512-5A0n4p6bIiVe5OvQPxBnesezsgFJdHhSs3uFSvaPdMqtsovajLZ+G2vZyvNe10EzJBWWo3AcHGKhAFUxqwp2dw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-optional-catch-binding": { @@ -1363,7 +1405,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz", "integrity": "sha512-Wc+HVvwjcq5qBg1w5RG9o9RVzmCaAg/Vp0erHCKpAYV8La6I94o4GQAmFYNmkzoMO6gzoOSulpKeSSz6mPEoZw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-arrow-functions": { @@ -1371,7 +1413,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz", "integrity": "sha512-2EZDBl1WIO/q4DIkIp4s86sdp4ZifL51MoIviLY/gG/mLSuOIEg7J8o6mhbxOTvUJkaN50n+8u41FVsr5KLy/w==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-async-to-generator": { @@ -1379,9 +1421,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz", "integrity": "sha512-rNmcmoQ78IrvNCIt/R9U+cixUHeYAzgusTFgIAv+wQb9HJU4szhpDD6e5GCACmj/JP5KxuCwM96bX3L9v4ZN/g==", "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -1389,7 +1431,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz", "integrity": "sha512-AOBiyUp7vYTqz2Jibe1UaAWL0Hl9JUXEgjFvvvcSc9MVDItv46ViXFw2F7SVt1B5k+KWjl44eeXOAk3UDEaJjQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-block-scoping": { @@ -1397,8 +1439,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz", "integrity": "sha512-GWEMCrmHQcYWISilUrk9GDqH4enf3UmhOEbNbNrlNAX1ssH3MsS1xLOS6rdjRVPgA7XXVPn87tRkdTEoA/dxEg==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "lodash": "4.17.11" + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.10" }, "dependencies": { "lodash": { @@ -1413,14 +1455,14 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz", "integrity": "sha512-rNaqoD+4OCBZjM7VaskladgqnZ1LO6o2UxuWSDzljzW21pN1KXkB7BstAVweZdxQkHAujps5QMNOTWesBciKFg==", "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-define-map": "7.1.0", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "globals": "11.8.0" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.1.0", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "globals": "^11.1.0" }, "dependencies": { "globals": { @@ -1435,7 +1477,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz", "integrity": "sha512-ubouZdChNAv4AAWAgU7QKbB93NU5sHwInEWfp+/OzJKA02E6Woh9RVoX4sZrbRwtybky/d7baTUqwFx+HgbvMA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-destructuring": { @@ -1443,7 +1485,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz", "integrity": "sha512-Mb9M4DGIOspH1ExHOUnn2UUXFOyVTiX84fXCd+6B5iWrQg/QMeeRmSwpZ9lnjYLSXtZwiw80ytVMr3zue0ucYw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { @@ -1451,9 +1493,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz", "integrity": "sha512-00THs8eJxOJUFVx1w8i1MBF4XH4PsAjKjQ1eqN/uCH3YKwP21GCKfrn6YZFZswbOk9+0cw1zGQPHVc1KBlSxig==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.2.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" } }, "@babel/plugin-transform-duplicate-keys": { @@ -1461,7 +1503,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz", "integrity": "sha512-w2vfPkMqRkdxx+C71ATLJG30PpwtTpW7DDdLqYt2acXU7YjztzeWW2Jk1T6hKqCLYCcEA5UQM/+xTAm+QCSnuQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -1469,8 +1511,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz", "integrity": "sha512-uZt9kD1Pp/JubkukOGQml9tqAeI8NkE98oZnHZ2qHRElmeKCodbTZgOEUtujSCSLhHSBWbzNiFSDIMC4/RBTLQ==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-for-of": { @@ -1478,7 +1520,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz", "integrity": "sha512-TlxKecN20X2tt2UEr2LNE6aqA0oPeMT1Y3cgz8k4Dn1j5ObT8M3nl9aA37LLklx0PBZKETC9ZAf9n/6SujTuXA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { @@ -1486,8 +1528,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz", "integrity": "sha512-VxOa1TMlFMtqPW2IDYZQaHsFrq/dDoIjgN098NowhexhZcz3UGlvPgZXuE1jEvNygyWyxRacqDpCZt+par1FNg==", "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-literals": { @@ -1495,7 +1537,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz", "integrity": "sha512-1NTDBWkeNXgpUcyoVFxbr9hS57EpZYXpje92zv0SUzjdu3enaRwF/l3cmyRnXLtIdyJASyiS6PtybK+CgKf7jA==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-modules-amd": { @@ -1503,8 +1545,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.1.0.tgz", "integrity": "sha512-wt8P+xQ85rrnGNr2x1iV3DW32W8zrB6ctuBkYBbf5/ZzJY99Ob4MFgsZDFgczNU76iy9PWsy4EuxOliDjdKw6A==", "requires": { - "@babel/helper-module-transforms": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-modules-commonjs": { @@ -1512,9 +1554,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz", "integrity": "sha512-wtNwtMjn1XGwM0AXPspQgvmE6msSJP15CX2RVfpTSTNPLhKhaOjaIfBaVfj4iUZ/VrFSodcFedwtPg/NxwQlPA==", "requires": { - "@babel/helper-module-transforms": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-simple-access": "7.1.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0" } }, "@babel/plugin-transform-modules-systemjs": { @@ -1522,8 +1564,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.1.3.tgz", "integrity": "sha512-PvTxgjxQAq4pvVUZF3mD5gEtVDuId8NtWkJsZLEJZMZAW3TvgQl1pmydLLN1bM8huHFVVU43lf0uvjQj9FRkKw==", "requires": { - "@babel/helper-hoist-variables": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-hoist-variables": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-modules-umd": { @@ -1531,8 +1573,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.1.0.tgz", "integrity": "sha512-enrRtn5TfRhMmbRwm7F8qOj0qEYByqUvTttPEGimcBH4CJHphjyK1Vg7sdU7JjeEmgSpM890IT/efS2nMHwYig==", "requires": { - "@babel/helper-module-transforms": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-new-target": { @@ -1540,7 +1582,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz", "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-object-super": { @@ -1548,8 +1590,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.1.0.tgz", "integrity": "sha512-/O02Je1CRTSk2SSJaq0xjwQ8hG4zhZGNjE8psTsSNPXyLRCODv7/PBozqT5AmQMzp7MI3ndvMhGdqp9c96tTEw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.1.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.1.0" } }, "@babel/plugin-transform-parameters": { @@ -1557,9 +1599,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz", "integrity": "sha512-vHV7oxkEJ8IHxTfRr3hNGzV446GAb+0hgbA7o/0Jd76s+YzccdWuTU296FOCOl/xweU4t/Ya4g41yWz80RFCRw==", "requires": { - "@babel/helper-call-delegate": "7.1.0", - "@babel/helper-get-function-arity": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-call-delegate": "^7.1.0", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-regenerator": { @@ -1567,7 +1609,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz", "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==", "requires": { - "regenerator-transform": "0.13.3" + "regenerator-transform": "^0.13.3" } }, "@babel/plugin-transform-runtime": { @@ -1575,10 +1617,10 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.1.0.tgz", "integrity": "sha512-WFLMgzu5DLQEah0lKTJzYb14vd6UiES7PTnXcvrPZ1VrwFeJ+mTbvr65fFAsXYMt2bIoOoC0jk76zY1S7HZjUg==", "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "resolve": "1.8.1", - "semver": "5.6.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" }, "dependencies": { "resolve": { @@ -1586,7 +1628,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "semver": { @@ -1601,7 +1643,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz", "integrity": "sha512-g/99LI4vm5iOf5r1Gdxq5Xmu91zvjhEG5+yZDJW268AZELAu4J1EiFLnkSG3yuUsZyOipVOVUKoGPYwfsTymhw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-spread": { @@ -1609,7 +1651,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz", "integrity": "sha512-L702YFy2EvirrR4shTj0g2xQp7aNwZoWNCkNu2mcoU0uyzMl0XRwDSwzB/xp6DSUFiBmEXuyAyEN16LsgVqGGQ==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-sticky-regex": { @@ -1617,8 +1659,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz", "integrity": "sha512-LFUToxiyS/WD+XEWpkx/XJBrUXKewSZpzX68s+yEOtIbdnsRjpryDw9U06gYc6klYEij/+KQVRnD3nz3AoKmjw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, "@babel/plugin-transform-template-literals": { @@ -1626,8 +1668,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz", "integrity": "sha512-vA6rkTCabRZu7Nbl9DfLZE1imj4tzdWcg5vtdQGvj+OH9itNNB6hxuRMHuIY8SGnEt1T9g5foqs9LnrHzsqEFg==", "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-typeof-symbol": { @@ -1635,7 +1677,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz", "integrity": "sha512-1r1X5DO78WnaAIvs5uC48t41LLckxsYklJrZjNKcevyz83sF2l4RHbw29qrCPr/6ksFsdfRpT/ZgxNWHXRnffg==", "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-unicode-regex": { @@ -1643,9 +1685,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz", "integrity": "sha512-uJBrJhBOEa3D033P95nPHu3nbFwFE9ZgXsfEitzoIXIwqAZWk7uXcg06yFKXz9FSxBH5ucgU/cYdX0IV8ldHKw==", "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.0.0", - "regexpu-core": "4.2.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0", + "regexpu-core": "^4.1.3" } }, "@babel/polyfill": { @@ -1653,8 +1695,8 @@ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.0.0.tgz", "integrity": "sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q==", "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.5.7", + "regenerator-runtime": "^0.11.1" }, "dependencies": { "core-js": { @@ -1674,47 +1716,47 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.1.0.tgz", "integrity": "sha512-ZLVSynfAoDHB/34A17/JCZbyrzbQj59QC1Anyueb4Bwjh373nVPq5/HMph0z+tCmcDjXDe+DlKQq9ywQuvWrQg==", "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-proposal-async-generator-functions": "7.1.0", - "@babel/plugin-proposal-json-strings": "7.0.0", - "@babel/plugin-proposal-object-rest-spread": "7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "7.0.0", - "@babel/plugin-syntax-async-generators": "7.0.0", - "@babel/plugin-syntax-object-rest-spread": "7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "7.0.0", - "@babel/plugin-transform-arrow-functions": "7.0.0", - "@babel/plugin-transform-async-to-generator": "7.1.0", - "@babel/plugin-transform-block-scoped-functions": "7.0.0", - "@babel/plugin-transform-block-scoping": "7.0.0", - "@babel/plugin-transform-classes": "7.1.0", - "@babel/plugin-transform-computed-properties": "7.0.0", - "@babel/plugin-transform-destructuring": "7.1.3", - "@babel/plugin-transform-dotall-regex": "7.0.0", - "@babel/plugin-transform-duplicate-keys": "7.0.0", - "@babel/plugin-transform-exponentiation-operator": "7.1.0", - "@babel/plugin-transform-for-of": "7.0.0", - "@babel/plugin-transform-function-name": "7.1.0", - "@babel/plugin-transform-literals": "7.0.0", - "@babel/plugin-transform-modules-amd": "7.1.0", - "@babel/plugin-transform-modules-commonjs": "7.1.0", - "@babel/plugin-transform-modules-systemjs": "7.1.3", - "@babel/plugin-transform-modules-umd": "7.1.0", - "@babel/plugin-transform-new-target": "7.0.0", - "@babel/plugin-transform-object-super": "7.1.0", - "@babel/plugin-transform-parameters": "7.1.0", - "@babel/plugin-transform-regenerator": "7.0.0", - "@babel/plugin-transform-shorthand-properties": "7.0.0", - "@babel/plugin-transform-spread": "7.0.0", - "@babel/plugin-transform-sticky-regex": "7.0.0", - "@babel/plugin-transform-template-literals": "7.0.0", - "@babel/plugin-transform-typeof-symbol": "7.0.0", - "@babel/plugin-transform-unicode-regex": "7.0.0", - "browserslist": "4.2.1", - "invariant": "2.2.2", - "js-levenshtein": "1.1.4", - "semver": "5.6.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.1.0", + "@babel/plugin-proposal-json-strings": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.0.0", + "@babel/plugin-syntax-async-generators": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.1.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.1.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-dotall-regex": "^7.0.0", + "@babel/plugin-transform-duplicate-keys": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.1.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.1.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-amd": "^7.1.0", + "@babel/plugin-transform-modules-commonjs": "^7.1.0", + "@babel/plugin-transform-modules-systemjs": "^7.0.0", + "@babel/plugin-transform-modules-umd": "^7.1.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.1.0", + "@babel/plugin-transform-parameters": "^7.1.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typeof-symbol": "^7.0.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "browserslist": "^4.1.0", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" }, "dependencies": { "semver": { @@ -1729,13 +1771,13 @@ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.0.0.tgz", "integrity": "sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==", "requires": { - "core-js": "2.5.7", - "find-cache-dir": "1.0.0", - "home-or-tmp": "3.0.0", - "lodash": "4.17.11", - "mkdirp": "0.5.1", - "pirates": "4.0.0", - "source-map-support": "0.5.9" + "core-js": "^2.5.7", + "find-cache-dir": "^1.0.0", + "home-or-tmp": "^3.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "pirates": "^4.0.0", + "source-map-support": "^0.5.9" }, "dependencies": { "core-js": { @@ -1763,8 +1805,8 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "requires": { - "buffer-from": "1.1.0", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } } } @@ -1774,7 +1816,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", "requires": { - "regenerator-runtime": "0.12.1" + "regenerator-runtime": "^0.12.0" }, "dependencies": { "regenerator-runtime": { @@ -1789,9 +1831,9 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.1.2.tgz", "integrity": "sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag==", "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.1.3", - "@babel/types": "7.1.3" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.1.2", + "@babel/types": "^7.1.2" } }, "@babel/traverse": { @@ -1799,15 +1841,15 @@ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.1.4.tgz", "integrity": "sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q==", "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.1.3", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-split-export-declaration": "7.0.0", - "@babel/parser": "7.1.3", - "@babel/types": "7.1.3", - "debug": "3.2.6", - "globals": "11.8.0", - "lodash": "4.17.11" + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.1.3", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.1.3", + "@babel/types": "^7.1.3", + "debug": "^3.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" }, "dependencies": { "debug": { @@ -1815,7 +1857,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "globals": { @@ -1840,9 +1882,9 @@ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz", "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==", "requires": { - "esutils": "2.0.2", - "lodash": "4.17.11", - "to-fast-properties": "2.0.0" + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" }, "dependencies": { "lodash": { @@ -1877,16 +1919,16 @@ }, "acorn-globals": { "version": "1.0.9", - "resolved": "http://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", "dev": true, "requires": { - "acorn": "2.7.0" + "acorn": "^2.1.0" }, "dependencies": { "acorn": { "version": "2.7.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "dev": true } @@ -1898,7 +1940,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -1914,8 +1956,8 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "requires": { - "extend": "3.0.1", - "semver": "5.0.3" + "extend": "~3.0.0", + "semver": "~5.0.1" } }, "ajv": { @@ -1923,8 +1965,8 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ajv-keywords": { @@ -1944,7 +1986,7 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.0.0" } }, "ansi-escapes": { @@ -1967,8 +2009,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "archiver": { @@ -1976,15 +2018,15 @@ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", "requires": { - "archiver-utils": "1.3.0", - "async": "2.5.0", - "buffer-crc32": "0.2.13", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "lodash": "4.17.4", - "readable-stream": "2.3.3", - "tar-stream": "1.5.2", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "walkdir": "^0.0.11", + "zip-stream": "^1.1.0" }, "dependencies": { "async": { @@ -1992,7 +2034,19 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -2002,12 +2056,26 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "requires": { - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.4", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "argparse": { @@ -2016,7 +2084,7 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -2024,7 +2092,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -2036,14 +2104,15 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "dev": true, + "optional": true }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -2062,8 +2131,8 @@ "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.8.2" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "arrify": { @@ -2091,7 +2160,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "dev": true, + "optional": true }, "async": { "version": "0.9.2", @@ -2129,9 +2199,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": { @@ -2140,14 +2210,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.7", - "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-jest": { @@ -2156,8 +2226,8 @@ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", "dev": true, "requires": { - "babel-plugin-istanbul": "4.1.6", - "babel-preset-jest": "23.2.0" + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" } }, "babel-messages": { @@ -2166,7 +2236,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-istanbul": { @@ -2175,10 +2245,10 @@ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.10.2", - "test-exclude": "4.2.3" + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" }, "dependencies": { "find-up": { @@ -2187,7 +2257,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } } } @@ -2210,8 +2280,8 @@ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", "dev": true, "requires": { - "babel-plugin-jest-hoist": "23.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, "babel-runtime": { @@ -2220,8 +2290,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.11.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -2230,11 +2300,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -2243,15 +2313,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": { @@ -2260,10 +2330,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": { @@ -2282,14 +2352,15 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, + "optional": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -2297,8 +2368,9 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -2306,8 +2378,9 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2315,8 +2388,9 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2324,23 +2398,26 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, + "optional": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true } } }, @@ -2350,7 +2427,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "binary-extensions": { @@ -2363,7 +2440,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", "requires": { - "readable-stream": "2.0.6" + "readable-stream": "~2.0.5" }, "dependencies": { "readable-stream": { @@ -2371,12 +2448,12 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -2396,7 +2473,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "boxen": { @@ -2405,13 +2482,13 @@ "integrity": "sha1-DxHn/jRO25OXl3/BPt5/ZNlWSB0=", "dev": true, "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.1.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "1.0.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -2420,7 +2497,7 @@ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { - "color-convert": "1.9.0" + "color-convert": "^1.9.0" } }, "camelcase": { @@ -2435,9 +2512,9 @@ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.4.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "has-flag": { @@ -2452,7 +2529,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -2462,7 +2539,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -2471,9 +2548,9 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "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-stdout": { @@ -2486,9 +2563,9 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.2.1.tgz", "integrity": "sha512-1oO0c7Zhejwd+LXihS89WqtKionSbz298rJZKJgfrHIZhrV8AC15gw553VcB0lcEugja7IhWD7iAlrsamfYVPA==", "requires": { - "caniuse-lite": "1.0.30000892", - "electron-to-chromium": "1.3.79", - "node-releases": "1.0.0-alpha.14" + "caniuse-lite": "^1.0.30000890", + "electron-to-chromium": "^1.3.79", + "node-releases": "^1.0.0-alpha.14" } }, "bser": { @@ -2497,7 +2574,7 @@ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "dev": true, "requires": { - "node-int64": "0.4.0" + "node-int64": "^0.4.0" } }, "buffer-crc32": { @@ -2521,23 +2598,25 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, + "optional": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -2547,7 +2626,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -2561,8 +2640,8 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "caniuse-lite": { @@ -2586,12 +2665,12 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "requires": { - "assertion-error": "1.0.2", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" }, "dependencies": { "deep-eql": { @@ -2599,7 +2678,7 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "type-detect": { @@ -2614,7 +2693,7 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", "requires": { - "check-error": "1.0.2" + "check-error": "^1.0.2" } }, "chalk": { @@ -2622,11 +2701,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "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" } }, "check-error": { @@ -2644,15 +2723,15 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "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" } }, "chromedriver": { @@ -2660,11 +2739,11 @@ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.40.0.tgz", "integrity": "sha512-ewvRQ1HMk0vpFSWYCk5hKDoEz5QMPplx5w3C6/Me+03y1imr67l3Hxl9U0jn3mu2N7+c7BoC7JtNW6HzbRAwDQ==", "requires": { - "del": "3.0.0", - "extract-zip": "1.6.7", - "kew": "0.7.0", - "mkdirp": "0.5.1", - "request": "2.87.0" + "del": "^3.0.0", + "extract-zip": "^1.6.7", + "kew": "^0.7.0", + "mkdirp": "^0.5.1", + "request": "^2.87.0" }, "dependencies": { "ajv": { @@ -2672,10 +2751,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.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" } }, "assert-plus": { @@ -2693,10 +2772,10 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "1.1.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" } }, "debug": { @@ -2712,12 +2791,12 @@ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.1" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" } }, "extract-zip": { @@ -2736,9 +2815,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.17" + "mime-types": "^2.1.12" }, "dependencies": { "combined-stream": { @@ -2746,7 +2825,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } } } @@ -2756,13 +2835,25 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "requires": { - "array-union": "1.0.2", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2780,8 +2871,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "http-signature": { @@ -2789,9 +2880,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "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" } }, "performance-now": { @@ -2814,26 +2905,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { - "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.2", - "har-validator": "5.0.3", - "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.2", - "safe-buffer": "5.1.1", - "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", + "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", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "tough-cookie": { @@ -2841,7 +2932,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } } } @@ -2857,11 +2948,12 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, + "optional": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -2869,15 +2961,17 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -2892,7 +2986,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-table": { @@ -2931,9 +3025,10 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, + "optional": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -2941,7 +3036,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -2959,7 +3054,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -2976,17 +3071,18 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true + "dev": true, + "optional": true }, "compress-commons": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.3" + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "concat-map": { @@ -2999,9 +3095,9 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "configstore": { @@ -3010,12 +3106,12 @@ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", "dev": true, "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.0.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "contains-path": { @@ -3033,7 +3129,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "dev": true, + "optional": true }, "core-js": { "version": "2.5.1", @@ -3051,10 +3148,10 @@ "integrity": "sha1-JiAp37MXFNSAQ/7ZHt5lhZOVXdQ=", "dev": true, "requires": { - "cli-table": "0.0.2", - "underscore": "1.2.4", - "underscore.string": "2.0.0", - "which": "1.0.9" + "cli-table": "0.0.x", + "underscore": "1.2.x", + "underscore.string": "2.0.x", + "which": "1.0.x" }, "dependencies": { "cli-table": { @@ -3080,7 +3177,7 @@ }, "underscore.string": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.0.0.tgz", "integrity": "sha1-dHCFilSguzVg0DfaVtzGe1GB4Ro=", "dev": true }, @@ -3102,8 +3199,8 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "requires": { - "crc": "3.4.4", - "readable-stream": "2.3.3" + "crc": "^3.4.4", + "readable-stream": "^2.0.0" } }, "create-error-class": { @@ -3112,7 +3209,7 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cross-spawn": { @@ -3120,9 +3217,9 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.2.14" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -3130,7 +3227,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "crypto-random-string": { @@ -3144,10 +3241,10 @@ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.3.0", + "urix": "^0.1.0" }, "dependencies": { "source-map": { @@ -3155,7 +3252,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -3165,7 +3262,7 @@ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", "requires": { - "css": "2.2.1" + "css": "^2.0.0" } }, "css-value": { @@ -3174,9 +3271,9 @@ "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=" }, "cssom": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", "dev": true }, "cssstyle": { @@ -3185,7 +3282,7 @@ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { - "cssom": "0.3.4" + "cssom": "0.3.x" } }, "ctype": { @@ -3195,22 +3292,23 @@ }, "cucumber": { "version": "github:xolvio/cucumber-js#cf953cb5b5de30dbcc279f59e4ebff3aa040071c", - "requires": { - "camel-case": "3.0.0", - "cli-table": "0.3.1", - "co": "4.6.0", - "colors": "1.1.2", - "commander": "2.11.0", - "duration": "0.2.1", - "fibers": "1.0.15", + "from": "github:xolvio/cucumber-js#v1.3.0-chimp.6", + "requires": { + "camel-case": "^3.0.0", + "cli-table": "^0.3.1", + "co": "^4.6.0", + "colors": "^1.1.2", + "commander": "^2.9.0", + "duration": "^0.2.0", + "fibers": "^1.0.7", "figures": "1.7.0", "gherkin": "4.0.0", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "is-generator": "1.0.3", - "lodash": "4.17.4", - "meteor-promise": "0.8.6", - "stack-chain": "1.3.7", - "stacktrace-js": "1.3.1" + "glob": "^7.0.0", + "is-generator": "^1.0.2", + "lodash": "^4.0.0", + "meteor-promise": "^0.8.0", + "stack-chain": "^1.3.5", + "stacktrace-js": "^1.3.0" } }, "d": { @@ -3218,7 +3316,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } }, "damerau-levenshtein": { @@ -3232,7 +3330,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3267,7 +3365,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "dev": true, + "optional": true }, "deep-extend": { "version": "0.4.2", @@ -3290,8 +3389,8 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -3299,9 +3398,10 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "optional": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -3309,8 +3409,9 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3318,8 +3419,9 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3327,23 +3429,26 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, + "optional": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true } } }, @@ -3353,13 +3458,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.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" + "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": { @@ -3373,7 +3478,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "diff": { @@ -3388,8 +3493,8 @@ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "dot-prop": { @@ -3398,7 +3503,7 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "duplexer": { @@ -3414,12 +3519,34 @@ "dev": true }, "duration": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.1.tgz", - "integrity": "sha512-gP9Uzm/3kBnHOMrWeymFPjYbG96fQtHtsvUcWI7sP9TXoaRJ602y9SpB7dXgbvcjqQ2p1K6S+yzJccm2wr9PsQ==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" + "d": "1", + "es5-ext": "~0.10.46" + }, + "dependencies": { + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + } } }, "ecc-jsbn": { @@ -3428,7 +3555,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ejs": { @@ -3446,7 +3573,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "requires": { - "once": "1.4.0" + "once": "^1.4.0" }, "dependencies": { "once": { @@ -3454,7 +3581,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } } } @@ -3465,7 +3592,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -3474,7 +3601,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "error-stack-parser": { @@ -3482,7 +3609,7 @@ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", "requires": { - "stackframe": "0.3.1" + "stackframe": "^0.3.1" } }, "es-abstract": { @@ -3491,11 +3618,11 @@ "integrity": "sha512-dvhwFL3yjQxNNsOWx6exMlaDrRHCRGMQlnx5lsXDCZ/J7G/frgIIl94zhZSp/galVAYp7VzPi1OrAHta89/yGQ==", "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": { @@ -3504,9 +3631,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" } }, "es5-ext": { @@ -3514,8 +3641,8 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "es6-iterator": "2", + "es6-symbol": "~3.1" } }, "es6-iterator": { @@ -3523,9 +3650,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-symbol": "^3.1" }, "dependencies": { "d": { @@ -3533,7 +3660,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -3544,12 +3671,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" }, "dependencies": { "d": { @@ -3558,7 +3685,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -3574,11 +3701,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" }, "dependencies": { "d": { @@ -3587,7 +3714,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -3597,8 +3724,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" + "d": "1", + "es5-ext": "~0.10.14" }, "dependencies": { "d": { @@ -3606,7 +3733,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -3617,10 +3744,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30", - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" }, "dependencies": { "d": { @@ -3629,7 +3756,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -3645,11 +3772,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "esprima": { @@ -3671,7 +3798,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -3682,10 +3809,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -3694,41 +3821,41 @@ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "debug": "2.6.8", - "doctrine": "2.0.0", - "escope": "3.6.0", - "espree": "3.5.0", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "globals": "9.18.0", - "ignore": "3.3.5", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.16.1", - "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" }, "dependencies": { "cli-cursor": { @@ -3737,7 +3864,20 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" } }, "inquirer": { @@ -3746,19 +3886,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "is-fullwidth-code-point": { @@ -3767,7 +3907,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "onetime": { @@ -3782,8 +3922,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "run-async": { @@ -3792,7 +3932,7 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "1.3.0" + "once": "^1.3.0" } }, "string-width": { @@ -3801,9 +3941,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "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" } }, "user-home": { @@ -3812,7 +3952,7 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } } } @@ -3823,7 +3963,7 @@ "integrity": "sha1-aI0V08J2wMdTrlOMkqRDl9dq5G4=", "dev": true, "requires": { - "eslint-config-airbnb-base": "10.0.1" + "eslint-config-airbnb-base": "^10.0.0" } }, "eslint-config-airbnb-base": { @@ -3838,8 +3978,8 @@ "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", "dev": true, "requires": { - "debug": "2.6.8", - "resolve": "1.4.0" + "debug": "^2.6.8", + "resolve": "^1.2.0" } }, "eslint-module-utils": { @@ -3848,8 +3988,8 @@ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", "dev": true, "requires": { - "debug": "2.6.8", - "pkg-dir": "1.0.0" + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" } }, "eslint-plugin-babel": { @@ -3864,16 +4004,16 @@ "integrity": "sha512-HGYmpU9f/zJaQiKNQOVfHUh2oLWW3STBrCgH0sHTX1xtsxYlH1zjLh8FlQGEIdZSdTbUMaV36WaZ6ImXkenGxQ==", "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.1", - "eslint-module-utils": "2.1.1", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "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.cond": "^4.3.0", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0" }, "dependencies": { "doctrine": { @@ -3882,8 +4022,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } } } @@ -3894,9 +4034,9 @@ "integrity": "sha1-TjXLcbin23AqxBXIBuuOjZ6mxl0=", "dev": true, "requires": { - "damerau-levenshtein": "1.0.4", - "jsx-ast-utils": "1.4.1", - "object-assign": "4.1.1" + "damerau-levenshtein": "^1.0.0", + "jsx-ast-utils": "^1.0.0", + "object-assign": "^4.0.1" } }, "eslint-plugin-react": { @@ -3905,11 +4045,11 @@ "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", "dev": true, "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.0.4" + "array.prototype.find": "^2.0.1", + "doctrine": "^1.2.2", + "has": "^1.0.1", + "jsx-ast-utils": "^1.3.4", + "object.assign": "^4.0.4" }, "dependencies": { "doctrine": { @@ -3918,8 +4058,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } } } @@ -3930,8 +4070,8 @@ "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", "dev": true, "requires": { - "acorn": "5.1.2", - "acorn-jsx": "3.0.1" + "acorn": "^5.1.1", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -3952,7 +4092,7 @@ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -3961,8 +4101,8 @@ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" } }, "estraverse": { @@ -3982,8 +4122,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.30" + "d": "1", + "es5-ext": "~0.10.14" }, "dependencies": { "d": { @@ -3992,7 +4132,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.30" + "es5-ext": "^0.10.9" } } } @@ -4003,13 +4143,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" } }, "exec-sh": { @@ -4018,7 +4158,7 @@ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", "dev": true, "requires": { - "merge": "1.2.0" + "merge": "^1.2.0" } }, "execa": { @@ -4027,13 +4167,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "exit": { @@ -4052,7 +4192,7 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -4060,7 +4200,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "extend": { @@ -4073,9 +4213,10 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, + "optional": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -4083,8 +4224,9 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "optional": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -4094,9 +4236,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", "requires": { - "iconv-lite": "0.4.18", - "jschardet": "1.5.1", - "tmp": "0.0.31" + "iconv-lite": "^0.4.17", + "jschardet": "^1.4.2", + "tmp": "^0.0.31" } }, "extglob": { @@ -4104,7 +4246,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extract-zip": { @@ -4172,7 +4314,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.4.tgz", "integrity": "sha1-iFk0x57/sECVSeDAo4Ae0XpAza0=", "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": ">=0.5.1" } }, "fb-watchman": { @@ -4181,7 +4323,7 @@ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "dev": true, "requires": { - "bser": "2.0.0" + "bser": "^2.0.0" } }, "fd-slicer": { @@ -4189,7 +4331,7 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "fg-lodash": { @@ -4197,8 +4339,8 @@ "resolved": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", "integrity": "sha1-mINSU39CfaavIiEpu2OsyknmL6M=", "requires": { - "lodash": "2.4.2", - "underscore.string": "2.3.3" + "lodash": "^2.4.1", + "underscore.string": "~2.3.3" }, "dependencies": { "lodash": { @@ -4218,8 +4360,8 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-entry-cache": { @@ -4228,8 +4370,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "filename-regex": { @@ -4242,11 +4384,11 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "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" } }, "find-cache-dir": { @@ -4254,9 +4396,9 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "requires": { - "commondir": "1.0.1", - "make-dir": "1.0.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" }, "dependencies": { "find-up": { @@ -4264,7 +4406,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "pkg-dir": { @@ -4272,7 +4414,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } } } @@ -4283,8 +4425,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": { @@ -4293,10 +4435,10 @@ "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", "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": { @@ -4309,7 +4451,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -4327,9 +4469,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -4337,8 +4479,9 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, + "optional": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "freeport": { @@ -4357,9 +4500,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "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" }, "dependencies": { "jsonfile": { @@ -4367,7 +4510,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } } } @@ -4383,8 +4526,8 @@ "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "optional": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.36" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" }, "dependencies": { "abbrev": { @@ -4403,7 +4546,8 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -4446,7 +4590,8 @@ }, "balanced-match": { "version": "0.4.2", - "bundled": true + "bundled": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -4459,6 +4604,7 @@ "block-stream": { "version": "0.0.9", "bundled": true, + "optional": true, "requires": { "inherits": "2.0.3" } @@ -4466,6 +4612,7 @@ "boom": { "version": "2.10.1", "bundled": true, + "optional": true, "requires": { "hoek": "2.16.3" } @@ -4473,6 +4620,7 @@ "brace-expansion": { "version": "1.1.7", "bundled": true, + "optional": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -4480,7 +4628,8 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -4494,26 +4643,31 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "combined-stream": { "version": "1.0.5", "bundled": true, + "optional": true, "requires": { "delayed-stream": "1.0.0" } }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "cryptiles": { "version": "2.0.5", @@ -4553,7 +4707,8 @@ }, "delayed-stream": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -4575,7 +4730,8 @@ }, "extsprintf": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -4594,11 +4750,13 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "fstream": { "version": "1.0.11", "bundled": true, + "optional": true, "requires": { "graceful-fs": "4.1.11", "inherits": "2.0.3", @@ -4649,6 +4807,7 @@ "glob": { "version": "7.1.2", "bundled": true, + "optional": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -4660,7 +4819,8 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "bundled": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -4694,7 +4854,8 @@ }, "hoek": { "version": "2.16.3", - "bundled": true + "bundled": true, + "optional": true }, "http-signature": { "version": "1.1.1", @@ -4709,6 +4870,7 @@ "inflight": { "version": "1.0.6", "bundled": true, + "optional": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -4716,7 +4878,8 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -4726,6 +4889,7 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "optional": true, "requires": { "number-is-nan": "1.0.1" } @@ -4737,7 +4901,8 @@ }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -4800,11 +4965,13 @@ }, "mime-db": { "version": "1.27.0", - "bundled": true + "bundled": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, + "optional": true, "requires": { "mime-db": "1.27.0" } @@ -4812,17 +4979,20 @@ "minimatch": { "version": "3.0.4", "bundled": true, + "optional": true, "requires": { "brace-expansion": "1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "optional": true }, "mkdirp": { "version": "0.5.1", "bundled": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4870,7 +5040,8 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -4885,6 +5056,7 @@ "once": { "version": "1.4.0", "bundled": true, + "optional": true, "requires": { "wrappy": "1.0.2" } @@ -4910,7 +5082,8 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -4919,7 +5092,8 @@ }, "process-nextick-args": { "version": "1.0.7", - "bundled": true + "bundled": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -4952,6 +5126,7 @@ "readable-stream": { "version": "2.2.9", "bundled": true, + "optional": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -4994,13 +5169,15 @@ "rimraf": { "version": "2.6.1", "bundled": true, + "optional": true, "requires": { "glob": "7.1.2" } }, "safe-buffer": { "version": "5.0.1", - "bundled": true + "bundled": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -5051,6 +5228,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "optional": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -5060,6 +5238,7 @@ "string_decoder": { "version": "1.0.1", "bundled": true, + "optional": true, "requires": { "safe-buffer": "5.0.1" } @@ -5072,6 +5251,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "optional": true, "requires": { "ansi-regex": "2.1.1" } @@ -5084,6 +5264,7 @@ "tar": { "version": "2.2.1", "bundled": true, + "optional": true, "requires": { "block-stream": "0.0.9", "fstream": "1.0.11", @@ -5133,7 +5314,8 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -5158,7 +5340,8 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "optional": true } } }, @@ -5172,7 +5355,7 @@ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", "requires": { - "globule": "1.2.0" + "globule": "^1.0.0" } }, "generate-function": { @@ -5185,7 +5368,7 @@ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-func-name": { @@ -5203,14 +5386,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "dev": true, + "optional": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -5222,7 +5406,7 @@ }, "gherkin": { "version": "4.0.0", - "resolved": "http://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", "integrity": "sha1-edzgTRIj6kO0hip2vlzo+JwSwyw=" }, "git-release-notes": { @@ -5231,8 +5415,8 @@ "integrity": "sha1-Oa0tY2WzUMrJSxFUQxClXOJ2TxI=", "dev": true, "requires": { - "ejs": "0.8.8", - "optimist": "0.3.7" + "ejs": "0.8.x", + "optimist": "0.3" }, "dependencies": { "ejs": { @@ -5247,20 +5431,21 @@ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", "dev": true, "requires": { - "wordwrap": "0.0.3" + "wordwrap": "~0.0.2" } } } }, "glob": { "version": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "from": "github:lucetius/node-glob#chimp", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", "once": "1.3.0", - "path-is-absolute": "1.0.1" + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -5268,8 +5453,8 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -5277,7 +5462,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "globals": { @@ -5292,12 +5477,27 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "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" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "globule": { @@ -5305,9 +5505,23 @@ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", "requires": { - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "lodash": "4.17.4", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.4", + "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "got": { @@ -5316,17 +5530,17 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -5335,32 +5549,17 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5374,29 +5573,29 @@ "resolved": "https://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz", "integrity": "sha1-h+N6Bum0meiXkOLcERqpZotuYX8=", "requires": { - "accept": "1.0.0", - "ammo": "1.0.0", - "boom": "2.7.2", - "call": "2.0.1", - "catbox": "4.3.0", - "catbox-memory": "1.1.1", - "cryptiles": "2.0.4", - "h2o2": "4.0.1", - "heavy": "3.0.0", - "hoek": "2.14.0", - "inert": "2.1.5", - "iron": "2.1.2", - "items": "1.1.0", - "joi": "6.4.1", - "kilt": "1.1.1", - "mimos": "2.0.2", - "peekaboo": "1.0.0", - "qs": "4.0.0", - "shot": "1.5.3", - "statehood": "2.1.1", - "subtext": "1.1.1", - "topo": "1.0.2", - "vision": "2.0.1" + "accept": "1.x.x", + "ammo": "1.x.x", + "boom": "^2.5.x", + "call": "2.x.x", + "catbox": "^4.2.x", + "catbox-memory": "1.x.x", + "cryptiles": "2.x.x", + "h2o2": "4.x.x", + "heavy": "3.x.x", + "hoek": "^2.14.x", + "inert": "2.x.x", + "iron": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x", + "kilt": "^1.1.x", + "mimos": "2.x.x", + "peekaboo": "1.x.x", + "qs": "4.x.x", + "shot": "1.x.x", + "statehood": "2.x.x", + "subtext": "1.x.x", + "topo": "1.x.x", + "vision": "2.x.x" }, "dependencies": { "accept": { @@ -5404,8 +5603,8 @@ "resolved": "https://registry.npmjs.org/accept/-/accept-1.0.0.tgz", "integrity": "sha1-g++IOWi4WkDFARYEKCoiD/AeYq0=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0" + "boom": "2.x.x", + "hoek": "2.x.x" } }, "ammo": { @@ -5413,8 +5612,8 @@ "resolved": "https://registry.npmjs.org/ammo/-/ammo-1.0.0.tgz", "integrity": "sha1-4FlIG/aAhzj66G1GT3L6DBLWeoU=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0" + "boom": "2.x.x", + "hoek": "2.x.x" } }, "boom": { @@ -5422,7 +5621,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.7.2.tgz", "integrity": "sha1-2tYo2Jf3/S4yzIIZfxMweXHPg1Q=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "call": { @@ -5430,8 +5629,8 @@ "resolved": "https://registry.npmjs.org/call/-/call-2.0.1.tgz", "integrity": "sha1-SbQnCZQ96JoyJYqpEbWHUeI3eg4=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0" + "boom": "2.x.x", + "hoek": "2.x.x" } }, "catbox": { @@ -5439,9 +5638,9 @@ "resolved": "https://registry.npmjs.org/catbox/-/catbox-4.3.0.tgz", "integrity": "sha1-IiN3vWfxKRrA4l0AAC0GWp3385o=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0", - "joi": "6.4.1" + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "6.x.x" } }, "catbox-memory": { @@ -5449,7 +5648,7 @@ "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.1.tgz", "integrity": "sha1-QqUvgLye+nJmAeltQBYDNhJIGig=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "cryptiles": { @@ -5457,7 +5656,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz", "integrity": "sha1-CeoXdbnhx95+YKmdQqtvCM4aEoU=", "requires": { - "boom": "2.7.2" + "boom": "2.x.x" } }, "h2o2": { @@ -5465,10 +5664,10 @@ "resolved": "https://registry.npmjs.org/h2o2/-/h2o2-4.0.1.tgz", "integrity": "sha1-eg4rztHZcXjsVs48ykjgxW3un40=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0", - "joi": "6.4.1", - "wreck": "6.0.0" + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "6.x.x", + "wreck": "5.x.x" } }, "heavy": { @@ -5476,9 +5675,9 @@ "resolved": "https://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz", "integrity": "sha1-/QEIdiExYy+IVIontVQSws9SKwA=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0", - "joi": "6.4.1" + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "5.x.x" } }, "hoek": { @@ -5491,12 +5690,12 @@ "resolved": "https://registry.npmjs.org/inert/-/inert-2.1.5.tgz", "integrity": "sha1-eybZTEHGLAPsHU726LRe1WuDSFk=", "requires": { - "ammo": "1.0.0", - "boom": "2.7.2", - "hoek": "2.14.0", - "items": "1.1.0", - "joi": "6.4.1", - "lru-cache": "2.6.4" + "ammo": "1.x.x", + "boom": "2.x.x", + "hoek": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x", + "lru-cache": "2.6.x" }, "dependencies": { "lru-cache": { @@ -5511,9 +5710,9 @@ "resolved": "https://registry.npmjs.org/iron/-/iron-2.1.2.tgz", "integrity": "sha1-WR2RiiVAdTxEbY5DfNzwz6gBEU8=", "requires": { - "boom": "2.7.2", - "cryptiles": "2.0.4", - "hoek": "2.14.0" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x" } }, "items": { @@ -5526,10 +5725,10 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-6.4.1.tgz", "integrity": "sha1-9Q9CRTVgBo5jg9oVrC0w3Xzra24=", "requires": { - "hoek": "2.14.0", - "isemail": "1.1.1", - "moment": "2.10.3", - "topo": "1.0.2" + "hoek": "^2.2.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" }, "dependencies": { "isemail": { @@ -5549,7 +5748,7 @@ "resolved": "https://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz", "integrity": "sha1-d7SmFjyn+lshN6iMFzNCFuwj1ds=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "mimos": { @@ -5557,8 +5756,8 @@ "resolved": "https://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz", "integrity": "sha1-wyQXF+dblZkr54esfdbbGptTmx4=", "requires": { - "hoek": "2.14.0", - "mime-db": "1.14.0" + "hoek": "2.x.x", + "mime-db": "1.x.x" }, "dependencies": { "mime-db": { @@ -5583,7 +5782,7 @@ "resolved": "https://registry.npmjs.org/shot/-/shot-1.5.3.tgz", "integrity": "sha1-SGEHREO8VHLCNRthpGtOrsAH9Xo=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "statehood": { @@ -5591,12 +5790,12 @@ "resolved": "https://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz", "integrity": "sha1-AfFwtmxeklqvZ5qdMiulkYb8AAk=", "requires": { - "boom": "2.7.2", - "cryptiles": "2.0.4", - "hoek": "2.14.0", - "iron": "2.1.2", - "items": "1.1.0", - "joi": "6.4.1" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "iron": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x" } }, "subtext": { @@ -5604,12 +5803,12 @@ "resolved": "https://registry.npmjs.org/subtext/-/subtext-1.1.1.tgz", "integrity": "sha1-DJGCWuZdUXhVWT2DHjPvdaKEFWs=", "requires": { - "boom": "2.7.2", - "content": "1.0.1", - "hoek": "2.14.0", - "pez": "1.0.0", - "qs": "4.0.0", - "wreck": "6.0.0" + "boom": "2.x.x", + "content": "1.x.x", + "hoek": "2.x.x", + "pez": "1.x.x", + "qs": "4.x.x", + "wreck": "6.x.x" }, "dependencies": { "content": { @@ -5617,8 +5816,8 @@ "resolved": "https://registry.npmjs.org/content/-/content-1.0.1.tgz", "integrity": "sha1-gD60s7eJVGD9jGnGhMd1RmmvG6E=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0" + "boom": "2.x.x", + "hoek": "2.x.x" } }, "pez": { @@ -5626,11 +5825,11 @@ "resolved": "https://registry.npmjs.org/pez/-/pez-1.0.0.tgz", "integrity": "sha1-hEMYpc5wku7d/6KV4YB5rHefoBg=", "requires": { - "b64": "2.0.0", - "boom": "2.7.2", - "content": "1.0.1", - "hoek": "2.14.0", - "nigel": "1.0.1" + "b64": "2.x.x", + "boom": "2.x.x", + "content": "1.x.x", + "hoek": "2.x.x", + "nigel": "1.x.x" }, "dependencies": { "b64": { @@ -5638,7 +5837,7 @@ "resolved": "https://registry.npmjs.org/b64/-/b64-2.0.0.tgz", "integrity": "sha1-tZlbJPR+v9nxMQF6bntdZHVvtvM=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "nigel": { @@ -5646,8 +5845,8 @@ "resolved": "https://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz", "integrity": "sha1-RjmJr4gSePuqHTzJOCPb0XtDYKE=", "requires": { - "hoek": "2.14.0", - "vise": "1.0.0" + "hoek": "2.x.x", + "vise": "1.x.x" }, "dependencies": { "vise": { @@ -5655,7 +5854,7 @@ "resolved": "https://registry.npmjs.org/vise/-/vise-1.0.0.tgz", "integrity": "sha1-KDRb5N5aNB4V/SgW/Z6j5zA+jfM=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } } } @@ -5669,7 +5868,7 @@ "resolved": "https://registry.npmjs.org/topo/-/topo-1.0.2.tgz", "integrity": "sha1-QhV8N8HeTTeIPM3R1skChHqGDbk=", "requires": { - "hoek": "2.14.0" + "hoek": "2.x.x" } }, "vision": { @@ -5677,10 +5876,10 @@ "resolved": "https://registry.npmjs.org/vision/-/vision-2.0.1.tgz", "integrity": "sha1-0BIlW6buQm0GlqNOHfMy/sVeZzw=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0", - "items": "1.1.0", - "joi": "6.4.1" + "boom": "2.x.x", + "hoek": "^2.9.x", + "items": "^1.1.x", + "joi": "6.x.x" } }, "wreck": { @@ -5688,8 +5887,8 @@ "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.0.0.tgz", "integrity": "sha1-T0CGaWHl14rOBPMqa38x8/PFFjg=", "requires": { - "boom": "2.7.2", - "hoek": "2.14.0" + "boom": "2.x.x", + "hoek": "2.x.x" } } } @@ -5704,8 +5903,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has": { @@ -5714,7 +5913,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -5722,7 +5921,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -5735,17 +5934,19 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, + "optional": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -5754,9 +5955,10 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, + "optional": 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": { @@ -5764,8 +5966,9 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5773,8 +5976,9 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -5784,8 +5988,9 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, + "optional": true, "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -5795,8 +6000,8 @@ "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "requires": { - "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" } }, "hawk": { @@ -5804,10 +6009,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "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" } }, "he": { @@ -5831,9 +6036,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-proxy-agent": { @@ -5841,9 +6046,9 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", "requires": { - "agent-base": "2.1.1", - "debug": "2.6.8", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "iconv-lite": { @@ -5880,8 +6085,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.3.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5900,19 +6105,19 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.0.4", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.1", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "2.1.1", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" }, "dependencies": { "figures": { @@ -5920,7 +6125,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } } } @@ -5936,7 +6141,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "is-accessor-descriptor": { @@ -5944,8 +6149,9 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -5959,7 +6165,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.10.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -5973,7 +6179,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -5987,8 +6193,9 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-date-object": { @@ -6002,17 +6209,19 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, + "optional": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "dev": true, + "optional": true } } }, @@ -6026,7 +6235,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -6045,7 +6254,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -6063,7 +6272,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-my-json-valid": { @@ -6071,10 +6280,10 @@ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-npm": { @@ -6088,7 +6297,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-obj": { @@ -6107,7 +6316,7 @@ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "requires": { - "is-path-inside": "1.0.0" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -6115,7 +6324,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -6129,15 +6338,17 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "optional": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -6173,7 +6384,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-regexp": { @@ -6188,7 +6399,7 @@ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", "dev": true, "requires": { - "tryit": "1.0.3" + "tryit": "^1.0.1" } }, "is-retry-allowed": { @@ -6255,25 +6466,25 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.12", - "js-yaml": "3.9.1", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.3.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.2.14", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -6289,11 +6500,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "resolve": { @@ -6308,7 +6519,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "wordwrap": { @@ -6331,13 +6542,13 @@ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.1", - "semver": "5.6.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" }, "dependencies": { "semver": { @@ -6353,9 +6564,23 @@ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", "requires": { - "exit": "0.1.2", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "jasmine-core": "2.8.0" + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "jasmine-core": { @@ -6365,23 +6590,24 @@ }, "jest-cli": { "version": "github:Sanjo/jest#7c710947eadaae4f2963c3a8c482fb33d48921ca", - "dev": true, - "requires": { - "chalk": "1.1.3", - "cover": "0.2.9", - "diff": "2.2.3", - "graceful-fs": "4.1.11", - "istanbul": "0.4.5", - "jsdom": "7.2.2", - "json-stable-stringify": "1.0.1", - "mkdirp": "0.5.1", - "node-haste": "1.2.8", - "object-assign": "4.1.1", - "optimist": "0.6.1", - "resolve": "1.4.0", - "sane": "1.7.0", - "which": "1.2.14", - "worker-farm": "1.6.0" + "from": "github:Sanjo/jest#7c71094", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cover": "^0.2.9", + "diff": "^2.1.1", + "graceful-fs": "^4.1.2", + "istanbul": "^0.4.2", + "jsdom": "^7.2.0", + "json-stable-stringify": "^1.0.0", + "mkdirp": "^0.5.1", + "node-haste": "^1.2.8", + "object-assign": "^4.0.1", + "optimist": "^0.6.1", + "resolve": "^1.1.6", + "sane": "^1.2.0", + "which": "^1.1.1", + "worker-farm": "^1.3.1" } }, "js-levenshtein": { @@ -6400,8 +6626,8 @@ "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -6417,30 +6643,30 @@ }, "jsdom": { "version": "7.2.2", - "resolved": "http://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", "dev": true, "requires": { - "abab": "1.0.4", - "acorn": "2.7.0", - "acorn-globals": "1.0.9", - "cssom": "0.3.4", - "cssstyle": "0.2.37", - "escodegen": "1.8.1", - "nwmatcher": "1.4.4", - "parse5": "1.5.1", - "request": "2.81.0", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.2", - "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": { "version": "2.7.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", "dev": true } @@ -6467,7 +6693,7 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -6485,7 +6711,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -6532,7 +6758,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } }, "klaw": { @@ -6540,7 +6766,7 @@ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, "latest-version": { @@ -6549,7 +6775,7 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "4.0.1" + "package-json": "^4.0.0" } }, "lazystream": { @@ -6557,7 +6783,7 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.5" } }, "levn": { @@ -6566,8 +6792,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" } }, "load-json-file": { @@ -6576,10 +6802,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": { @@ -6587,8 +6813,8 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -6609,8 +6835,8 @@ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash._basecopy": { @@ -6631,9 +6857,9 @@ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dev": true, "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" } }, "lodash._getnative": { @@ -6654,9 +6880,9 @@ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dev": true, "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash.cond": { @@ -6678,8 +6904,8 @@ "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", "dev": true, "requires": { - "lodash.assign": "3.2.0", - "lodash.restparam": "3.6.1" + "lodash.assign": "^3.0.0", + "lodash.restparam": "^3.0.0" } }, "lodash.isarguments": { @@ -6700,9 +6926,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.restparam": { @@ -6721,7 +6947,7 @@ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lower-case": { @@ -6740,8 +6966,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -6749,7 +6975,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", "requires": { - "pify": "2.3.0" + "pify": "^2.3.0" } }, "makeerror": { @@ -6758,14 +6984,15 @@ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "tmpl": "1.0.4" + "tmpl": "1.0.x" } }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "dev": true, + "optional": true }, "map-stream": { "version": "0.1.0", @@ -6778,14 +7005,15 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, + "optional": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", "dev": true }, "meteor-promise": { @@ -6798,19 +7026,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "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.4" + "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": { @@ -6823,7 +7051,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "mimic-fn": { @@ -6836,7 +7064,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6849,9 +7077,10 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, + "optional": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6859,8 +7088,9 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "optional": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6915,12 +7145,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.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" } }, "growl": { @@ -6938,7 +7168,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -6966,17 +7196,17 @@ "dev": true, "optional": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -7008,12 +7238,23 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, "no-case": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-haste": { @@ -7041,7 +7282,7 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.14.tgz", "integrity": "sha512-G8nnF9cP9QPP/jUmYWw/uUUhumHmkm+X/EarCugYFjYm2uXRMFeOD6CVT3RLdoyCvDUNy51nirGfUItKWs/S1g==", "requires": { - "semver": "5.6.0" + "semver": "^5.3.0" }, "dependencies": { "semver": { @@ -7057,16 +7298,16 @@ "integrity": "sha1-5ThUindzQKGfhVxPCHt+Uoqj/to=", "dev": true, "requires": { - "chokidar": "1.7.0", - "debug": "2.6.8", - "es6-promise": "3.3.1", - "ignore-by-default": "1.0.1", - "lodash.defaults": "3.1.2", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "touch": "3.1.0", + "chokidar": "^1.7.0", + "debug": "^2.6.8", + "es6-promise": "^3.3.1", + "ignore-by-default": "^1.0.1", + "lodash.defaults": "^3.1.2", + "minimatch": "^3.0.4", + "ps-tree": "^1.1.0", + "touch": "^3.1.0", "undefsafe": "0.0.3", - "update-notifier": "2.2.0" + "update-notifier": "^2.2.0" }, "dependencies": { "chokidar": { @@ -7075,15 +7316,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "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" } }, "es6-promise": { @@ -7100,7 +7341,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { @@ -7109,10 +7350,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.0.3", - "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": { @@ -7120,7 +7361,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-install-package": { @@ -7134,7 +7375,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npm-watch": { @@ -7143,8 +7384,8 @@ "integrity": "sha1-MJkQcs6M7g1ywMdaxkjBSgObmQI=", "dev": true, "requires": { - "nodemon": "1.12.0", - "through2": "2.0.3" + "nodemon": "^1.3.8", + "through2": "^2.0.0" } }, "number-is-nan": { @@ -7174,10 +7415,11 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, + "optional": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -7185,8 +7427,9 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -7201,15 +7444,17 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, + "optional": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -7218,9 +7463,9 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.0", + "object-keys": "^1.0.10" } }, "object.omit": { @@ -7228,8 +7473,8 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -7237,15 +7482,17 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, + "optional": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -7259,7 +7506,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "optimist": { @@ -7267,8 +7514,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -7284,12 +7531,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": { @@ -7327,7 +7574,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "1.1.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -7341,10 +7588,10 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.4.1" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" }, "dependencies": { "semver": { @@ -7360,10 +7607,10 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "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": { @@ -7372,7 +7619,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse5": { @@ -7385,7 +7632,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "dev": true, + "optional": true }, "path-dirname": { "version": "1.0.2", @@ -7400,7 +7648,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -7430,7 +7678,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pathval": { @@ -7444,7 +7692,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pend": { @@ -7462,15 +7710,15 @@ "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.15.tgz", "integrity": "sha1-IPhugtM0nFBZF1J3RbekEeCLOQM=", "requires": { - "es6-promise": "4.0.5", - "extract-zip": "1.6.5", - "fs-extra": "1.0.0", - "hasha": "2.2.0", - "kew": "0.7.0", - "progress": "1.1.8", - "request": "2.81.0", - "request-progress": "2.0.1", - "which": "1.2.14" + "es6-promise": "~4.0.3", + "extract-zip": "~1.6.5", + "fs-extra": "~1.0.0", + "hasha": "~2.2.0", + "kew": "~0.7.0", + "progress": "~1.1.8", + "request": "~2.81.0", + "request-progress": "~2.0.1", + "which": "~1.2.10" } }, "pify": { @@ -7488,7 +7736,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pirates": { @@ -7496,7 +7744,7 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.0.tgz", "integrity": "sha512-8t5BsXy1LUIjn3WWOlOuFDuKswhQb/tkak641lvBgmPOBUQHXveORtlMCp6OdPV1dtuTaEahKA8VNz6uLfKBtA==", "requires": { - "node-modules-regexp": "1.0.0" + "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { @@ -7505,7 +7753,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pluralize": { @@ -7565,7 +7813,7 @@ "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true, "requires": { - "event-stream": "3.3.4" + "event-stream": "~3.3.0" } }, "pseudomap": { @@ -7599,7 +7847,7 @@ "integrity": "sha1-YQfPOfWEIzsyIHJJZe1rtuQtTZs=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.17.2" } }, "randomatic": { @@ -7607,8 +7855,8 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -7616,7 +7864,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -7624,7 +7872,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -7634,7 +7882,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.5" + "is-buffer": "^1.1.5" } } } @@ -7645,10 +7893,10 @@ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "dev": 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" } }, "read-pkg": { @@ -7657,9 +7905,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": { @@ -7668,8 +7916,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" }, "dependencies": { "find-up": { @@ -7678,7 +7926,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } } } @@ -7688,13 +7936,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "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": { @@ -7702,10 +7950,10 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "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" } }, "readline2": { @@ -7714,8 +7962,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", "mute-stream": "0.0.5" }, "dependencies": { @@ -7725,7 +7973,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "mute-stream": { @@ -7742,7 +7990,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.4.0" + "resolve": "^1.1.6" } }, "regenerate": { @@ -7755,7 +8003,7 @@ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", "requires": { - "regenerate": "1.4.0" + "regenerate": "^1.4.0" } }, "regenerator-runtime": { @@ -7769,7 +8017,7 @@ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz", "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==", "requires": { - "private": "0.1.8" + "private": "^0.1.6" } }, "regex-cache": { @@ -7777,7 +8025,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -7785,9 +8033,10 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, + "optional": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -7795,12 +8044,12 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==", "requires": { - "regenerate": "1.4.0", - "regenerate-unicode-properties": "7.0.0", - "regjsgen": "0.4.0", - "regjsparser": "0.3.0", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.0.2" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^7.0.0", + "regjsgen": "^0.4.0", + "regjsparser": "^0.3.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" } }, "registry-auth-token": { @@ -7809,8 +8058,8 @@ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", "dev": true, "requires": { - "rc": "1.2.1", - "safe-buffer": "5.1.1" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -7819,7 +8068,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.1" + "rc": "^1.0.1" } }, "regjsgen": { @@ -7832,7 +8081,7 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.3.0.tgz", "integrity": "sha512-zza72oZBBHzt64G7DxdqrOo/30bhHkwMUoT0WqfGu98XLd7N+1tsy5MJ96Bk4MD0y74n629RhmrGW6XlnLLwCA==", "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -7863,7 +8112,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { @@ -7871,28 +8120,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "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.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "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" } }, "request-progress": { @@ -7900,7 +8149,7 @@ "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", "requires": { - "throttleit": "1.0.0" + "throttleit": "^1.0.0" } }, "requestretry": { @@ -7909,7 +8158,7 @@ "integrity": "sha1-7RV7ulNSbt6z7DKo5wSkmYvs5ic=", "requires": { "fg-lodash": "0.0.2", - "request": "2.81.0" + "request": "^2.62.x" } }, "require-main-filename": { @@ -7924,8 +8173,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": { @@ -7933,7 +8182,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-from": { @@ -7952,15 +8201,16 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "dev": true, + "optional": true }, "rgb2hex": { "version": "0.1.0", @@ -7972,7 +8222,21 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "requires": { - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce" + "glob": "^7.0.5" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "run-async": { @@ -7980,7 +8244,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx": { @@ -8004,8 +8268,9 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, + "optional": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "sane": { @@ -8014,13 +8279,13 @@ "integrity": "sha1-s1ebzLRclM8gNVzIESSZDf00bjA=", "dev": true, "requires": { - "anymatch": "1.3.2", - "exec-sh": "0.2.2", - "fb-watchman": "2.0.0", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.10.0" + "anymatch": "^1.3.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "minimatch": "^3.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.10.0" } }, "saucelabs": { @@ -8028,7 +8293,7 @@ "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", "requires": { - "https-proxy-agent": "1.0.0" + "https-proxy-agent": "^1.0.0" } }, "sax": { @@ -8042,19 +8307,19 @@ "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.12.0.tgz", "integrity": "sha1-eJcw2wmhBfHM4SxkJNeV0RxUO9Q=", "requires": { - "async": "2.6.0", - "commander": "2.11.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "lodash": "4.17.4", - "minimist": "1.2.0", - "mkdirp": "0.5.1", + "async": "^2.1.4", + "commander": "^2.9.0", + "cross-spawn": "^5.1.0", + "debug": "^3.0.0", + "lodash": "^4.17.4", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", "progress": "2.0.0", "request": "2.79.0", "tar-stream": "1.5.2", - "urijs": "1.19.0", - "which": "1.2.14", - "yauzl": "2.9.1" + "urijs": "^1.18.4", + "which": "^1.2.12", + "yauzl": "^2.5.0" }, "dependencies": { "async": { @@ -8062,7 +8327,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "caseless": { @@ -8083,10 +8348,10 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.1", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "progress": { @@ -8104,26 +8369,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "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.17", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "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", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" } }, "tunnel-agent": { @@ -8141,8 +8406,8 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.0.1" } } } @@ -8158,7 +8423,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.0.3" + "semver": "^5.0.3" } }, "set-immediate-shim": { @@ -8171,11 +8436,12 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, + "optional": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8183,8 +8449,9 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8194,7 +8461,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8208,9 +8475,24 @@ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "interpret": "1.0.3", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "signal-exit": { @@ -8229,30 +8511,33 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, + "optional": true, "requires": { - "base": "0.11.2", - "debug": "2.6.8", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "dev": true, + "optional": true }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8260,8 +8545,9 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "source-map-resolve": { @@ -8269,19 +8555,21 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, + "optional": true, "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "dev": true, + "optional": true } } }, @@ -8290,10 +8578,11 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, + "optional": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8301,8 +8590,9 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8310,8 +8600,9 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8319,8 +8610,9 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8328,23 +8620,26 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, + "optional": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "dev": true, + "optional": true } } }, @@ -8353,8 +8648,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -8362,7 +8658,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "source-map": { @@ -8375,10 +8671,10 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "~1.1.0", + "resolve-url": "~0.2.1", + "source-map-url": "~0.3.0", + "urix": "~0.1.0" } }, "source-map-url": { @@ -8392,7 +8688,7 @@ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -8413,7 +8709,7 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -8421,8 +8717,9 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, + "optional": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -8436,14 +8733,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "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" }, "dependencies": { "assert-plus": { @@ -8463,7 +8760,7 @@ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", "requires": { - "stackframe": "1.0.4" + "stackframe": "^1.0.2" }, "dependencies": { "stackframe": { @@ -8484,7 +8781,7 @@ "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", "requires": { "source-map": "0.5.6", - "stackframe": "0.3.1" + "stackframe": "~0.3" }, "dependencies": { "source-map": { @@ -8499,9 +8796,9 @@ "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", "requires": { - "error-stack-parser": "1.3.6", - "stack-generator": "1.1.0", - "stacktrace-gps": "2.4.4" + "error-stack-parser": "^1.3.6", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.3" } }, "static-extend": { @@ -8509,9 +8806,10 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, + "optional": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -8519,8 +8817,9 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "optional": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -8531,7 +8830,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "string-width": { @@ -8539,8 +8838,8 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "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": { @@ -8553,7 +8852,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -8563,7 +8862,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringify-object": { @@ -8572,8 +8871,8 @@ "integrity": "sha1-xi0RAj6yH+LZsIe+A5om3zsioJ0=", "dev": true, "requires": { - "is-plain-obj": "1.1.0", - "is-regexp": "1.0.0" + "is-plain-obj": "^1.0.0", + "is-regexp": "^1.0.0" } }, "stringstream": { @@ -8586,7 +8885,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -8624,12 +8923,12 @@ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", "slice-ansi": "0.0.4", - "string-width": "2.1.1" + "string-width": "^2.0.0" } }, "tar-stream": { @@ -8637,10 +8936,10 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", "integrity": "sha1-+8bG6DwaGdTLSMfZYXH8JI7/x78=", "requires": { - "bl": "1.1.2", - "end-of-stream": "1.4.0", - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" } }, "term-size": { @@ -8649,7 +8948,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" } }, "test-exclude": { @@ -8658,11 +8957,11 @@ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" }, "dependencies": { "load-json-file": { @@ -8671,11 +8970,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" } }, "path-type": { @@ -8684,9 +8983,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" } }, "read-pkg": { @@ -8695,9 +8994,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" } }, "read-pkg-up": { @@ -8706,8 +9005,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" } }, "strip-bom": { @@ -8716,7 +9015,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -8727,9 +9026,9 @@ "integrity": "sha1-i2ouQYrR2pmR5HkgPjdSjf2B1Vc=", "dev": true, "requires": { - "lodash": "4.17.4", - "quibble": "0.4.1", - "stringify-object": "2.4.0" + "lodash": "^4.15.0", + "quibble": "^0.4.0", + "stringify-object": "^2.4.0" } }, "text-table": { @@ -8754,8 +9053,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "timed-out": { @@ -8769,7 +9068,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "tmpl": { @@ -8789,8 +9088,9 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -8798,11 +9098,12 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, + "optional": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -8810,9 +9111,10 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "optional": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -8820,8 +9122,9 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -8832,7 +9135,7 @@ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, "requires": { - "nopt": "1.0.10" + "nopt": "~1.0.10" }, "dependencies": { "nopt": { @@ -8841,7 +9144,7 @@ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } } } @@ -8851,7 +9154,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { @@ -8876,7 +9179,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -8891,7 +9194,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "typedarray": { @@ -8900,20 +9203,20 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.12.tgz", + "integrity": "sha512-KeQesOpPiZNgVwJj8Ge3P4JYbQHUdZzpx6Fahy6eKAYRSV4zhVmLXoC+JtOeYxcHCHTve8RG1ZGdTvpeOUM26Q==", "dev": true, "optional": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" + "commander": "~2.20.0", + "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true, "optional": true }, @@ -8952,8 +9255,8 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.0.4" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, "unicode-match-property-value-ecmascript": { @@ -8971,11 +9274,12 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, + "optional": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -8983,8 +9287,9 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "optional": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -8992,11 +9297,12 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, + "optional": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9007,7 +9313,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "unset-value": { @@ -9015,9 +9321,10 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, + "optional": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9025,10 +9332,11 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, + "optional": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9036,6 +9344,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, + "optional": true, "requires": { "isarray": "1.0.0" } @@ -9046,13 +9355,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "dev": true, + "optional": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "optional": true } } }, @@ -9075,14 +9386,14 @@ "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", "dev": true, "requires": { - "boxen": "1.2.1", - "chalk": "1.1.3", - "configstore": "3.1.1", - "import-lazy": "2.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "boxen": "^1.0.0", + "chalk": "^1.0.0", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "upper-case": { @@ -9117,14 +9428,15 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "dev": true, + "optional": true }, "util-deprecate": { "version": "1.0.2", @@ -9142,8 +9454,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" } }, "validator": { @@ -9156,9 +9468,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "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" }, "dependencies": { "assert-plus": { @@ -9179,7 +9491,7 @@ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "makeerror": "1.0.11" + "makeerror": "1.0.x" } }, "watch": { @@ -9199,8 +9511,8 @@ "integrity": "sha1-odzVkHuh0EFUquYXbGItkQw8qbM=", "requires": { "babel-runtime": "6.23.0", - "fibers": "1.0.15", - "object.assign": "4.0.4" + "fibers": "~1.0.15", + "object.assign": "^4.0.3" }, "dependencies": { "babel-runtime": { @@ -9208,8 +9520,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" } }, "regenerator-runtime": { @@ -9224,28 +9536,28 @@ "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.8.0.tgz", "integrity": "sha1-1Skpt0kID4mWf24WFAUcvIFy0TI=", "requires": { - "archiver": "1.3.0", - "babel-runtime": "6.23.0", - "css-parse": "2.0.0", - "css-value": "0.0.1", - "deepmerge": "1.3.2", - "ejs": "2.5.7", - "gaze": "1.1.2", - "glob": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "inquirer": "3.0.6", - "json-stringify-safe": "5.0.1", - "mkdirp": "0.5.1", - "npm-install-package": "2.1.0", - "optimist": "0.6.1", - "q": "1.5.0", - "request": "2.81.0", - "rgb2hex": "0.1.0", - "safe-buffer": "5.0.1", - "supports-color": "3.2.3", - "url": "0.11.0", - "validator": "7.0.0", - "wdio-dot-reporter": "0.0.9", - "wgxpath": "1.0.0" + "archiver": "~1.3.0", + "babel-runtime": "~6.23.0", + "css-parse": "~2.0.0", + "css-value": "~0.0.1", + "deepmerge": "~1.3.2", + "ejs": "~2.5.6", + "gaze": "~1.1.2", + "glob": "~7.1.1", + "inquirer": "~3.0.6", + "json-stringify-safe": "~5.0.1", + "mkdirp": "~0.5.1", + "npm-install-package": "~2.1.0", + "optimist": "~0.6.1", + "q": "~1.5.0", + "request": "~2.81.0", + "rgb2hex": "~0.1.0", + "safe-buffer": "~5.0.1", + "supports-color": "~3.2.3", + "url": "~0.11.0", + "validator": "~7.0.0", + "wdio-dot-reporter": "~0.0.8", + "wgxpath": "~1.0.0" }, "dependencies": { "babel-runtime": { @@ -9253,8 +9565,20 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", "requires": { - "core-js": "2.5.1", - "regenerator-runtime": "0.10.5" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.10.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" } }, "regenerator-runtime": { @@ -9272,7 +9596,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -9288,7 +9612,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "requires": { - "websocket-extensions": "0.1.1" + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -9307,7 +9631,7 @@ "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", "dev": true, "requires": { - "tr46": "0.0.3" + "tr46": "~0.0.1" } }, "which": { @@ -9315,7 +9639,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "widest-line": { @@ -9324,7 +9648,7 @@ "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -9333,7 +9657,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -9342,9 +9666,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "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" } } } @@ -9355,12 +9679,12 @@ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrappy": { @@ -9374,7 +9698,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -9383,9 +9707,9 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "xdg-basedir": { @@ -9405,11 +9729,11 @@ "resolved": "https://registry.npmjs.org/xolvio-ddp/-/xolvio-ddp-0.12.3.tgz", "integrity": "sha1-NqarlhKyQLWg0cCoNJCK8XwLjwI=", "requires": { - "bluebird": "2.11.0", + "bluebird": "^2.9.24", "ddp-ejson": "0.8.1-3", "ddp-underscore-patched": "0.8.1-2", - "faye-websocket": "0.9.4", - "request": "2.53.0" + "faye-websocket": "~0.9.4", + "request": "2.53.x" }, "dependencies": { "asn1": { @@ -9432,7 +9756,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "requires": { - "readable-stream": "1.0.34" + "readable-stream": "~1.0.26" } }, "bluebird": { @@ -9468,9 +9792,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime-types": "~2.0.3" } }, "hawk": { @@ -9478,10 +9802,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", "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" } }, "http-signature": { @@ -9490,7 +9814,7 @@ "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", "requires": { "asn1": "0.1.11", - "assert-plus": "0.1.5", + "assert-plus": "^0.1.5", "ctype": "0.5.3" } }, @@ -9509,7 +9833,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", "requires": { - "mime-db": "1.12.0" + "mime-db": "~1.12.0" } }, "node-uuid": { @@ -9532,10 +9856,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "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" } }, "request": { @@ -9543,23 +9867,23 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz", "integrity": "sha1-GAo66St7Y5gC5PlUXdj83rcddgw=", "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.9.0", - "combined-stream": "0.0.7", - "forever-agent": "0.5.2", - "form-data": "0.2.0", - "hawk": "2.3.1", - "http-signature": "0.10.1", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.0.14", - "node-uuid": "1.4.8", - "oauth-sign": "0.6.0", - "qs": "2.3.3", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3" + "aws-sign2": "~0.5.0", + "bl": "~0.9.0", + "caseless": "~0.9.0", + "combined-stream": "~0.0.5", + "forever-agent": "~0.5.0", + "form-data": "~0.2.0", + "hawk": "~2.3.0", + "http-signature": "~0.10.0", + "isstream": "~0.1.1", + "json-stringify-safe": "~5.0.0", + "mime-types": "~2.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.6.0", + "qs": "~2.3.1", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" } }, "string_decoder": { @@ -9579,8 +9903,8 @@ "resolved": "https://registry.npmjs.org/xolvio-fiber-utils/-/xolvio-fiber-utils-2.0.3.tgz", "integrity": "sha1-vsjXDHQGGjFjFbun0w0lyz6C3FA=", "requires": { - "fibers": "1.0.15", - "underscore": "1.8.3" + "fibers": "^1.0.7", + "underscore": "^1.8.3" } }, "xolvio-jasmine-expect": { @@ -9588,7 +9912,7 @@ "resolved": "https://registry.npmjs.org/xolvio-jasmine-expect/-/xolvio-jasmine-expect-1.1.0.tgz", "integrity": "sha1-vCud1ghCMR8EV59agtzqaisxnH0=", "requires": { - "jasmine-core": "2.8.0" + "jasmine-core": "^2.4.1" } }, "xolvio-sync-webdriverio": { @@ -9596,12 +9920,12 @@ "resolved": "https://registry.npmjs.org/xolvio-sync-webdriverio/-/xolvio-sync-webdriverio-9.0.1.tgz", "integrity": "sha1-WRri2MiqynQiZJWfzM+QtPndUWA=", "requires": { - "fibers": "1.0.15", - "meteor-promise": "0.8.6", - "underscore": "1.8.3", - "wdio-sync": "0.6.14", - "webdriverio": "4.8.0", - "xolvio-fiber-utils": "2.0.3" + "fibers": "^1.0.7", + "meteor-promise": "^0.8.2", + "underscore": "^1.8.3", + "wdio-sync": "^0.6.6", + "webdriverio": "^4.4.0", + "xolvio-fiber-utils": "^2.0.3" } }, "xtend": { @@ -9619,7 +9943,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "requires": { - "fd-slicer": "1.0.1" + "fd-slicer": "~1.0.1" } }, "zip-stream": { @@ -9627,10 +9951,10 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.0", - "lodash": "4.17.4", - "readable-stream": "2.3.3" + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" } } } diff --git a/src/lib/cucumberjs/hooks.js b/src/lib/cucumberjs/hooks.js index e79fb2c..bdd7636 100644 --- a/src/lib/cucumberjs/hooks.js +++ b/src/lib/cucumberjs/hooks.js @@ -107,8 +107,7 @@ module.exports = function hooks() { log.debug('[chimp][hooks] Forcibly exiting Cucumber'); process.send(JSON.stringify(reason)); - // Don't exit until the waitUntil uncaught promise bug is fixed in WebdriverIO - // exit(2); + exit(2); }); process.on('SIGINT', () => { diff --git a/tests/jasmine/jasmine-spec.js b/tests/jasmine/jasmine-spec.js index 6d128b2..69d0aff 100644 --- a/tests/jasmine/jasmine-spec.js +++ b/tests/jasmine/jasmine-spec.js @@ -1,6 +1,6 @@ describe('Chimp Jasmine', () => { describe('Page title', () => { - it('should be set by the Meteor method', () => { + it('should get the browser page title', () => { browser.url('http://google.com'); expect(browser.getTitle()).toBe('Google'); }); diff --git a/tests/mocha/mocha-spec.js b/tests/mocha/mocha-spec.js index ee05cb7..71f1dc7 100644 --- a/tests/mocha/mocha-spec.js +++ b/tests/mocha/mocha-spec.js @@ -1,6 +1,6 @@ describe('Chimp Mocha', () => { describe('Page title', () => { - it('should be set by the Meteor method @watch', () => { + it('should get the browser page title', () => { browser.url('http://google.com'); expect(browser.getTitle()).to.equal('Google'); }); From 302751bf8def0336326020ae7f7aab088e6b0489 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Wed, 15 May 2019 23:14:57 -0400 Subject: [PATCH 02/29] #138 Upgraded to Chrome 74. Also fixed a typo in a test. --- features/webdriver.feature | 2 +- package-lock.json | 508 ++++++++++++++++++++++--------------- package.json | 2 +- 3 files changed, 300 insertions(+), 212 deletions(-) diff --git a/features/webdriver.feature b/features/webdriver.feature index dc1cb3f..36d36f7 100644 --- a/features/webdriver.feature +++ b/features/webdriver.feature @@ -12,4 +12,4 @@ Feature: Use browser inside steps @not-watch Scenario: Visit Github When I visit "http://www.github.com" - Then I see the title of "The world's leading software development platform · GitHub" + Then I see the title of "The world’s leading software development platform · GitHub" diff --git a/package-lock.json b/package-lock.json index f90bae7..9a5c9fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -306,8 +306,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -404,14 +404,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "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" } }, "glob": { @@ -420,12 +420,12 @@ "dev": true, "optional": 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" } }, "has-unicode": { @@ -458,8 +458,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -599,10 +599,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": { @@ -623,7 +623,7 @@ "dev": true, "optional": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -666,10 +666,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -686,13 +686,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -701,7 +701,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -746,9 +746,9 @@ "dev": true, "optional": 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": { @@ -802,7 +802,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -2735,26 +2735,26 @@ } }, "chromedriver": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.40.0.tgz", - "integrity": "sha512-ewvRQ1HMk0vpFSWYCk5hKDoEz5QMPplx5w3C6/Me+03y1imr67l3Hxl9U0jn3mu2N7+c7BoC7JtNW6HzbRAwDQ==", + "version": "73.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-73.0.0.tgz", + "integrity": "sha512-RnZOTgAa3prPmA1QDHtrsEhppDGiosND5O/0ukWwGuU+EglCBHvYl1x3Mh/YypMIkmydRyq50XPrNYZadsM6rQ==", "requires": { "del": "^3.0.0", "extract-zip": "^1.6.7", - "kew": "^0.7.0", "mkdirp": "^0.5.1", - "request": "^2.87.0" + "request": "^2.88.0", + "tcp-port-used": "^1.0.1" }, "dependencies": { "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "assert-plus": { @@ -2767,6 +2767,19 @@ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", @@ -2799,6 +2812,11 @@ "rimraf": "^2.2.8" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extract-zip": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", @@ -2811,23 +2829,13 @@ } }, "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "1.0.6", + "combined-stream": "^1.0.6", "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "~1.0.0" - } - } } }, "globby": { @@ -2842,18 +2850,6 @@ "pinkie-promise": "^2.0.0" }, "dependencies": { - "glob": { - "version": "7.1.1", - "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -2867,11 +2863,11 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^5.1.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, @@ -2885,6 +2881,24 @@ "sshpk": "^1.7.0" } }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -2901,39 +2915,50 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "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", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" } } }, @@ -3376,8 +3401,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "deepmerge": { "version": "1.3.2", @@ -4294,9 +4318,9 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -4559,8 +4583,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -4598,7 +4622,7 @@ "bundled": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -4758,10 +4782,10 @@ "bundled": true, "optional": 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": { @@ -4769,9 +4793,9 @@ "bundled": 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": { @@ -4779,14 +4803,14 @@ "bundled": 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": { @@ -4809,12 +4833,12 @@ "bundled": true, "optional": 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": { @@ -4862,9 +4886,9 @@ "bundled": 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": { @@ -4872,8 +4896,8 @@ "bundled": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5007,15 +5031,15 @@ "bundled": true, "optional": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "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" } }, "nopt": { @@ -5032,10 +5056,10 @@ "bundled": 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": { @@ -5058,7 +5082,7 @@ "bundled": true, "optional": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -5110,10 +5134,10 @@ "bundled": 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": { @@ -5128,13 +5152,13 @@ "bundled": true, "optional": 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": { @@ -5142,28 +5166,28 @@ "bundled": 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": { @@ -5171,7 +5195,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -5207,15 +5231,15 @@ "bundled": 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": { @@ -5230,9 +5254,9 @@ "bundled": true, "optional": 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": { @@ -5240,7 +5264,7 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -5253,7 +5277,7 @@ "bundled": true, "optional": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -5266,9 +5290,9 @@ "bundled": true, "optional": 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": { @@ -5276,14 +5300,14 @@ "bundled": 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": { @@ -5291,7 +5315,7 @@ "bundled": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -5299,7 +5323,7 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -5335,7 +5359,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -6144,6 +6168,11 @@ "loose-envify": "^1.0.0" } }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -6424,6 +6453,11 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -6437,6 +6471,16 @@ "dev": true, "optional": true }, + "is2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", + "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^2.1.0", + "is-url": "^1.2.2" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6684,9 +6728,9 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify": { "version": "1.0.1", @@ -7821,6 +7865,11 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -8942,6 +8991,30 @@ "xtend": "^4.0.0" } }, + "tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==", + "requires": { + "debug": "4.1.0", + "is2": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -9401,6 +9474,21 @@ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", diff --git a/package.json b/package.json index ed0b5a8..5c1f9e9 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "^2.35", + "chromedriver": "^74.0.0", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From 356d0163998fa3e1e9ec4931761bcc12e6abf5aa Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Wed, 15 May 2019 23:25:21 -0400 Subject: [PATCH 03/29] 0.55.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c1f9e9..402a57d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chimpy", - "version": "0.54.0", + "version": "0.55.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From d1e48629a0791309be65dfed22c6b6e5eb543ea7 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Wed, 15 May 2019 23:39:49 -0400 Subject: [PATCH 04/29] Making .sh files use the unix endings on Windows machines too. --- .gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index cbdcbbc..f3f3f99 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ *.js text eol=lf +*.sh text eol=lf From 85b8132284cd716d146857cbd8a689512b5f57c9 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Wed, 15 May 2019 23:41:30 -0400 Subject: [PATCH 05/29] Oops. I didn't mean to bump the version of the package. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 402a57d..5c1f9e9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chimpy", - "version": "0.55.0", + "version": "0.54.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From 69954d3458957b6d3bfedebf85d35a78a57fe816 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 00:08:45 -0400 Subject: [PATCH 06/29] Committing the dist directory so I can sync this repo using npm/github in the short term. --- .gitignore | 1 - dist/__mocks__/bluebird.js | 5 + dist/__mocks__/chokidar.js | 11 + dist/__mocks__/colors.js | 5 + dist/__mocks__/ddp.js | 3 + dist/__mocks__/freeport.js | 3 + dist/__mocks__/hapi.js | 13 + dist/__mocks__/request.js | 5 + dist/__mocks__/selenium-standalone.js | 6 + dist/__mocks__/webdriverio.js | 5 + dist/__mocks__/xolvio-sync-webdriverio.js | 5 + dist/__tests__/browserstack-manager-spec.js | 19 + dist/__tests__/chimp-spec.js | 735 ++++++++++++++++++++ dist/__tests__/ddp-spec.js | 107 +++ dist/__tests__/options-loader.js | 51 ++ dist/__tests__/phantom-spec.js | 170 +++++ dist/__tests__/process-helper-spec.js | 196 ++++++ dist/__tests__/saucelabs-manager-spec.js | 19 + dist/__tests__/selenium-spec.js | 339 +++++++++ dist/__tests__/session-factory-spec.js | 64 ++ dist/__tests__/session-manager-spec.js | 238 +++++++ dist/__tests__/simian-reporter-spec.js | 88 +++ dist/__tests__/testingbot-manager-spec.js | 19 + dist/__tests__/world-spec.js | 1 + dist/bin/chimp.js | 72 ++ dist/bin/default.js | 145 ++++ dist/lib/babel-register.js | 7 + dist/lib/boolean-helper.js | 14 + dist/lib/browserstack-manager.js | 173 +++++ dist/lib/chimp-helper.js | 282 ++++++++ dist/lib/chimp-spec.js | 76 ++ dist/lib/chimp.js | 706 +++++++++++++++++++ dist/lib/chromedriver.js | 103 +++ dist/lib/ci.js | 12 + dist/lib/consoler.js | 48 ++ dist/lib/cucumberjs/cucumber-wrapper.js | 109 +++ dist/lib/cucumberjs/cucumber.js | 318 +++++++++ dist/lib/cucumberjs/hooks.js | 124 ++++ dist/lib/cucumberjs/world.js | 31 + dist/lib/ddp-watcher.js | 163 +++++ dist/lib/ddp.js | 58 ++ dist/lib/environment-variable-parsers.js | 52 ++ dist/lib/jasmine/jasmine-fiberized-api.js | 39 ++ dist/lib/jasmine/jasmine-helpers.js | 24 + dist/lib/jasmine/jasmine-wrapper.js | 96 +++ dist/lib/jasmine/jasmine.js | 127 ++++ dist/lib/log.js | 21 + dist/lib/mocha/mocha-fiberized-ui.js | 33 + dist/lib/mocha/mocha-helper.js | 34 + dist/lib/mocha/mocha-wrapper-instance.js | 5 + dist/lib/mocha/mocha-wrapper-spec.js | 124 ++++ dist/lib/mocha/mocha-wrapper.js | 78 +++ dist/lib/mocha/mocha.js | 156 +++++ dist/lib/options-loader.js | 57 ++ dist/lib/phantom.js | 90 +++ dist/lib/process-helper.js | 102 +++ dist/lib/saucelabs-manager.js | 109 +++ dist/lib/screenshot-helper.js | 19 + dist/lib/selenium.js | 192 +++++ dist/lib/session-factory.js | 53 ++ dist/lib/session-manager.js | 266 +++++++ dist/lib/simian-reporter.js | 65 ++ dist/lib/testingbot-manager.js | 108 +++ dist/lib/utils/escape-reg-exp.js | 10 + dist/lib/utils/fiberize.js | 45 ++ dist/lib/versions.js | 229 ++++++ 66 files changed, 6682 insertions(+), 1 deletion(-) create mode 100644 dist/__mocks__/bluebird.js create mode 100644 dist/__mocks__/chokidar.js create mode 100644 dist/__mocks__/colors.js create mode 100644 dist/__mocks__/ddp.js create mode 100644 dist/__mocks__/freeport.js create mode 100644 dist/__mocks__/hapi.js create mode 100644 dist/__mocks__/request.js create mode 100644 dist/__mocks__/selenium-standalone.js create mode 100644 dist/__mocks__/webdriverio.js create mode 100644 dist/__mocks__/xolvio-sync-webdriverio.js create mode 100644 dist/__tests__/browserstack-manager-spec.js create mode 100644 dist/__tests__/chimp-spec.js create mode 100644 dist/__tests__/ddp-spec.js create mode 100644 dist/__tests__/options-loader.js create mode 100644 dist/__tests__/phantom-spec.js create mode 100644 dist/__tests__/process-helper-spec.js create mode 100644 dist/__tests__/saucelabs-manager-spec.js create mode 100644 dist/__tests__/selenium-spec.js create mode 100644 dist/__tests__/session-factory-spec.js create mode 100644 dist/__tests__/session-manager-spec.js create mode 100644 dist/__tests__/simian-reporter-spec.js create mode 100644 dist/__tests__/testingbot-manager-spec.js create mode 100644 dist/__tests__/world-spec.js create mode 100644 dist/bin/chimp.js create mode 100644 dist/bin/default.js create mode 100644 dist/lib/babel-register.js create mode 100644 dist/lib/boolean-helper.js create mode 100644 dist/lib/browserstack-manager.js create mode 100644 dist/lib/chimp-helper.js create mode 100644 dist/lib/chimp-spec.js create mode 100644 dist/lib/chimp.js create mode 100644 dist/lib/chromedriver.js create mode 100644 dist/lib/ci.js create mode 100644 dist/lib/consoler.js create mode 100644 dist/lib/cucumberjs/cucumber-wrapper.js create mode 100644 dist/lib/cucumberjs/cucumber.js create mode 100644 dist/lib/cucumberjs/hooks.js create mode 100644 dist/lib/cucumberjs/world.js create mode 100644 dist/lib/ddp-watcher.js create mode 100644 dist/lib/ddp.js create mode 100644 dist/lib/environment-variable-parsers.js create mode 100644 dist/lib/jasmine/jasmine-fiberized-api.js create mode 100644 dist/lib/jasmine/jasmine-helpers.js create mode 100644 dist/lib/jasmine/jasmine-wrapper.js create mode 100644 dist/lib/jasmine/jasmine.js create mode 100644 dist/lib/log.js create mode 100644 dist/lib/mocha/mocha-fiberized-ui.js create mode 100644 dist/lib/mocha/mocha-helper.js create mode 100644 dist/lib/mocha/mocha-wrapper-instance.js create mode 100644 dist/lib/mocha/mocha-wrapper-spec.js create mode 100644 dist/lib/mocha/mocha-wrapper.js create mode 100644 dist/lib/mocha/mocha.js create mode 100644 dist/lib/options-loader.js create mode 100644 dist/lib/phantom.js create mode 100644 dist/lib/process-helper.js create mode 100644 dist/lib/saucelabs-manager.js create mode 100644 dist/lib/screenshot-helper.js create mode 100644 dist/lib/selenium.js create mode 100644 dist/lib/session-factory.js create mode 100644 dist/lib/session-manager.js create mode 100644 dist/lib/simian-reporter.js create mode 100644 dist/lib/testingbot-manager.js create mode 100644 dist/lib/utils/escape-reg-exp.js create mode 100644 dist/lib/utils/fiberize.js create mode 100644 dist/lib/versions.js diff --git a/.gitignore b/.gitignore index 029b6fb..0a87580 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ npm-debug.log node_modules tmp -dist output.json diff --git a/dist/__mocks__/bluebird.js b/dist/__mocks__/bluebird.js new file mode 100644 index 0000000..cc9c257 --- /dev/null +++ b/dist/__mocks__/bluebird.js @@ -0,0 +1,5 @@ +'use strict'; + +jest.autoMockOff(); +module.exports = require.requireActual('bluebird'); +jest.autoMockOn(); \ No newline at end of file diff --git a/dist/__mocks__/chokidar.js b/dist/__mocks__/chokidar.js new file mode 100644 index 0000000..88a4b98 --- /dev/null +++ b/dist/__mocks__/chokidar.js @@ -0,0 +1,11 @@ +'use strict'; + +var chokidar = { + watcher: { + on: jest.genMockFunction(), + once: jest.genMockFunction() + }, + watch: jest.genMockFunction() +}; +chokidar.watch.mockReturnValue(chokidar.watcher); +module.exports = chokidar; \ No newline at end of file diff --git a/dist/__mocks__/colors.js b/dist/__mocks__/colors.js new file mode 100644 index 0000000..79d5a79 --- /dev/null +++ b/dist/__mocks__/colors.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + supportsColor: {} +}; \ No newline at end of file diff --git a/dist/__mocks__/ddp.js b/dist/__mocks__/ddp.js new file mode 100644 index 0000000..7954f22 --- /dev/null +++ b/dist/__mocks__/ddp.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = jest.genMockFn(); \ No newline at end of file diff --git a/dist/__mocks__/freeport.js b/dist/__mocks__/freeport.js new file mode 100644 index 0000000..7954f22 --- /dev/null +++ b/dist/__mocks__/freeport.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = jest.genMockFn(); \ No newline at end of file diff --git a/dist/__mocks__/hapi.js b/dist/__mocks__/hapi.js new file mode 100644 index 0000000..04f62ec --- /dev/null +++ b/dist/__mocks__/hapi.js @@ -0,0 +1,13 @@ +'use strict'; + +var Hapi = { + instance: { + connection: jest.genMockFn(), + route: jest.genMockFn(), + start: jest.genMockFn() + }, + Server: function Server() { + return Hapi.instance; + } +}; +module.exports = Hapi; \ No newline at end of file diff --git a/dist/__mocks__/request.js b/dist/__mocks__/request.js new file mode 100644 index 0000000..d5bfd5b --- /dev/null +++ b/dist/__mocks__/request.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + post: jest.genMockFunction() +}; \ No newline at end of file diff --git a/dist/__mocks__/selenium-standalone.js b/dist/__mocks__/selenium-standalone.js new file mode 100644 index 0000000..6837e0d --- /dev/null +++ b/dist/__mocks__/selenium-standalone.js @@ -0,0 +1,6 @@ +'use strict'; + +module.exports = { + install: jest.genMockFunction(), + start: jest.genMockFunction() +}; \ No newline at end of file diff --git a/dist/__mocks__/webdriverio.js b/dist/__mocks__/webdriverio.js new file mode 100644 index 0000000..482bde4 --- /dev/null +++ b/dist/__mocks__/webdriverio.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + remote: jest.genMockFunction() +}; \ No newline at end of file diff --git a/dist/__mocks__/xolvio-sync-webdriverio.js b/dist/__mocks__/xolvio-sync-webdriverio.js new file mode 100644 index 0000000..b69c6fd --- /dev/null +++ b/dist/__mocks__/xolvio-sync-webdriverio.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = { + wrapAsyncObject: jest.genMockFunction() +}; \ No newline at end of file diff --git a/dist/__tests__/browserstack-manager-spec.js b/dist/__tests__/browserstack-manager-spec.js new file mode 100644 index 0000000..b3971cd --- /dev/null +++ b/dist/__tests__/browserstack-manager-spec.js @@ -0,0 +1,19 @@ +jest.dontMock('../lib/browserstack-manager'); +describe('BrowserStack Session Manager', function () { + describe('Constructor', function () { + it('sets the browserStackUrl', function () { + var BrowserStackManager = require('../lib/browserstack-manager'); + + var options = { + port: 1234, + browser: 'something', + user: 'testus3r', + key: '12345678', + host: 'browserstack.com' + }; + var browserStackBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host; + var session = new BrowserStackManager(options); + expect(session.options.browserStackUrl).toBe(browserStackBaseUrl); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/chimp-spec.js b/dist/__tests__/chimp-spec.js new file mode 100644 index 0000000..ccbdaef --- /dev/null +++ b/dist/__tests__/chimp-spec.js @@ -0,0 +1,735 @@ +jest.dontMock('../lib/chimp.js'); +jest.dontMock('../lib/boolean-helper'); +jest.dontMock('underscore'); +jest.dontMock('async'); +jest.dontMock('wrappy'); +describe('Chimp', function () { + var Chimp = require('../lib/chimp'); + + describe('constructor', function () {// moved to src/lib/chimp-specs.js + }); + describe('bin path', function () { + it('sets the bin path to the location of chimp', function () { + expect(Chimp.bin.match(/bin\/chimp$/)).not.toBe(null); + }); + }); + describe('init', function () { + it('calls selectMode right away if it does not find package.json', function () { + var chimp = new Chimp(); + var restore = chimp.fs.existsSync; + chimp.fs.existsSync = jest.genMockFn().mockReturnValue(false); + chimp.informUser = jest.genMockFunction(); + chimp.exec = jest.genMockFunction(); + chimp.selectMode = jest.genMockFunction(); + + var callback = function () {}; + + chimp.init(callback); + expect(chimp.selectMode).toBeCalledWith(callback); + expect(chimp.exec).not.toBeCalled(); + chimp.fs.existsSync = restore; + }); + it('does not executes npm install if the offline option is set', function () { + var chimp = new Chimp({ + offline: true + }); + var restore = chimp.fs.existsSync; + chimp.fs.existsSync = jest.genMockFn().mockReturnValue(true); + chimp.informUser = jest.genMockFunction(); + chimp.exec = jest.genMockFunction(); + chimp.selectMode = jest.genMockFunction(); + var callback = jest.genMockFunction(); + chimp.init(callback); + expect(chimp.exec.mock.calls.length).toBe(0); + expect(chimp.selectMode.mock.calls.length).toBe(1); + expect(callback.mock.calls.length).toBe(0); + chimp.fs.existsSync = restore; + }); + it('executes npm install then calls selectMode when there are no errors', function () { + var chimp = new Chimp(); + var restore = chimp.fs.existsSync; + chimp.fs.existsSync = jest.genMockFn().mockReturnValue(true); + chimp.informUser = jest.genMockFunction(); + chimp.exec = jest.genMockFunction().mockImplementation(function (cmd, callback) { + return callback(null); + }); + chimp.selectMode = jest.genMockFunction(); + + var callback = function () {}; + + chimp.init(callback); + expect(chimp.selectMode).toBeCalledWith(callback); + chimp.fs.existsSync = restore; + }); + }); + describe('selectMode', function () { + it('runs in single mode when no mode option is passed', function () { + var chimp = new Chimp(); + chimp.run = jest.genMockFunction(); + chimp.start = jest.genMockFunction(); + chimp.watch = jest.genMockFunction(); + chimp.server = jest.genMockFunction(); + + var callback = function () {}; + + chimp.selectMode(callback); + expect(chimp.run).toBeCalledWith(callback); + expect(chimp.run.mock.calls.length).toBe(1); + expect(chimp.start.mock.calls.length).toBe(0); + expect(chimp.watch.mock.calls.length).toBe(0); + expect(chimp.server.mock.calls.length).toBe(0); + }); + it('runs in watch mode)', function () { + var chimp = new Chimp({ + watch: true + }); + chimp.run = jest.genMockFunction(); + chimp.start = jest.genMockFunction(); + chimp.watch = jest.genMockFunction(); + chimp.server = jest.genMockFunction(); + chimp.selectMode(); + expect(chimp.watch).toBeCalledWith(); + expect(chimp.watch.mock.calls.length).toBe(1); + expect(chimp.run.mock.calls.length).toBe(0); + expect(chimp.start.mock.calls.length).toBe(0); + expect(chimp.server.mock.calls.length).toBe(0); + }); + it('runs in server mode)', function () { + var chimp = new Chimp({ + server: true + }); + chimp.run = jest.genMockFunction(); + chimp.start = jest.genMockFunction(); + chimp.watch = jest.genMockFunction(); + chimp.server = jest.genMockFunction(); + chimp.selectMode(); + expect(chimp.server.mock.calls.length).toBe(1); + expect(typeof chimp.server.mock.calls[0][0]).toBe('undefined'); + expect(chimp.watch.mock.calls.length).toBe(0); + expect(chimp.run.mock.calls.length).toBe(0); + expect(chimp.start.mock.calls.length).toBe(0); + }); + }); + describe('watch', function () { + it('initializes chokidar', function () { + var chokidar = require('chokidar'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + path: 'abc' + }; + var chimp = new Chimp(options); + chimp.run = jest.genMockFunction(); + chimp.watch(); + expect(chokidar.watch.mock.calls[0][0]).toEqual([options.path]); + }); + it('all listener is registered after watcher is ready', function () { + var chokidar = require('chokidar'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + path: 'abc' + }; + var chimp = new Chimp(options); + chimp.run = jest.genMockFunction(); + chokidar.watcher.on = jest.genMockFunction(); + chimp.watch(); + expect(chokidar.watcher.once.mock.calls[0][0]).toBe('ready'); + var readyCallback = chokidar.watcher.once.mock.calls[0][1]; + readyCallback(); + expect(chokidar.watcher.on.mock.calls[0][0]).toBe('all'); + }); + it('an non-unlink event triggers the interrupt and run sequence', function () { + var chokidar = require('chokidar'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp(); + chimp.run = jest.genMockFunction(); + var self = this; + self.func = null; + self.timeout = null; + + chimp._getDebouncedFunction = function (func, timeout) { + self.allCallback = func; + self.timeout = timeout; + }; + + chimp.watch(); + var readyCallback = chokidar.watcher.once.mock.calls[0][1]; + readyCallback(); + chimp.rerun = jest.genMockFunction(); + self.allCallback('not-unlink'); + expect(chimp.rerun.mock.calls.length).toBe(1); + }); + it('a deleted feature does not trigger the interrupt and run sequence', function () { + var chokidar = require('chokidar'); + + var Chimp = require('../lib/chimp.js'); //var _on = process.on; + //process.on = jest.genMockFunction(); + + + var chimp = new Chimp(); + chimp.run = jest.genMockFunction(); + chimp.watch(); + var readyCallback = chokidar.watcher.once.mock.calls[0][1]; + readyCallback(); + var allCallback = chokidar.watcher.on.mock.calls[0][1]; + chimp.rerun = jest.genMockFunction(); + allCallback('unlink', '/path/some.feature'); + expect(chimp.rerun.mock.calls.length).toBe(0); //process.on = _on; + }); + it('a deleted non-feature triggers the interrupt and run sequence', function () { + var chokidar = require('chokidar'); + + var async = require('async'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp(); + chimp.run = jest.genMockFunction(); + var self = this; + self.func = null; + self.timeout = null; + + chimp._getDebouncedFunction = function (func, timeout) { + self.allCallback = func; + self.timeout = timeout; + }; + + chimp.watch(); + var readyCallback = chokidar.watcher.once.mock.calls[0][1]; + readyCallback(); + chimp.rerun = jest.genMockFunction(); + this.allCallback('unlink', '/path/some.feature.js'); + expect(chimp.rerun.mock.calls.length).toBe(1); + }); + it('runs on startup', function () { + var chokidar = require('chokidar'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp(); + chimp.run = jest.genMockFunction(); + chimp.watch(); + var readyCallback = chokidar.watcher.once.mock.calls[0][1]; + readyCallback(); + expect(chimp.run.mock.calls.length).toBe(1); + }); + it('uses the watchTag with cucumber', function () { + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + watchTags: '@someTag,@andAnotherTag' + }); + chimp.watch(); + expect(chimp.options.tags).toBe('@someTag,@andAnotherTag'); + }); + }); + describe('server', function () { + it('listens on a freeport when server-port is not provided', function () { + var freeport = require('freeport'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp(); + chimp.server(); + expect(freeport.mock.calls.length).toBe(1); + }); + it('listens on the server-port when it is provided', function () { + var freeport = require('freeport'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverPort: 1234 + }); + chimp._startServer = jest.genMockFn(); + chimp.server(); + expect(chimp._startServer.mock.calls.length).toBe(1); + expect(chimp._startServer.mock.calls[0][0]).toBe(1234); + expect(freeport.mock.calls.length).toBe(0); + }); + it('handshakes with a DDP endpoint with the server address on startup if ddp is passed', function () {// TODO having some issues testing this. DDPClient is tricky to jest up + }); + it('exposes the run and interrupt endpoints', function () { + var Hapi = require('hapi'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverHost: 'localhost', + serverPort: 1234 + }); + chimp.server(); + expect(Hapi.instance.route.mock.calls[0][0].method).toBe('GET'); + expect(Hapi.instance.route.mock.calls[0][0].path).toBe('/run'); + expect(Hapi.instance.route.mock.calls[1][0].method).toBe('GET'); + expect(Hapi.instance.route.mock.calls[1][0].path).toBe('/run/{absolutePath*}'); + expect(Hapi.instance.route.mock.calls[2][0].method).toBe('GET'); + expect(Hapi.instance.route.mock.calls[2][0].path).toBe('/interrupt'); + expect(Hapi.instance.route.mock.calls[3][0].method).toBe('GET'); + expect(Hapi.instance.route.mock.calls[3][0].path).toBe('/runAll'); + }); + it('returns cucumber results when run handler is called successfully', function () { + var Hapi = require('hapi'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverHost: 'localhost', + serverPort: 1234 + }); + chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, [null, [null, 'cucumber results']]); + }); + chimp.server(); + var getHandler = Hapi.instance.route.mock.calls[0][0].handler; + var headerMock = jest.genMockFn(); + var reply = jest.genMockFn().mockReturnValue({ + header: headerMock + }); + getHandler(null, reply); + expect(reply.mock.calls[0][0]).toBe('cucumber results'); + }); + it('returns cucumber results when run handler is called successfully with a feature', function () { + var Hapi = require('hapi'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverHost: 'localhost', + serverPort: 1234 + }); + chimp.options._ = {}; + chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, [null, [null, 'cucumber results']]); + }); + chimp.server(); + var getHandler = Hapi.instance.route.mock.calls[1][0].handler; + var request = { + params: { + absolutePath: 'blah' + } + }; + var headerMock = jest.genMockFn(); + var reply = jest.genMockFn().mockReturnValue({ + header: headerMock + }); + getHandler(request, reply); + expect(chimp.options._[2]).toBe(request.params.absolutePath); + expect(reply.mock.calls[0][0]).toBe('cucumber results'); + }); + it('returns "done" when interrupt handler is called successfully', function () { + var Hapi = require('hapi'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverHost: 'localhost', + serverPort: 1234 + }); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, [null, [null, 'cucumber results']]); + }); + chimp.server(); + var interruptHandler = Hapi.instance.route.mock.calls[2][0].handler; + var headerMock = jest.genMockFn(); + var reply = jest.genMockFn().mockReturnValue({ + header: headerMock + }); + interruptHandler(null, reply); + expect(reply.mock.calls[0][0]).toBe('done'); + }); + it('returns cucumber results when runAll handler is called successfully', function () { + var Hapi = require('hapi'); + + var Chimp = require('../lib/chimp.js'); + + var chimp = new Chimp({ + serverHost: 'localhost', + serverPort: 1234 + }); + chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, [null, [null, 'cucumber results']]); + }); + chimp.server(); + var getHandler = Hapi.instance.route.mock.calls[3][0].handler; + var headerMock = jest.genMockFn(); + var reply = jest.genMockFn().mockReturnValue({ + header: headerMock + }); + getHandler(null, reply); + expect(reply.mock.calls[0][0]).toBe('cucumber results'); + }); + }); + describe('run', function () { + it('interrupts any existing processes, starts processes and calls callback', function () { + var chimp = new Chimp(); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + var callback = jest.genMockFn(); + chimp.run(callback); + expect(chimp.interrupt.mock.calls.length).toBe(2); + expect(chimp._startProcesses.mock.calls.length).toBe(1); + expect(callback.mock.calls.length).toBe(1); + }); + it('detects errors in interrupt and calls callback with an error', function () { + var chimp = new Chimp(); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback('error'); + }); + var callback = jest.genMockFn(); + chimp.run(callback); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toEqual('error'); + }); + it('stops all processes on successful runs', function () { + var chimp = new Chimp(); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + chimp.stop = jest.genMockFunction(); + var callback = jest.genMockFn(); + chimp.run(callback); + expect(chimp.interrupt.mock.calls.length).toBe(2); + }); + it('passes the options to the simian reporter constructor', function () { + var SimianReporter = require('../lib/simian-reporter'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + simianAccessToken: 'present' + }; + var chimp = new Chimp(options); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { + return callback(); + }); + var callback = jest.genMockFn(); + chimp.run(callback); + expect(SimianReporter.mock.calls[0][0]).toBe(options); + expect(SimianReporter.mock.calls.length).toBe(1); + }); + it('calls the simian reporter when the run is finished', function () { + jest.dontMock('../lib/simian-reporter'); + + var SimianReporter = require('../lib/simian-reporter'); + + SimianReporter.prototype.report = jest.genMockFn(); + + var Chimp = require('../lib/chimp.js'); + + var options = { + simianAccessToken: 'present' + }; + var chimp = new Chimp(options); + chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, 'hello'); + }); + chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { + return callback(null, [undefined, '[]']); + }); + var callback = jest.genMockFn(); + chimp.run(callback); + expect(SimianReporter.instance.report.mock.calls.length).toBe(1); + }); + }); + describe('interrupt', function () { + it('calls interrupt on all processes in the reverse order that they were started', function () { + jest.dontMock('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + var orderCounter = 0; + + function Process() { + this.orderRun = -1; + } + + Process.prototype.interrupt = function (callback) { + this.orderRun = orderCounter++; + callback(); + }; + + var process1 = new Process('1'); + var process2 = new Process('2'); + chimp.processes = [process1, process2]; + var callback = jest.genMockFunction(); + chimp.interrupt(callback); + expect(process2.orderRun).toBe(0); + expect(process1.orderRun).toBe(1); + }); + it('bubbles callback without modifying the arguments', function () { + var async = require('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + chimp.processes = [{ + interrupt: jest.genMockFn() + }]; + var someArgs = ['some', 'args']; + async.series = jest.genMockFunction().mockImplementation(function (processes, callback) { + callback.apply(this, someArgs); + }); + var callback = jest.genMockFn(); + chimp.interrupt(callback); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0]).toEqual(['some', 'args']); + }); + it('calls the callback when no processes have been started', function () { + var async = require('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + chimp.isInterrupting = true; + async.series = jest.genMockFn(); + var callback = jest.genMockFn(); + chimp.interrupt(callback); + expect(chimp.isInterrupting).toBe(false); + expect(callback.mock.calls.length).toBe(1); + expect(async.series.mock.calls.length).toBe(0); + }); + it('cancels the isInterrupting flag after all processes have run with no errors', function () { + var _ = require('underscore'); + + var async = require('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + chimp.isInterrupting = true; + chimp.processes = ['yo']; + _.collect = jest.genMockFn(); + async.series = jest.genMockFn().mockImpl(function (procs, func) { + func(); + }); + chimp.interrupt(jest.genMockFn()); + expect(chimp.isInterrupting).toBe(false); + }); + it('cancels the isInterrupting flag after all processes have run with errors', function () { + var _ = require('underscore'); + + var async = require('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + chimp.isInterrupting = true; + chimp.processes = ['yo']; + _.collect = jest.genMockFn(); + async.series = jest.genMockFn().mockImpl(function (procs, func) { + func('error'); + }); + chimp.interrupt(jest.genMockFn()); + expect(chimp.isInterrupting).toBe(false); + }); + }); + describe('rerun', function () { + it('calls run if interrupt is successful', function () { + var chimp = new Chimp(); + chimp.interrupt = jest.genMockFn().mockImplementation(function (callback) { + callback(null); + }); + chimp.run = jest.genMockFn(); + chimp.rerun(); + expect(chimp.run.mock.calls.length).toBe(1); + }); + it('does not rerun if an rerun is in progress', function () { + var chimp = new Chimp(); + chimp.run = jest.genMockFn(); + chimp.isInterrupting = true; + chimp.rerun(); + expect(chimp.run.mock.calls.length).toBe(0); + }); + it('reruns once it has finished rerunning', function () { + var chimp = new Chimp(); + chimp.run = jest.genMockFn().mockImplementation(function (callback) { + callback(null); // after the first run, replace this mockImplementation with a standard mock so we + // can assert on that the rerun interrupts after a successful run + + chimp.run = jest.genMockFn(); + }); + chimp.rerun(); + chimp.rerun(); + expect(chimp.run.mock.calls.length).toBe(1); + }); + }); + describe('_startProcesses', function () { + it('creates an array of series of processes and starts them', function () { + var async = require('async'); + + var Chimp = require('../lib/chimp.js'); + + async.series = jest.genMockFn(); + var chimp = new Chimp(); + var processes = []; + chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); + + chimp._startProcesses(); + + expect(chimp._createProcesses.mock.calls.length).toBe(1); + expect(chimp.processes).toBe(processes); + }); + it('start each process in its own context and calls callback once', function () { + jest.dontMock('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + + function Process() { + this.state = 'constructed'; + } + + Process.prototype.start = function (callback) { + this.state = 'started'; + callback(); + }; + + var processes = [new Process(), new Process()]; + chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); + var callback = jest.genMockFunction(); + + chimp._startProcesses(callback); + + expect(typeof callback.mock.calls[0][0]).toBe('undefined'); + expect(callback.mock.calls.length).toBe(1); + expect(processes[0].state).toBe('started'); + expect(processes[1].state).toBe('started'); + }); + it('bubbles up errors in callback if an processes callback with an error', function () { + jest.dontMock('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + + function Process() { + this.state = 'constructed'; + } + + Process.prototype.start = function (callback) { + this.state = 'started'; + callback('error!'); + }; + + var processes = [new Process('1'), new Process('2')]; + chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); + var callback = jest.genMockFunction(); + + chimp._startProcesses(callback); + + expect(callback.mock.calls[0][0]).toBe('error!'); + expect(callback.mock.calls.length).toBe(1); + expect(processes[0].state).toBe('started'); + expect(processes[1].state).toBe('constructed'); + }); + it('cancels the isInterrupting flag on error', function () { + var _ = require('underscore'); + + var async = require('async'); + + var Chimp = require('../lib/chimp'); + + var chimp = new Chimp(); + chimp.isInterrupting = true; + chimp._createProcesses = jest.genMockFn(); + _.collect = jest.genMockFn().mockReturnValue(['yo']); + async.series = jest.genMockFn().mockImpl(function (procs, func) { + func('error'); + }); + + chimp._startProcesses(jest.genMockFn()); + + expect(chimp.isInterrupting).toBe(false); + }); + }); + describe('_createProcesses', function () { + it('adds a phantom', function () { + var Phantom = require('../lib/phantom.js'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + browser: 'phantomjs' + }; + var chimp = new Chimp(options); + + var processes = chimp._createProcesses(); + + expect(Phantom.mock.calls[0][0]).toBe(options); + expect(processes.length).toBe(2); + }); + it('adds a selenium when no browser is passed', function () { + var Selenium = require('../lib/selenium.js'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + browser: 'some-browser', + host: '' + }; + var chimp = new Chimp(options); + + var processes = chimp._createProcesses(); + + expect(Selenium.mock.calls[0][0]).toBe(options); + expect(processes.length).toBe(2); + }); + it('does not add selenium when SauceLabs is the host', function () { + var Selenium = require('../lib/selenium.js'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + host: 'saucelabs' + }; + var chimp = new Chimp(options); + + var processes = chimp._createProcesses(); + + expect(Selenium.mock.calls.length).toBe(0); + expect(processes.length).toBe(1); + }); + it('adds cucumber last', function () { + jest.dontMock('../lib/cucumberjs/cucumber.js'); + + var Chimp = require('../lib/chimp.js'); + + var options = { + browser: 'phantomjs' + }; + var chimp = new Chimp(options); + + var processes = chimp._createProcesses(); + + expect(typeof processes[0].cucumberChild).toBe('undefined'); + expect(typeof processes[1].cucumberChild).not.toBe('undefined'); + }); + it('should add at least one process', function () { + var chimp = new Chimp({ + browser: 'phantomjs' + }); + + var processes = chimp._createProcesses(); + + expect(processes.length).not.toBe(0); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/ddp-spec.js b/dist/__tests__/ddp-spec.js new file mode 100644 index 0000000..d2067a3 --- /dev/null +++ b/dist/__tests__/ddp-spec.js @@ -0,0 +1,107 @@ +jest.dontMock('../lib/ddp.js'); +describe('DDP Wrapper', function () { + var DDP = require('../lib/ddp'); + + describe('constructor', function () { + beforeEach(function () { + delete process.env.ROOT_URL; + + for (var key in process.env) { + if (key.indexOf('chimp.ddp') !== -1) { + delete process.env[key]; + } + } + }); + it('sets ROOT_URL env var to be the chimp.ddp env var', function () { + process.env['chimp.ddp0'] = 'http://here.com:3000'; + new DDP(); + expect(process.env.ROOT_URL).toEqual('http://here.com:3000'); + }); + it('does not change the ROOT_URL when it is provided', function () { + process.env.ROOT_URL = 'http://somewhere.com:3000'; + process.env['chimp.ddp0'] = 'http://here.com:3000'; + new DDP(); + expect(process.env.ROOT_URL).toEqual('http://somewhere.com:3000'); + }); + it('parses the DDP host of [chimp.ddp0] if no url provided', function () { + process.env['chimp.ddp0'] = 'http://here.com:3000'; + var ddp = new DDP(); + expect(ddp.url.host).toEqual('here.com:3000'); + }); + it('parses the DDP host of provided url', function () { + process.env['chimp.ddp0'] = 'http://here.com:3000'; + process.env['chimp.ddp1'] = 'http://here.com:3001'; + var ddp = new DDP('http://here.com:3001'); + expect(ddp.url.host).toEqual('here.com:3001'); + }); + }); + describe('connect', function () { + it('returns an async-wrapped DDPClient', function () {// TODO check that the DDPClient return value is passed to wrapAsyncObject + // and that the connect', 'call', 'apply', 'callWithRandomSeed', 'subscribe' methods are passed in + }); + it('does not set sync-by-default when chimp.sync is false', function () {// TODO + }); + }); + describe('_getUrl', function () { + it('throws an error if http or https are not passed', function () { + var thrower = function () { + new DDP()._getUrl('blah.com'); + }; + + expect(thrower).toThrowError('[chimp][ddp] DDP url must contain the protocol'); + }); + it('parses http URLs', function () { + var url = new DDP()._getUrl('http://somewhere:3000'); + + expect(url.hostname).toEqual('somewhere'); + expect(url.port).toEqual('3000'); + expect(url.protocol).toEqual('http:'); + }); + it('parses https URLs', function () { + var url = new DDP()._getUrl('https://somewhere:3000'); + + expect(url.hostname).toEqual('somewhere'); + expect(url.port).toEqual('3000'); + expect(url.protocol).toEqual('https:'); + }); + }); + describe('_getOptions', function () { + it('sets the port and hostname using the instance url object', function () { + var ddp = new DDP(); + ddp.url = { + hostname: 'the.host', + port: 3130, + protocol: 'http:' + }; + + var options = ddp._getOptions(); + + expect(options.host).toEqual('the.host'); + expect(options.port).toEqual(3130); + }); + it('sets the ssl to false when the protocol is http', function () { + var ddp = new DDP(); + ddp.url = { + hostname: 'the.host', + port: 3130, + protocol: 'http:' + }; + + var options = ddp._getOptions(); + + expect(options.ssl).toEqual(false); + }); + it('sets the ssl to true when the protocol is https', function () { + var ddp = new DDP(); + ddp.url = { + hostname: 'the.host', + port: 3130, + protocol: 'https:' + }; + + var options = ddp._getOptions(); + + expect(options.ssl).toEqual(true); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/options-loader.js b/dist/__tests__/options-loader.js new file mode 100644 index 0000000..bd67e1c --- /dev/null +++ b/dist/__tests__/options-loader.js @@ -0,0 +1,51 @@ +jest.dontMock('../lib/options-loader'); +jest.dontMock('path'); +describe('Options Loader', () => { + const optionsLoader = require('../lib/options-loader'); + + describe('getOptions', () => { + const fs = require('fs'); + + beforeEach(() => { + spyOn(process, 'cwd').and.returnValue('/myFolder'); + optionsLoader._exit = jest.genMockFn(); + optionsLoader._requireFile = jest.genMockFn(); + }); + it('should use the first argument as the config file if it is a js file containing "chimp"', () => { + const argv = ['not', 'applicable', 'my-chimp-file.js']; + optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); + fs.existsSync = jest.genMockFn().mockReturnValue(true); + optionsLoader.getOptions(); + expect(optionsLoader._requireFile.mock.calls[0][0]).toBe('/myFolder/my-chimp-file.js'); + }); + it('should remove the config file from the arguments', () => { + fs.existsSync = jest.genMockFn().mockReturnValue(true); + const argv = ['not', 'applicable', 'my-chimp-file.js', '2nd-arg']; + optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); + optionsLoader.getOptions(); + expect(argv).toEqual(['not', 'applicable', '2nd-arg']); + }); + it('it should log an error if the provided config file does not exist and exist with a code 1', () => { + const argv = ['not', 'applicable', 'my-chimp-file.js']; + optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); + fs.existsSync = jest.genMockFn().mockReturnValue(false); + optionsLoader.getOptions(); + expect(optionsLoader._exit.mock.calls[0][0]).toBe(1); + }); + it('should load the chimp.js file if it exists in the current directory', () => { + const argv = ['not', 'applicable', 'not-a-config-file.js']; + optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); + fs.existsSync = jest.genMockFn().mockReturnValue(true); + optionsLoader.getOptions(); + expect(optionsLoader._requireFile.mock.calls[0][0]).toBe('/myFolder/chimp.js'); + }); + it('should load default values from default.js', () => { + const argv = ['not', 'applicable', 'not-a-config-file.js']; + optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); + optionsLoader._getDefaultConfigFilePath = jest.genMockFn().mockReturnValue('defaultFileLocation'); + fs.existsSync = jest.genMockFn().mockReturnValue(true); + optionsLoader.getOptions(); + expect(optionsLoader._requireFile.mock.calls[1][0]).toBe('defaultFileLocation'); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/phantom-spec.js b/dist/__tests__/phantom-spec.js new file mode 100644 index 0000000..d44acf5 --- /dev/null +++ b/dist/__tests__/phantom-spec.js @@ -0,0 +1,170 @@ +jest.dontMock('../lib/phantom'); +describe('Phantom', function () { + describe('constructor', function () { + var Phantom = require('../lib/phantom'); + + it('throws when options is not passed', function () { + var createPhantom = function () { + new Phantom(); + }; + + expect(createPhantom).toThrowError('options is required'); + }); + it('throws when options.port is not passed', function () { + var options = {}; + + var createPhantom = function () { + new Phantom(options); + }; + + expect(createPhantom).toThrowError('options.port is required'); + }); + }); + describe('start', function () { + it('uses options.port to start phantom in webdriver mode', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.start(); + expect(processHelper.start.mock.calls.length).toBe(1); + expect(processHelper.start.mock.calls[0][0].args).toEqual(['--webdriver', 9876, '--ignore-ssl-errors', 'false']); + }); + it('sets this.child to the phantom child process', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var childProcess = {}; + processHelper.start.mockReturnValue(childProcess); + var phantom = new Phantom({ + port: 9876 + }); + expect(phantom.child).toBe(null); + phantom.start(null); + expect(phantom.child).toBe(childProcess); + }); + it('calls the callback with null when phantom starts successfully', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + processHelper.start = jest.genMockFn().mockImplementation(function (options, callback) { + callback(); + }); + var phantom = new Phantom({ + port: 9876 + }); + var callback = jest.genMockFn(); + phantom.start(callback); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + }); + it('calls the callback with the error when phantom fails to start', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + processHelper.start = jest.genMockFn().mockImplementation = function (options, callback) { + callback('error!'); + }; + + var phantom = new Phantom({ + port: 9876 + }); + var callback = jest.genMockFn(); + phantom.start(callback); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBe('error!'); + }); + it('immediately calls the callback without starting phantom if already running', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.child = 'not null'; + var callback = jest.genMockFn(); + phantom.start(callback); + expect(processHelper.start.mock.calls.length).toBe(0); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + expect(phantom.child).toBe('not null'); + }); + }); + describe('stop', function () { + it('kills the phantom child when phantom is running and sets the child to null', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.child = 'not null'; + processHelper.kill = jest.genMockFn().mockImplementation(function (options, callback) { + callback(); + }); + var callback = jest.genMockFn(); + phantom.stop(callback); + expect(processHelper.kill.mock.calls.length).toBe(1); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + expect(phantom.child).toBe(null); + }); + it('calls the callback immediately when phantom is not running', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.child = null; + processHelper.kill = jest.genMockFn(); + var callback = jest.genMockFn(); + phantom.stop(callback); + expect(processHelper.kill.mock.calls.length).toBe(0); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + expect(phantom.child).toBe(null); + }); + it('calls the callback with an error if an error is encountered', function () { + var processHelper = require('../lib/process-helper'); + + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.child = 'not null'; + processHelper.kill = jest.genMockFn().mockImplementation(function (options, callback) { + callback('Error!'); + }); + var callback = jest.genMockFn(); + phantom.stop(callback); + expect(processHelper.kill.mock.calls.length).toBe(1); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBe('Error!'); + }); + }); + describe('interrupt', function () { + it('should stop phantom', function () { + var Phantom = require('../lib/phantom'); + + var phantom = new Phantom({ + port: 9876 + }); + phantom.stop = jest.genMockFn(); + var callback = 'callback'; + phantom.interrupt(callback); + expect(phantom.stop.mock.calls.length).toBe(1); + expect(phantom.stop.mock.calls[0][0]).toBe(callback); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/process-helper-spec.js b/dist/__tests__/process-helper-spec.js new file mode 100644 index 0000000..b8f64e3 --- /dev/null +++ b/dist/__tests__/process-helper-spec.js @@ -0,0 +1,196 @@ +jest.dontMock('../lib/process-helper'); +describe('process-helper', function () { + describe('start', function () { + it('spawns a child, calls the callback and returns the child', function () { + var processHelper = require('../lib/process-helper.js'); + + var child = {}; + processHelper.spawn = jest.genMockFn().mockReturnValue(child); + var options = {}; + var callback = jest.genMockFn(); + var ret = processHelper.start(options, callback); + expect(ret).toBe(child); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + }); + it('waits for message if waitForMessage is provided and delegates the callback as is', function () { + var processHelper = require('../lib/process-helper.js'); + + var child = {}; + processHelper.spawn = jest.genMockFn(); + processHelper.waitForMessage = jest.genMockFn().mockImplementation(function (options, child, callback) { + callback.apply(this, [1, 2, 3, 4]); + }); + var options = { + waitForMessage: 'not null' + }; + var callback = jest.genMockFn(); + var ret = processHelper.start(options, callback); + expect(processHelper.waitForMessage.mock.calls.length).toBe(1); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0]).toEqual([1, 2, 3, 4]); + }); + }); + describe('spawn', function () { + it('calls spawn with the binary and args and returns the child process', function () { + var cp = require('child_process'), + processHelper = require('../lib/process-helper.js'); + + processHelper.logOutputs = jest.genMockFn(); + var child = {}; + spyOn(cp, 'spawn').and.returnValue(child); + var options = { + bin: '/someBinary', + args: ['bunch', 'of', 'args'] + }; + var ret = processHelper.spawn(options); + expect(cp.spawn).toHaveBeenCalledWith(options.bin, options.args); + expect(ret).toBe(child); + }); + it('logs the outputs of the child process', function () { + var cp = require('child_process'), + processHelper = require('../lib/process-helper.js'); + + processHelper.logOutputs = jest.genMockFn(); + var child = {}; + spyOn(cp, 'spawn').and.returnValue(child); + var options = { + prefix: 'hey bear' + }; + var ret = processHelper.spawn(options); + expect(processHelper.logOutputs.mock.calls.length).toBe(1); + expect(processHelper.logOutputs.mock.calls[0][0]).toBe(options.prefix); + expect(processHelper.logOutputs.mock.calls[0][1]).toBe(child); + }); + }); + describe('logOutputs', function () { + it('logs the output of the child process stderr events', function () { + var log = require('../lib/log.js'), + processHelper = require('../lib/process-helper.js'); + + var child = { + stdout: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventTrigger('blah'); + expect(event).toBe('data'); + expect(log.debug.mock.calls.length).toBe(1); + expect(log.debug.mock.calls[0][0]).toBe('[chimp][prefix.stdout]'); + expect(log.debug.mock.calls[0][1]).toBe('blah'); + }) + }, + stderr: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventTrigger('blah blah'); + expect(event).toBe('data'); + expect(log.debug.mock.calls.length).toBe(2); + expect(log.debug.mock.calls[1][0]).toBe('[chimp][prefix.stderr]'); + expect(log.debug.mock.calls[1][1]).toBe('blah blah'); + }) + } + }; + processHelper.logOutputs('prefix', child); + }); + }); + describe('waitForMessage', function () { + it('removes the listener if the success message is seen and calls the callback', function () { + var processHelper = require('../lib/process-helper.js'); + + var callback = jest.genMockFn(); + var options = { + prefix: '[apollo]', + waitForMessage: 'we have lift off' + }; + var eventToBeRemovedStdOut = false; + var eventToBeRemovedStdErr = false; + var child = { + stdout: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventToBeRemovedStdOut = eventTrigger; + eventTrigger('Huston, we have lift off!'); + }), + removeListener: jest.genMockFn() + }, + stderr: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventToBeRemovedStdErr = eventTrigger; + eventTrigger('Huston, we have lift off!'); + }), + removeListener: jest.genMockFn() + } + }; + processHelper.waitForMessage(options, child, callback); + expect(child.stdout.removeListener.mock.calls.length).toBe(1); + expect(child.stdout.removeListener.mock.calls[0][0]).toBe('data'); + expect(child.stdout.removeListener.mock.calls[0][1]).toBe(eventToBeRemovedStdOut); + expect(child.stderr.removeListener.mock.calls.length).toBe(1); + expect(child.stderr.removeListener.mock.calls[0][0]).toBe('data'); + expect(child.stderr.removeListener.mock.calls[0][1]).toBe(eventToBeRemovedStdErr); + expect(callback.mock.calls.length).toBe(2); + expect(callback.mock.calls[0][0]).toBeFalsy(); + expect(callback.mock.calls[1][0]).toBeFalsy(); + }); + it('calls back with an error if the error message is seen', function () { + var processHelper = require('../lib/process-helper.js'); + + var callback = jest.genMockFn(); + var options = { + prefix: '[apollo]', + waitForMessage: 'not empty', + errorMessage: 'engine failure' + }; + var eventToBeRemoved = false; + var child = { + stdout: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventTrigger('Huston, we have a problem - engine failure!'); + }) + }, + stderr: { + on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { + eventTrigger('Huston, we have a problem - engine failure!'); + }) + } + }; + processHelper.waitForMessage(options, child, callback); + expect(callback.mock.calls.length).toBe(2); + expect(callback.mock.calls[0][0]).toBe('Huston, we have a problem - engine failure!'); + expect(callback.mock.calls[1][0]).toBe('Huston, we have a problem - engine failure!'); + }); + }); + describe('kill', function () { + it('kills the provided process, sets it to null and calls the callback when the process is dead', function () { + var processHelper = require('../lib/process-helper.js'); + + process.kill = jest.genMockFn().mockImplementation(function () { + // the first call checks if the process exists + // the second call is the actual kill + // subsequent calls are checking if the process exists + // it takes 3 calls to go through all the execution paths for this SUT + if (process.kill.mock.calls.length === 4) { + throw { + code: 'ESRCH' + }; + } + }); + var options = { + child: { + pid: 1234 + } + }; + var callback = jest.genMockFn(); + processHelper.kill(options, callback); + jest.runAllTimers(); + expect(process.kill.mock.calls.length).toBe(4); + expect(process.kill.mock.calls[0][0]).toEqual(1234); + expect(process.kill.mock.calls[0][1]).toBe(0); + expect(process.kill.mock.calls[1][1]).toBe('SIGTERM'); + expect(process.kill.mock.calls[2][0]).toEqual(1234); + expect(process.kill.mock.calls[2][1]).toEqual(0); + expect(process.kill.mock.calls[3][0]).toEqual(1234); + expect(process.kill.mock.calls[3][1]).toEqual(0); + expect(options.child).toBe(null); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBeFalsy(); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/saucelabs-manager-spec.js b/dist/__tests__/saucelabs-manager-spec.js new file mode 100644 index 0000000..ee05850 --- /dev/null +++ b/dist/__tests__/saucelabs-manager-spec.js @@ -0,0 +1,19 @@ +jest.dontMock('../lib/saucelabs-manager'); +describe('SauceLabs Session Manager', function () { + describe('Constructor', function () { + it('sets the SauceLabsUrl', function () { + var SauceLabsManager = require('../lib/saucelabs-manager'); + + var options = { + port: 1234, + browser: 'something', + user: 'testus3r', + key: '12345678', + host: 'saucelabs.com' + }; + var sauceLabsBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host + '/rest/v1/' + options.user; + var session = new SauceLabsManager(options); + expect(session.options.sauceLabsUrl).toBe(sauceLabsBaseUrl); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/selenium-spec.js b/dist/__tests__/selenium-spec.js new file mode 100644 index 0000000..b917114 --- /dev/null +++ b/dist/__tests__/selenium-spec.js @@ -0,0 +1,339 @@ +jest.dontMock('../lib/selenium'); +jest.dontMock('../lib/boolean-helper'); +jest.dontMock('underscore'); +describe('Selenium', function () { + describe('constructor', function () { + it('throws when options is not passed', function () { + var Selenium = require('../lib/selenium'); + + var createSelenium = function () { + new Selenium(); + }; + + expect(createSelenium).toThrowError('options is required'); + }); + it('throws when options.port is not passed', function () { + var Selenium = require('../lib/selenium'); + + var options = {}; + + var createSelenium = function () { + new Selenium(options); + }; + + expect(createSelenium).toThrowError('options.port is required'); + }); + it('converts options.port to a string', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: 4444 + }); + expect(selenium.options.port).toBe('4444'); + }); + it('does not modify original options', function () { + var Selenium = require('../lib/selenium'); + + var originalOptions = { + port: 4444, + someVar: 1234 + }; + var selenium = new Selenium(originalOptions); + originalOptions.someVar = 5678; + expect(selenium.options.someVar).toBe(1234); + }); + it('creates a singleton by default', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: 4444 + }); + var selenium2 = new Selenium({ + port: 5678 + }); + expect(selenium).toBe(selenium2); + }); + it('does not create a singleton when --clean-selenium-server is true', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + 'clean-selenium-server': true + }); + var selenium2 = new Selenium({ + port: 5678 + }); + expect(selenium).not.toBe(selenium2); + }); + }); + describe('install', function () { + it('installs selenium', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install(); + expect(seleniumStandalone.install).toBeCalled(); + }); + it('passes callback to selenium-standalone call', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + var callback = jest.genMockFn(); + selenium.install(callback); + seleniumStandalone.install.mock.calls[0][1](); + expect(callback).toBeCalled(); + }); + it('does not run if chimp is offline mode', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + offline: true + }); + + var seleniumStandalone = require('selenium-standalone'); + + var callback = jest.genMockFn(); + selenium.install(callback); + expect(seleniumStandalone.install).not.toBeCalled(); + expect(callback.mock.calls.length).toBe(1); + }); + }); + describe('start', function () { + it('uses options.port to start selenium', function () { + var Selenium = require('../lib/selenium'); + + var port = '4444'; + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install = jest.genMockFunction(); + selenium.install.mockImplementation(function (callback) { + callback(null); + }); + + var callback = function () {}; + + selenium.start(callback); + expect(seleniumStandalone.start.mock.calls[0][0].seleniumArgs).toEqual(['-port', port]); + }); + it('retains pre-existing options.seleniumArgs when starting selenium', function () { + var Selenium = require('../lib/selenium'); + + var port = '4444'; + var opt = '-some-option=True'; + var selenium = new Selenium({ + port, + seleniumStandaloneOptions: { + seleniumArgs: [opt] + } + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install = jest.genMockFunction(); + selenium.install.mockImplementation(function (callback) { + callback(null); + }); + + var callback = function () {}; + + selenium.start(callback); + expect(seleniumStandalone.start.mock.calls[0][0].seleniumArgs).toEqual([opt, '-port', port]); + }); + it('sets this.child to the selenium child process', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install = jest.genMockFunction(); + selenium.install.mockImplementation(function (callback) { + callback(null); + }); + var seleniumChild = { + stderr: { + on: jest.genMockFunction() + } + }; + seleniumStandalone.start.mockImplementation(function (options, callback) { + callback(null, seleniumChild); + }); + + var callback = function () {}; + + selenium.start(callback); + expect(selenium.child).toBe(seleniumChild); + }); + it('calls the callback with null when selenium has been started successfully', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install = jest.genMockFunction(); + selenium.install.mockImplementation(function (callback) { + callback(null); + }); + var seleniumChild = { + stderr: { + on: jest.genMockFunction() + } + }; + seleniumStandalone.start.mockImplementation(function (options, callback) { + callback(null, seleniumChild); + }); + var callback = jest.genMockFunction(); + selenium.start(callback); + expect(callback.mock.calls[0]).toEqual([null]); + }); + it('calls the callback with the error when selenium fails to start', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + seleniumStandaloneOptions: {} + }); + + var seleniumStandalone = require('selenium-standalone'); + + selenium.install = jest.genMockFunction(); + selenium.install.mockImplementation(function (callback) { + callback(null); + }); + var error = new Error('Selenium start error'); + seleniumStandalone.start.mockImplementation(function (options, callback) { + callback(error); + }); + var callback = jest.genMockFunction(); + selenium.start(callback); + expect(callback.mock.calls[0]).toEqual([error]); + }); + it('logs the output of the child process', function () {// TODO + }); + it('calls the callback immediately with null when selenium is already running', function () { + var seleniumStandalone = require('selenium-standalone'); + + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444' + }); + var callback = jest.genMockFunction(); + seleniumStandalone.start = jest.genMockFn(); + selenium.child = 'not null'; + selenium.start(callback); + expect(callback.mock.calls.length).toBe(1); + expect(callback.mock.calls[0][0]).toBe(null); + expect(seleniumStandalone.start.mock.calls.length).toBe(0); + }); + }); + describe('stop', function () { + describe('when selenium is running', function () { + it('kills the selenium child', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444' + }); + + var processHelper = require('../lib/process-helper'); + + var seleniumChild = { + pid: 1234 + }; + selenium.child = seleniumChild; + selenium.sessionManager = {}; + var callback = jest.genMockFunction(); + selenium.stop(callback); + expect(processHelper.kill.mock.calls.length).toBe(1); + expect(processHelper.kill.mock.calls[0][0]).toEqual({ + child: selenium.child, + signal: 'SIGINT', + prefix: 'selenium' + }); // simulate the callback + + processHelper.kill.mock.calls[0][1]('this', 'that'); + expect(selenium.child).toBe(null); + expect(callback).toBeCalledWith('this', 'that'); + }); + }); + describe('when selenium is not running', function () { + it('calls the callback immediately', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444' + }); + var callback = jest.genMockFunction(); + selenium.stop(callback); + expect(selenium.child).toBe(null); + expect(callback).toBeCalledWith(null); + }); + }); + }); + describe('interrupt', function () { + it('should return immediately in watch mode', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + watch: true + }); + var callback = jest.genMockFunction(); + selenium.stop = jest.genMockFn(); + selenium.interrupt(callback); + expect(callback).toBeCalledWith(null); + expect(selenium.stop.mock.calls.length).toBe(0); + }); + it('should call kill when not in watch mode', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444' + }); + var callback = jest.genMockFunction(); + selenium.stop = jest.genMockFn(); + selenium.interrupt(callback); + expect(selenium.stop.mock.calls.length).toBe(1); + expect(selenium.stop.mock.calls.length).toBe(1); + }); + it('should call kill when --clean-selenium-server is true', function () { + var Selenium = require('../lib/selenium'); + + var selenium = new Selenium({ + port: '4444', + 'clean-selenium-server': true + }); + selenium.stop = jest.genMockFn(); + var callback = 'callback'; + selenium.interrupt(callback); + expect(selenium.stop.mock.calls.length).toBe(1); + expect(selenium.stop.mock.calls[0][0]).toBe(callback); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/session-factory-spec.js b/dist/__tests__/session-factory-spec.js new file mode 100644 index 0000000..00b088c --- /dev/null +++ b/dist/__tests__/session-factory-spec.js @@ -0,0 +1,64 @@ +jest.dontMock('../lib/session-factory'); +jest.dontMock('../lib/session-manager'); +describe('Session Factory', function () { + describe('Constructor', function () { + it('sets the options on the instance when no exceptions are thrown', function () { + var SessionFactory = require('../lib/session-factory'); + + var options = { + port: 1234, + browser: 'something' + }; + var session = new SessionFactory(options); + expect(session.options).toBe(options); + }); + it('throws when options is not passed', function () { + var SessionFactory = require('../lib/session-factory'); + + var session = function () { + new SessionFactory(); + }; + + expect(session).toThrowError('options is required'); + }); + it('throws when options.port is not passed', function () { + var SessionFactory = require('../lib/session-factory'); + + var options = {}; + + var session = function () { + new SessionFactory({}); + }; + + expect(session).toThrowError('options.port is required'); + }); + it('throws when options.browser and options.device is not passed', function () { + var SessionFactory = require('../lib/session-factory'); + + var options = { + port: 1234 + }; + + var session = function () { + new SessionFactory(options); + }; + + expect(session).toThrowError('[chimp][session-manager-factory] options.browser or options.deviceName is required'); + }); + it('throws when options.user and options.key is not passed and not using localhost', function () { + var SessionFactory = require('../lib/session-factory'); + + var options = { + port: 1234, + browser: 'firefox', + host: 'browserstack.com' + }; + + var session = function () { + new SessionFactory(options); + }; + + expect(session).toThrowError('[chimp][session-manager-factory] options.user and options.key are required'); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/session-manager-spec.js b/dist/__tests__/session-manager-spec.js new file mode 100644 index 0000000..f9707f9 --- /dev/null +++ b/dist/__tests__/session-manager-spec.js @@ -0,0 +1,238 @@ +jest.dontMock('underscore'); +jest.dontMock('../lib/session-manager'); +jest.dontMock('../lib/boolean-helper'); //jest.dontMock('loglevel'); +//require('loglevel').setLevel('TRACE'); + +describe('Session Manager', function () { + describe('Constructor', function () { + it('sets the options on the instance when no exceptions are thrown', function () { + var SessionManager = require('../lib/session-manager'); + + var options = { + port: 1234, + browser: 'something' + }; + var sessionManager = new SessionManager(options); + expect(sessionManager.options).toBe(options); + }); + }); + describe('Remote', function () { + beforeEach(function () { + delete process.env['chimp.noSessionReuse']; + delete process.env['chimp.watch']; + }); + it('should delegate the webdriver remote call if using phantom', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'phantomjs' + }); + var sessions = [1234]; + sessionManager._getWebdriverSessions = jest.genMockFn().mockImpl(function (callback) { + callback(sessions); + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + sessionManager.remote(options, callback); + expect(wd.remote.mock.calls.length).toBe(2); + expect(callback.mock.calls[0][1]).toBe('return from remote1'); + expect(callback.mock.calls[1][1]).toBe('return from remote2'); + expect(wd.remote.mock.calls[0][0]).toBe(options); + expect(wd.remote.mock.calls[1][0]).toBe(options); + }); + it('should delegate the webdriver remote call if a session has not already started', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + var browser = {}; + wd.remote = jest.genMockFn().mockReturnValue(browser); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'something' + }); + var sessions = []; + sessionManager._getWebdriverSessions = jest.genMockFn().mockImpl(function (callback) { + callback(null, sessions); + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + expect(callback.mock.calls[0][1]).toBe(browser); + expect(wd.remote.mock.calls.length).toBe(1); + expect(wd.remote.mock.calls[0][0]).toBe(options); + }); + it('should reuse a session if one has already started in watch mode', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + process.env['chimp.watch'] = true; + var browser = { + _original: { + requestHandler: { + sessionID: 'some-id' + } + } + }; + wd.remote = jest.genMockFn().mockReturnValue(browser); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'something' + }); + var sessions = [{ + id: 'session-id' + }]; + sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { + callback(null, sessions); + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + expect(callback.mock.calls[0][1]).toBe(browser); + expect(browser._original.requestHandler.sessionID).toBe(sessions[0].id); + expect(wd.remote.mock.calls.length).toBe(1); + expect(wd.remote.mock.calls[0][0]).toBe(options); + }); + it('should reuse a session if one has already started in server mode', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + process.env['chimp.server'] = true; + var browser = { + _original: { + requestHandler: { + sessionID: 'some-id' + } + } + }; + wd.remote = jest.genMockFn().mockReturnValue(browser); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'something' + }); + var sessions = [{ + id: 'session-id' + }]; + sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { + callback(null, sessions); + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + expect(callback.mock.calls[0][1]).toBe(browser); + expect(browser._original.requestHandler.sessionID).toBe(sessions[0].id); + expect(wd.remote.mock.calls.length).toBe(1); + expect(wd.remote.mock.calls[0][0]).toBe(options); + }); + it('starts a new session when noSessionReuse is true when a session exists', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'something' + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + process.env['chimp.noSessionReuse'] = true; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + sessionManager.remote(options, callback); + expect(callback.mock.calls[0][1]).toBe('return from remote1'); + expect(callback.mock.calls[1][1]).toBe('return from remote2'); + expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); + expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); + expect(wd.remote.mock.calls.length).toBe(2); + expect(wd.remote.mock.calls[0][0]).toBe(options); + expect(wd.remote.mock.calls[1][0]).toBe(options); + }); + it('respects noSessionReuse in watch mode', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); + var sessionManager = new SessionManager({ + port: 1234, + browser: 'something' + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + var options = { + some: 'options' + }; + process.env['chimp.watch'] = true; + process.env['chimp.noSessionReuse'] = true; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + sessionManager.remote(options, callback); + expect(callback.mock.calls[0][1]).toBe('return from remote1'); + expect(callback.mock.calls[1][1]).toBe('return from remote2'); + expect(callback.mock.calls[0][1].requestHandler).toBeFalsy(); + expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); + expect(wd.remote.mock.calls.length).toBe(2); + expect(wd.remote.mock.calls[0][0]).toBe(options); + expect(wd.remote.mock.calls[1][0]).toBe(options); + }); + it('should monkey patch the browser when reusing sessions in watch mode', function () { + var wd = require('xolvio-sync-webdriverio'); + + var SessionManager = require('../lib/session-manager'); + + var sessionManager = new SessionManager({ + port: 1234, + browser: 'somebrowser' + }); + var sessions = []; + sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { + callback(null, sessions); + }); + sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { + callback(); + }); + wd.remote = jest.genMockFn(); + process.env['chimp.watch'] = true; + sessionManager._monkeyPatchBrowserSessionManagement = jest.genMockFn(); + var options = { + some: 'options' + }; + var callback = jest.genMockFn(); + sessionManager.remote(options, callback); + expect(sessionManager._monkeyPatchBrowserSessionManagement.mock.calls.length).toBe(1); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/simian-reporter-spec.js b/dist/__tests__/simian-reporter-spec.js new file mode 100644 index 0000000..96b0e6f --- /dev/null +++ b/dist/__tests__/simian-reporter-spec.js @@ -0,0 +1,88 @@ +jest.dontMock('../lib/simian-reporter'); +describe('Simian reporter', function () { + it('sends the results to Simian and adds the access token', function () { + var request = require('request'); + + var SimianReporter = require('../lib/simian-reporter'); + + var simianReporter = new SimianReporter({ + simianResultEndPoint: 'api.simian.io/v1.0/result', + simianAccessToken: 'secretToken' + }); + var callback = jest.genMockFunction(); + var result = [{ + id: 'Use-browser-inside-steps' + }]; + simianReporter.report(result, callback); + expect(request.post.mock.calls.length).toBe(1); + var postedObject = request.post.mock.calls[0][0]; + expect(postedObject.url).toEqual('http://api.simian.io/v1.0/result?accessToken=secretToken'); + expect(postedObject.json).toEqual(true); + expect(postedObject.body).toEqual({ + type: 'cucumber', + result: result + }); // calls back on a good response + + var postCallback = request.post.mock.calls[0][1]; + postCallback(null, { + statusCode: 200 + }); + expect(callback.mock.calls.length).toBe(1); + }); + it('shows the error to the user when Simian returns a non 200 response', function () { + var request = require('request'); + + var SimianReporter = require('../lib/simian-reporter'); + + var simianReporter = new SimianReporter({ + simianAccessToken: 'secretToken' + }); + + const log = require('../lib/log'); + + spyOn(log, 'error'); + var callback = jest.genMockFunction(); + var result = [{ + id: 'Use-browser-inside-steps' + }]; + simianReporter.report(result, callback); // calls back on a good response + + var postCallback = request.post.mock.calls[0][1]; + var response = { + statusCode: 401 + }; + var body = { + status: 'error', + error: 'invalid accessToken' + }; + postCallback(null, response, body); + expect(callback.mock.calls.length).toBe(1); + expect(log.error).toHaveBeenCalledWith('[chimp][simian-reporter] Error from Simian:', 'invalid accessToken'); + }); + it('shows the error to the user when a request error happens before reaching the Simian API', function () { + var request = require('request'); + + var SimianReporter = require('../lib/simian-reporter'); + + var simianReporter = new SimianReporter({ + simianAccessToken: 'secretToken' + }); + + const log = require('../lib/log'); + + spyOn(log, 'error'); + var callback = jest.genMockFunction(); + var result = [{ + id: 'Use-browser-inside-steps' + }]; + simianReporter.report(result, callback); // calls back on a good response + + var postCallback = request.post.mock.calls[0][1]; + var error = new Error('network error'); + var response = null; + var body = null; + postCallback(error, response, body); + expect(callback.mock.calls.length).toBe(1); + expect(log.error).toHaveBeenCalledWith('[chimp][simian-reporter]', 'Error while sending result to Simian:', error); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/testingbot-manager-spec.js b/dist/__tests__/testingbot-manager-spec.js new file mode 100644 index 0000000..779b7c6 --- /dev/null +++ b/dist/__tests__/testingbot-manager-spec.js @@ -0,0 +1,19 @@ +jest.dontMock('../lib/testingbot-manager'); +describe('TestingBot Session Manager', function () { + describe('Constructor', function () { + it('sets the TestingBotUrl', function () { + var TestingBotManager = require('../lib/testingbot-manager'); + + var options = { + port: 1234, + browser: 'something', + user: 'testus3r', + key: '12345678', + host: 'api.testingbot.com' + }; + var testingBotBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host + '/v1/'; + var session = new TestingBotManager(options); + expect(session.options.testingbotBaseUrl).toBe(testingBotBaseUrl); + }); + }); +}); \ No newline at end of file diff --git a/dist/__tests__/world-spec.js b/dist/__tests__/world-spec.js new file mode 100644 index 0000000..66b69d8 --- /dev/null +++ b/dist/__tests__/world-spec.js @@ -0,0 +1 @@ +describe('Cucumber World', function () {}); \ No newline at end of file diff --git a/dist/bin/chimp.js b/dist/bin/chimp.js new file mode 100644 index 0000000..709c141 --- /dev/null +++ b/dist/bin/chimp.js @@ -0,0 +1,72 @@ +#!/usr/bin/env node +"use strict"; + +var Chimp = require('../lib/chimp.js'), + minimist = require('minimist'), + freeport = require('freeport'), + exit = require('exit'), + log = require('../lib/log'), + fs = require('fs'), + _ = require('underscore'), + path = require('path'), + optionsLoader = require('../lib/options-loader'), + packageJson = require('../../package.json'); // Make babel plugins available to Cucumber and Mocha child processes + + +process.env.NODE_PATH += path.delimiter + path.resolve(__dirname, '../../node_modules') + path.delimiter + path.resolve(__dirname, '../../../../node_modules'); +var argv = minimist(process.argv, { + "default": optionsLoader.getOptions(), + "boolean": [// - - - - CHIMP - - - - + 'watch', 'watchWithPolling', 'server', 'sync', 'offline', // - - - - CUCUMBER - - - - + 'singleSnippetPerFile', 'chai', 'screenshotsOnError', 'captureAllStepScreenshots', 'saveScreenshotsToDisk', 'saveScreenshotsToReport', // - - - - SELENIUM - - - - + // - - - - WEBDRIVER-IO - - - - + // - - - - SESSION-MANAGER - - - - + 'noSessionReuse', // - - - - SIMIAN - - - - + // - - - - MOCHA - - - - + 'mocha', // - - - - METEOR - - - - + // - - - - DEBUGGING - - - - + 'debug'] +}); + +if (argv.host && (argv.host.indexOf('sauce') !== -1 || argv.host.indexOf('browserstack') !== -1 || argv.host.indexOf('testingbot') !== -1)) { + argv.noSessionReuse = true; +} + +if (argv.deviceName) { + argv.browser = ''; +} + +if (argv.v || argv.version) { + console.log(packageJson.version); + process.exit(); +} + +try { + if (!argv.port) { + freeport(function (error, port) { + if (error) { + throw error; + } + + argv.port = port; + startChimp(argv); + }); + } else { + startChimp(argv); + } +} catch (ex) { + process.stderr.write(ex.stack + '\n'); + exit(2); +} + +function startChimp(options) { + var chimp = new Chimp(options); + chimp.init(function (err) { + if (err) { + log.error(err); + log.debug('Error in chimp init', err); + } + + exit(err ? 2 : 0); + }); +} \ No newline at end of file diff --git a/dist/bin/default.js b/dist/bin/default.js new file mode 100644 index 0000000..b791db4 --- /dev/null +++ b/dist/bin/default.js @@ -0,0 +1,145 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _path = _interopRequireDefault(require("path")); + +var _ci = require("../lib/ci"); + +module.exports = { + // - - - - CHIMP - - - - + watch: false, + watchTags: '@watch,@focus', + domainSteps: null, + e2eSteps: null, + fullDomain: false, + domainOnly: false, + e2eTags: '@e2e', + watchWithPolling: false, + server: false, + serverPort: 8060, + serverHost: 'localhost', + sync: true, + offline: false, + showXolvioMessages: true, + 'fail-when-no-tests-run': false, + // - - - - CUCUMBER - - - - + path: './features', + format: 'pretty', + tags: '~@ignore', + singleSnippetPerFile: true, + recommendedFilenameSeparator: '_', + chai: false, + screenshotsOnError: (0, _ci.isCI)(), + screenshotsPath: '.screenshots', + captureAllStepScreenshots: false, + saveScreenshotsToDisk: true, + // Note: With a large viewport size and captureAllStepScreenshots enabled, + // you may run out of memory. Use browser.setViewportSize to make the + // viewport size smaller. + saveScreenshotsToReport: false, + jsonOutput: null, + compiler: 'js:' + _path["default"].resolve(__dirname, '../lib/babel-register.js'), + conditionOutput: true, + // - - - - SELENIUM - - - - + browser: null, + platform: 'ANY', + name: '', + user: '', + key: '', + port: null, + host: null, + // deviceName: null, + // - - - - WEBDRIVER-IO - - - - + webdriverio: { + desiredCapabilities: {}, + logLevel: 'silent', + // logOutput: null, + host: '127.0.0.1', + port: 4444, + path: '/wd/hub', + baseUrl: null, + coloredLogs: true, + screenshotPath: null, + waitforTimeout: 500, + waitforInterval: 250 + }, + // - - - - SELENIUM-STANDALONE + seleniumStandaloneOptions: { + // check for more recent versions of selenium here: + // http://selenium-release.storage.googleapis.com/index.html + version: '3.8.1', + baseURL: 'https://selenium-release.storage.googleapis.com', + drivers: { + chrome: { + // check for more recent versions of chrome driver here: + // http://chromedriver.storage.googleapis.com/index.html + version: require('../../package').dependencies.chromedriver.substring(1), + arch: process.arch, + baseURL: 'https://chromedriver.storage.googleapis.com' + }, + ie: { + // check for more recent versions of internet explorer driver here: + // http://selenium-release.storage.googleapis.com/index.html + version: '3.0.0', + arch: 'ia32', + baseURL: 'https://selenium-release.storage.googleapis.com' + }, + firefox: { + // check for more recent versions of gecko driver here: + // https://github.com/mozilla/geckodriver/releases + version: '0.19.1', + arch: process.arch, + baseURL: 'https://github.com/mozilla/geckodriver/releases/download' + } + } + }, + // - - - - SESSION-MANAGER - - - - + noSessionReuse: false, + // - - - - SIMIAN - - - - + simianResultEndPoint: 'api.simian.io/v1.0/result', + simianAccessToken: false, + simianResultBranch: null, + simianRepositoryId: null, + // - - - - MOCHA - - - - + mocha: false, + mochaCommandLineOptions: { + bail: true + }, + mochaConfig: { + // tags and grep only work when watch mode is false + tags: '', + grep: null, + timeout: 60000, + reporter: 'spec', + slow: 10000, + useColors: true + }, + // - - - - JASMINE - - - - + jasmine: false, + jasmineConfig: { + specDir: '.', + specFiles: ['**/*@(_spec|-spec|Spec).@(js|jsx)'], + helpers: ['support/**/*.@(js|jsx)'], + stopSpecOnExpectationFailure: false, + random: false + }, + jasmineReporterConfig: {// This options are passed to jasmine.configureDefaultReporter(...) + // See: http://jasmine.github.io/2.4/node.html#section-Reporters + }, + // - - - - METEOR - - - - + ddp: false, + serverExecuteTimeout: 10000, + // - - - - PHANTOM - - - - + phantom_w: 1280, + phantom_h: 1024, + phantom_ignoreSSLErrors: false, + // - - - - DEBUGGING - - - - + log: 'info', + debug: false, + seleniumDebug: null, + debugCucumber: null, + debugBrkCucumber: null, + debugMocha: null, + debugBrkMocha: null +}; \ No newline at end of file diff --git a/dist/lib/babel-register.js b/dist/lib/babel-register.js new file mode 100644 index 0000000..3a846ec --- /dev/null +++ b/dist/lib/babel-register.js @@ -0,0 +1,7 @@ +"use strict"; + +require('@babel/register')({ + 'presets': ['@babel/env'] +}); + +require('@babel/polyfill'); \ No newline at end of file diff --git a/dist/lib/boolean-helper.js b/dist/lib/boolean-helper.js new file mode 100644 index 0000000..76b200d --- /dev/null +++ b/dist/lib/boolean-helper.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = { + isFalsey: isFalsey, + isTruthy: isTruthy +}; + +function isFalsey(variable) { + return !variable || variable === 'false' || variable === 'null' || variable === ''; +} + +function isTruthy(variable) { + return !isFalsey(variable); +} \ No newline at end of file diff --git a/dist/lib/browserstack-manager.js b/dist/lib/browserstack-manager.js new file mode 100644 index 0000000..6f4a487 --- /dev/null +++ b/dist/lib/browserstack-manager.js @@ -0,0 +1,173 @@ +"use strict"; + +var request = require('request'), + log = require('./log'), + _ = require('underscore'); +/** + * SessionManager Constructor + * + * @param {Object} options + * @api public + */ + + +function BrowserStackSessionManager(options) { + log.debug('[chimp][browserstack-session-manager] options are', options); + var host = options.host.replace(/hub\.|hub-cloud\./, 'api.'); + var browserStackBaseUrl = 'https://' + options.user + ':' + options.key + '@' + host; + options.browserStackUrl = browserStackBaseUrl; + this.options = options; + this.maxRetries = 30; + this.retryDelay = 3000; + this.retry = 0; // this will be set by the remote and multiremote methods from + // desiredCapabilities + + this.buildName = null; + log.debug('[chimp][browserstack-session-manager] created a new SessionManager', options); +} + +BrowserStackSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); +/** + * Wraps the webdriver remote method and allows reuse options + * + * @api public + */ + +BrowserStackSessionManager.prototype.remote = function (webdriverOptions, callback) { + var self = this; + log.debug('[chimp][browserstack-session-manager] creating webdriver remote '); + var browser = this.webdriver.remote(webdriverOptions); + this.buildName = webdriverOptions.desiredCapabilities.build; + log.debug('[chimp][browserstack-session-manager] BuildName: ' + this.buildName); + callback(null, browser); + return; +}; +/** + * Wraps the webdriver multiremote method and allows reuse options + * + * @api public + */ + + +BrowserStackSessionManager.prototype.multiremote = function (webdriverOptions, callback) { + log.debug('[chimp][browserstack-session-manager] creating webdriver remote '); + var browser = this.webdriver.multiremote(webdriverOptions); + this.buildName = webdriverOptions['browser0'].desiredCapabilities.build; + log.debug('[chimp][browserstack-session-manager] BuildName: ' + this.buildName); + callback(null, browser); + return; +}; +/** + * Gets a list of builds from the BrowserStack API as sessions must be queried based on Builds + * + * @api private + */ + + +BrowserStackSessionManager.prototype._getBuilds = function (callback) { + var hub = this.options.browserStackUrl + '/automate/builds.json?status=running'; + log.debug('[chimp][browserstack-session-manager]', 'requesting builds from', hub); + request(hub, function (error, response, body) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][browserstack-session-manager]', 'received data', body); + callback(null, JSON.parse(body)); + } else { + log.error('[chimp][browserstack-session-manager]', 'received error', error); + callback(error); + } + }); +}; +/** + * Gets a list of sessions from the BrowserStack API based on Build ID + * + * @api private + */ + + +BrowserStackSessionManager.prototype._getSessions = function (buildId, callback) { + var hub = this.options.browserStackUrl + '/automate/builds/' + buildId + '/sessions.json?status=running'; + log.debug('[chimp][browserstack-session-manager]', 'requesting sessions from', hub); + request(hub, function (error, response, body) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][browserstack-session-manager]', 'received data', body); + callback(null, JSON.parse(body)); + } else { + log.error('[chimp][browserstack-session-manager]', 'received error', error); + callback(error); + } + }); +}; +/** + * Kills all sessions in the matching running build found on + * BrowserStack. + * + * If 'build' is specified in the desiredCapabilities, it will find a + * running build with the specified build name, else it will consider + * the first running build. When using multiremote, it's important to + * to specify a unique 'build' in desiredCapabilities so that all and + * only those sessions created by the current build are killed. + * + * @api public + */ + + +BrowserStackSessionManager.prototype.killCurrentSession = function (callback) { + var self = this; + var wdOptions = this.options; + var wdHubSession = 'http://' + wdOptions.host + ':' + wdOptions.port + '/wd/hub/session'; + + var killSession = function killSession(session) { + request.del(wdHubSession + '/' + session.automation_session.hashed_id, function (wdError, wdResponse) { + if (!wdError && wdResponse.statusCode === 200) { + var options = { + url: wdOptions.browserStackUrl + '/automate/sessions/' + session.automation_session.hashed_id + '.json', + method: 'PUT', + json: true, + body: { + status: 'completed' + } + }; + request(options, function (error, response) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][browserstack-session-manager]', 'stopped session'); + callback(); + } else { + log.error('[chimp][browserstack-session-manager]', 'received error', error); + callback(error); + } + }); + } else { + log.error('[chimp][browserstack-session-manager]', 'received error', wdError); + callback(wdError); + } + }); + }; + + var findBuild = function findBuild(builds) { + if (self.buildName) { + return _.find(builds, function (b) { + return b.automation_build.name === self.buildName; + }); + } else { + return builds[0]; + } + }; + + this._getBuilds(function (err, builds) { + if (builds && builds.length) { + var build = findBuild(builds); + log.debug('[chimp][browserstack-session-manager]', builds, build); + var buildId = build.automation_build.hashed_id; + } + + if (buildId !== '') { + self._getSessions(buildId, function (err, sessions) { + if (sessions && sessions.length) { + sessions.forEach(killSession); + } + }); + } + }); +}; + +module.exports = BrowserStackSessionManager; \ No newline at end of file diff --git a/dist/lib/chimp-helper.js b/dist/lib/chimp-helper.js new file mode 100644 index 0000000..e38d67e --- /dev/null +++ b/dist/lib/chimp-helper.js @@ -0,0 +1,282 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _deepExtend = _interopRequireDefault(require("deep-extend")); + +var _environmentVariableParsers = require("./environment-variable-parsers"); + +var chai = require('chai'), + chaiAsPromised = require('chai-as-promised'), + log = require('./log'), + DDP = require('./ddp'), + request = require('request'), + Promise = require('bluebird'), + _ = require('underscore'), + wrapAsync = require('xolvio-sync-webdriverio').wrapAsync, + wrapAsyncObject = require('xolvio-sync-webdriverio').wrapAsyncObject, + SessionFactory = require('./session-factory'), + path = require('path'), + colors = require('colors'), + fs = require('fs-extra'), + exit = require('exit'), + booleanHelper = require('./boolean-helper'); + +var chimpHelper = { + loadAssertionLibrary: function loadAssertionLibrary() { + if (booleanHelper.isTruthy(process.env['chimp.chai'])) { + log.debug('[chimp][helper] Using the chai-expect assertion library'); + chai.use(chaiAsPromised); + chai.should(); // give users access to the chai instance + + global.chai = chai; + global.expect = chai.expect; + global.assert = chai.assert; + } else { + log.debug('[chimp][helper] Using the jasmine-expect assertion library'); + global.expect = require('xolvio-jasmine-expect').expect; + } + }, + setupGlobals: function setupGlobals() { + global.wrapAsync = wrapAsync; + global.wrapAsyncObject = wrapAsyncObject; // give users access the request module + + global.request = request; + + _.extend(global, wrapAsyncObject(global, ['request'], { + syncByDefault: booleanHelper.isTruthy(process.env['chimp.sync']) + })); // Give the user access to Promise functions. E.g. Promise.all. + + + global.Promise = Promise; + + if (booleanHelper.isTruthy(process.env['chimp.ddp0'])) { + // add .instances[] property onto the DDP object. this way + // global.server is usable, but so is server.instances[0] as an alias for when using multiple ddp servers + global.ddp = new DDP(process.env['chimp.ddp0']).connect(); // add on instances t + + global.ddp.instances = []; + + for (var key in process.env) { + if (key.indexOf('chimp.ddp') !== -1) { + var index = key.match(/chimp.ddp(.*)/)[1]; + + if (index) { + global.ddp.instances.push(new DDP(process.env['chimp.ddp' + index]).connect()); + } + } + } + } + }, + createGlobalAliases: function createGlobalAliases() { + global.driver = global.browser; + global.client = global.browser; + global.mirror = global.ddp; + global.server = global.ddp; + }, + setupBrowserAndDDP: function setupBrowserAndDDP() { + var setupBrowser = function setupBrowser() { + log.debug('[chimp][helper] getting browser'); + var webdriverioConfigOptions = JSON.parse(process.env['chimp.webdriverio']); + var webdriverioOptions = (0, _deepExtend["default"])(webdriverioConfigOptions, { + desiredCapabilities: { + browserName: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.browser']), + platform: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.platform']), + name: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.name']), + version: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.browserVersion']), + deviceName: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.deviceName']) + }, + user: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.user'] || process.env.SAUCE_USERNAME), + key: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.key'] || process.env.SAUCE_ACCESS_KEY), + host: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.host']), + port: (0, _environmentVariableParsers.parseNullableInteger)(process.env['chimp.port']), + logLevel: booleanHelper.isTruthy(process.env['chimp.debug']) ? 'verbose' : webdriverioConfigOptions.logLevel, + sync: (0, _environmentVariableParsers.parseBoolean)(process.env['chimp.sync']) + }); + global.sessionManager = new SessionFactory(Object.assign(_.pick(webdriverioOptions, 'host', 'port', 'user', 'key'), { + browser: webdriverioOptions.desiredCapabilities.browserName, + deviceName: webdriverioOptions.desiredCapabilities.deviceName + })); + + if (booleanHelper.isTruthy(process.env['chimp.watch'])) { + webdriverioOptions.desiredCapabilities.applicationCacheEnabled = false; + } + + log.debug('[chimp][helper] webdriverioOptions are ', JSON.stringify(webdriverioOptions)); + var remoteSession; + + if ((0, _environmentVariableParsers.parseNullableInteger)(process.env['CUCUMBER_BROWSERS'])) { + var options = _.clone(webdriverioOptions); + + options.multiBrowser = true; + var multiremoteWebdriverIoOptions = {}; + + var _browsersTotal = (0, _environmentVariableParsers.parseNullableInteger)(process.env['CUCUMBER_BROWSERS']); + + for (var _browserIndex = 0; _browserIndex < _browsersTotal; _browserIndex++) { + multiremoteWebdriverIoOptions['browser' + _browserIndex] = _.clone(options); + } + + remoteSession = wrapAsync(global.sessionManager.multiremote, global.sessionManager); + global.browser = remoteSession(multiremoteWebdriverIoOptions); + } else { + remoteSession = wrapAsync(global.sessionManager.remote, global.sessionManager); + global.browser = remoteSession(webdriverioOptions); + } + + global.browser.options = webdriverioOptions; + chaiAsPromised.transferPromiseness = global.browser.transferPromiseness; + }; + + var initSingleBrowser = function initSingleBrowser(browser) { + log.debug('[chimp][helper] init browser'); + log.debug('[chimp][helper] init browser callback'); + browser.screenshotsCount = 0; + browser.addCommand('capture', function (name, screenshotsPathPrefix) { + var screenshotsCountForFileName = "".concat(browser.screenshotsCount++, "_"); + var fileName = name.replace(/[ \\~#%&*{}/:<>?|"-]/g, '_'); + var fileExtension = '.png'; + var suggestedFileNameLength = screenshotsCountForFileName.length + fileName.length + fileExtension.length; + + if (suggestedFileNameLength > 255) { + var numberOfCharactersToLeave = fileName.length - (suggestedFileNameLength - 255); + fileName = fileName.substr(0, numberOfCharactersToLeave); + } + + var fullFileName = "".concat(screenshotsCountForFileName).concat(fileName).concat(fileExtension); + var screenshotsPath = process.env['chimp.screenshotsPath']; + + if (screenshotsPathPrefix) { + screenshotsPath = path.join(screenshotsPathPrefix, screenshotsPath); + } + + fs.mkdirsSync(screenshotsPath); + var ssPath = path.join(screenshotsPath, fullFileName); + log.debug('[chimp][helper] saving screenshot to', ssPath); + this.saveScreenshot(ssPath, false); + log.debug('[chimp][helper] saved screenshot to', ssPath); + }); + + if (process.env['chimp.browser'] === 'phantomjs') { + browser.setViewportSizeSync({ + width: process.env['chimp.phantom_w'] ? parseInt(process.env['chimp.phantom_w']) : 1280, + height: process.env['chimp.phantom_h'] ? parseInt(process.env['chimp.phantom_h']) : 1024 + }); + } + }; + + var initBrowser = function initBrowser() { + log.debug('[chimp][hooks] init browser'); + var browser = global.browser; + log.debug('[chimp][hooks] init browser callback'); + + if (browser.instances) { + browser.instances.forEach(function (singleBrowser) { + var desiredCapabilities = singleBrowser.initSync(); + singleBrowser.desiredCapabilities = desiredCapabilities; + initSingleBrowser(singleBrowser); + }); + } else { + var desiredCapabilities = browser.initSync(); + browser.desiredCapabilities = desiredCapabilities; + initSingleBrowser(browser); + } + }; + + var addServerExecute = function addServerExecute(ddpInstance) { + ddpInstance.execute = function (func) { + var args = Array.prototype.slice.call(arguments, 1); + var result; + var timeout = parseInt(process.env['chimp.serverExecuteTimeout']) || 10000; + setTimeout(function () { + if (!result) { + throw new Error('[chimp] server.execute timeout after ' + timeout + 'ms'); + } + }, timeout); + + try { + result = ddpInstance.call('xolvio/backdoor', func.toString(), args); + } catch (exception) { + if (exception.error === 404) { + throw new Error('[chimp] You need to install xolvio:backdoor in your meteor app before you can use server.execute()'); + } else { + throw exception; + } + } + + if (result.error) { + var error = new Error('Error in server.execute' + result.error.message); + error.stack += '\n' + result.error.stack.replace(/ {4}at/g, ' @'); + throw error; + } else { + return result.value; + } + }; + }; + + var setupDdp = function setupDdp() { + log.debug('[chimp][helper] setup DDP'); + + if (process.env['chimp.ddp0']) { + try { + log.debug('[chimp][helper] connecting via DDP to', process.env['chimp.ddp0']); + global.ddp.connectSync(); + addServerExecute(global.ddp); + + for (var i = 0; i < global.ddp.instances.length; i++) { + log.debug('[chimp][helper] connecting via DDP to ' + global.ddp.instances[i]._original.host + ':' + global.ddp.instances[i]._original.port); + global.ddp.instances[i].connectSync(); + addServerExecute(global.ddp.instances[i]); + } + + log.debug('[chimp][helper] connecting via DDP had no error'); + } catch (error) { + var errorMessage = error; + + if (_.isObject(error)) { + if (error.code === 'ECONNREFUSED') { + log.error('[chimp][helper] Cannot connect to Meteor. Please check if your application is up and running on ' + error.address + ' port ' + error.port); + } + + errorMessage = error.code; + } + + log.error('[chimp][helper] connecting via DDP error', errorMessage); + global.browser.endSync(); + process.exit(1); + } + } else { + var noDdp = function noDdp() { + expect('DDP Not Connected').to.equal('', 'You tried to use a DDP connection but it' + ' has not been configured. Be sure to pass --ddp='); + }; + + global.ddp0 = { + call: noDdp, + apply: noDdp, + execute: noDdp + }; + log.debug('[chimp][helper] DDP not required'); + } + }; + + try { + setupBrowser(); + initBrowser(); + + if (booleanHelper.isTruthy(process.env['chimp.ddp0'])) { + setupDdp(); + } + } catch (error) { + log.error('[chimp][helper] setupBrowserAndDDP had error'); + log.error(error); + log.error(error.stack); + exit(2); + } + }, + init: function init() { + this.setupGlobals(); + this.createGlobalAliases(); + } +}; +global.chimpHelper = chimpHelper; +module.exports = chimpHelper; \ No newline at end of file diff --git a/dist/lib/chimp-spec.js b/dist/lib/chimp-spec.js new file mode 100644 index 0000000..401c802 --- /dev/null +++ b/dist/lib/chimp-spec.js @@ -0,0 +1,76 @@ +"use strict"; + +var Chimp = require('./chimp'); + +describe('Chimp', function () { + before(function () { + var emptyFn = function emptyFn() {}; + + td.replace('async', {}); + td.replace('path', { + resolve: emptyFn, + join: emptyFn + }); + td.replace('chokidar', {}); + td.replace('underscore', {}); + td.replace('./log', {}); + td.replace('freeport', {}); + td.replace('xolvio-ddp', {}); + td.replace('hapi', {}); + td.replace('./ddp-watcher', {}); + td.replace('colors', {}); + td.replace('./boolean-helper', {}); + td.replace('./mocha/mocha.js', {}); + td.replace('./jasmine/jasmine.js', {}); + td.replace('./cucumberjs/cucumber.js', {}); + td.replace('./phantom.js', {}); + td.replace('./chromedriver.js', {}); + td.replace('./consoler.js', {}); + td.replace('./selenium.js', {}); + td.replace('./simian-reporter.js', {}); + }); + describe('constructor', function () { + beforeEach(function () { + this.chimp = new Chimp(); + }); + it('should create a new instance', function () { + expect(this.chimp).not.to.equal(null); + }); + it('should initialize a processes array', function () { + expect(this.chimp.processes).to.be["instanceof"](Array); + }); + it('should initialize an options object if no options are provided', function () { + expect(this.chimp.options).to.be.instanceOf(Object); + }); + it('should store the options object if provided', function () { + var myOptions = {}; + var chimp = new Chimp(myOptions); + expect(chimp.options).to.equal(myOptions); + }); + it('should store all the provided options on the environment hash prefixed with [chimp.]', function () { + var myOptions = { + a: 1, + b: 'aString' + }; + var chimp = new Chimp(myOptions); + expect(process.env['chimp.a']).to.equal(myOptions.a.toString()); + expect(process.env['chimp.b']).to.equal(myOptions.b); + }); + it('puts single ddp option on the environment hash as [chimp.ddp0] if only one provided', function () { + var myOptions = { + ddp: 'http://host:port' + }; + var chimp = new Chimp(myOptions); + expect(process.env['chimp.ddp0']).to.equal(myOptions.ddp.toString()); + expect(process.env['chimp.ddp1']).to.be.undefined; + }); + it('puts multiple ddp options on the environment hash as [chimp.ddpX] if multiple provided', function () { + var myOptions = { + ddp: ['http://host:port1', 'http://host:port2'] + }; + var chimp = new Chimp(myOptions); + expect(process.env['chimp.ddp0']).to.equal(myOptions.ddp[0].toString()); + expect(process.env['chimp.ddp1']).to.equal(myOptions.ddp[1].toString()); + }); + }); +}); \ No newline at end of file diff --git a/dist/lib/chimp.js b/dist/lib/chimp.js new file mode 100644 index 0000000..5270506 --- /dev/null +++ b/dist/lib/chimp.js @@ -0,0 +1,706 @@ +"use strict"; + +/** + * Externals + */ +var async = require('async'), + path = require('path'), + chokidar = require('chokidar'), + _ = require('underscore'), + log = require('./log'), + freeport = require('freeport'), + DDPClient = require('xolvio-ddp'), + fs = require('fs'), + Hapi = require('hapi'), + AutoupdateWatcher = require('./ddp-watcher'), + colors = require('colors'), + booleanHelper = require('./boolean-helper'), + Versions = require('../lib/versions'); + +colors.enabled = true; +var DEFAULT_COLOR = 'yellow'; +/** + * Internals + */ + +exports.Mocha = require('./mocha/mocha.js'); +exports.Jasmine = require('./jasmine/jasmine.js'); +exports.Cucumber = require('./cucumberjs/cucumber.js'); +exports.Phantom = require('./phantom.js'); +exports.Chromedriver = require('./chromedriver.js'); +exports.Consoler = require('./consoler.js'); +exports.Selenium = require('./selenium.js'); +exports.SimianReporter = require('./simian-reporter.js'); +/** + * Exposes the binary path + * + * @api public + */ + +Chimp.bin = path.resolve(__dirname, path.join('..', 'bin', 'chimp')); + +Chimp.install = function (callback) { + log.debug('[chimp]', 'Installing dependencies'); + new exports.Selenium({ + port: '1' + }).install(callback); +}; +/** + * Chimp Constructor + * + * Options: + * - `browser` browser to run tests in + * + * @param {Object} options + * @api public + */ + + +function Chimp(options) { + this.chokidar = chokidar; + this.options = options || {}; + this.processes = []; + this.isInterrupting = false; + this.exec = require('child_process').exec; + this.fs = fs; + this.testRunnerRunOrder = []; + this.watcher = undefined; // store all cli parameters in env hash + // Note: Environment variables are always strings. + + for (var option in options) { + if (option === 'ddp') { + handleDdpOption(options); + } else { + process.env['chimp.' + option] = _.isObject(options[option]) ? JSON.stringify(options[option]) : String(options[option]); + } + } + + this._handleChimpInterrupt(); +} + +function handleDdpOption(options) { + if (typeof options.ddp === 'string') { + process.env['chimp.ddp0'] = String(options.ddp); + return; + } + + if (Array.isArray(options.ddp)) { + options.ddp.forEach(function (val, index) { + process.env['chimp.ddp' + index] = String(val); + }); + } +} +/** + * Runs an npm install then calls selectMode + * + * @param {Function} callback + * @api public + */ + + +Chimp.prototype.init = function (callback) { + var self = this; + this.informUser(); + + try { + this._initSimianResultBranch(); + + this._initSimianBuildNumber(); + } catch (error) { + callback(error); + return; + } + + if (this.options.versions || this.options.debug) { + var versions = new Versions(this.options); + + if (this.options.debug) { + versions.show(function () { + self.selectMode(callback); + }); + } else { + versions.show(); + } + } else { + self.selectMode(callback); + } +}; + +Chimp.prototype.informUser = function () { + if (this.options.showXolvioMessages) { + log.info('\nMaster Chimp and become a testing Ninja! Check out our course: '.green + 'http://bit.ly/2btQaFu\n'.blue.underline); + } + + if (booleanHelper.isTruthy(this.options.criticalSteps)) { + this.options.e2eSteps = this.options.criticalSteps; + log.warn('[chimp] Please use e2eSteps instead of criticalSteps. criticalSteps is now deprecated.'.red); + } + + if (booleanHelper.isTruthy(this.options.criticalTag)) { + this.options.e2eTags = this.options.criticalTag; + log.warn('[chimp] Please use e2eTags instead of criticalTag. criticalTag is now deprecated.'.red); + } + + if (booleanHelper.isTruthy(this.options.mochaTags) || booleanHelper.isTruthy(this.options.mochaGrep) || booleanHelper.isTruthy(this.options.mochaTimeout) || booleanHelper.isTruthy(this.options.mochaReporter) || booleanHelper.isTruthy(this.options.mochaSlow)) { + log.warn('[chimp] mochaXYZ style configs are now deprecated. Please use a mochaConfig object.'.red); + } +}; + +Chimp.prototype._initSimianResultBranch = function () { + // Automatically set the result branch for the common CI tools + if (this.options.simianAccessToken && this.options.simianResultBranch === null) { + if (booleanHelper.isTruthy(process.env.CI_BRANCH)) { + // Codeship or custom + this.options.simianResultBranch = process.env.CI_BRANCH; + } else if (booleanHelper.isTruthy(process.env.CIRCLE_BRANCH)) { + // CircleCI + this.options.simianResultBranch = process.env.CIRCLE_BRANCH; + } else if (booleanHelper.isTruthy(process.env.TRAVIS_BRANCH)) { + // TravisCI + if (booleanHelper.isFalsey(process.env.TRAVIS_PULL_REQUEST)) { + this.options.simianResultBranch = process.env.TRAVIS_BRANCH; + } else { + // Ignore the builds that simulate the pull request merge, + // because the branch will be the target branch. + this.options.simianResultBranch = false; + } + } else { + throw new Error('You have not specified the branch that should be reported to Simian!' + ' Do this with the --simianResultBranch argument' + ' or the CI_BRANCH environment variable.'); + } + } +}; + +Chimp.prototype._initSimianBuildNumber = function _initSimianBuildNumber() { + // Automatically set the result branch for the common CI tools + if (this.options.simianAccessToken) { + if (process.env.CI_BUILD_NUMBER) { + // Codeship or custom + this.options.simianBuildNumber = process.env.CI_BUILD_NUMBER; + } else if (process.env.CIRCLE_BUILD_NUM) { + // CircleCI + this.options.simianBuildNumber = process.env.CIRCLE_BUILD_NUM; + } else if (process.env.TRAVIS_BUILD_NUMBER) { + // TravisCI + this.options.simianBuildNumber = process.env.TRAVIS_BUILD_NUMBER; + } + } +}; +/** + * Decides which mode to run and kicks it off + * + * @param {Function} callback + * @api public + */ + + +Chimp.prototype.selectMode = function (callback) { + if (booleanHelper.isTruthy(this.options.watch)) { + this.watch(); + } else if (booleanHelper.isTruthy(this.options.server)) { + this.server(); + } else { + this.run(callback); + } +}; +/** + * Watches the file system for changes and reruns when it detects them + * + * @api public + */ + + +Chimp.prototype.watch = function () { + var self = this; + var watchDirectories = []; + + if (self.options.watchSource) { + watchDirectories = self.options.watchSource.split(','); + } + + if (self.options.e2eSteps) { + watchDirectories.push(self.options.e2eSteps); + } + + if (self.options.domainSteps) { + watchDirectories.push(self.options.domainSteps); + } + + watchDirectories.push(self.options.path); + this.watcher = chokidar.watch(watchDirectories, { + ignored: /[\/\\](\.|node_modules)/, + ignoreInitial: true, + persistent: true, + usePolling: this.options.watchWithPolling + }); // set cucumber tags to be watch based + + if (booleanHelper.isTruthy(self.options.watchTags)) { + self.options.tags = self.options.watchTags; + } + + if (booleanHelper.isTruthy(self.options.ddp)) { + var autoUpdateWatcher = new AutoupdateWatcher(self.options); + autoUpdateWatcher.watch(function () { + log.debug('[chimp] Meteor autoupdate detected'); + self.rerun(); + }); + } // wait for initial file scan to complete + + + this.watcher.once('ready', function () { + var watched = []; + + if (_.isArray(self.options.watchTags)) { + _.each(self.options.watchTags, function (watchTag) { + watched.push(watchTag.split(',')); + }); + } else if (_.isString(self.options.watchTags)) { + watched.push(self.options.watchTags.split(',')); + } + + log.info("[chimp] Watching features with tagged with ".concat(watched.join()).white); // start watching + + self.watcher.on('all', self._getDebouncedFunction(function (event, path) { + // removing feature files should not rerun + if (event === 'unlink' && path.match(/\.feature$/)) { + return; + } + + log.debug('[chimp] file changed'); + self.rerun(); + }, 500)); + log.debug('[chimp] watcher ready, running for the first time'); + self.rerun(); + }); +}; + +Chimp.prototype._getDebouncedFunction = function (func, timeout) { + return _.debounce(func, timeout); +}; +/** + * Starts a chimp server on a freeport or on options.serverPort if provided + * + * @api public + */ + + +Chimp.prototype.server = function () { + var self = this; + + if (!this.options.serverPort) { + freeport(function (error, port) { + if (error) { + throw error; + } + + self._startServer(port); + }); + } else { + self._startServer(this.options.serverPort); + } +}; + +Chimp.prototype._startServer = function (port) { + var server = new Hapi.Server(); + server.connection({ + host: this.options.serverHost, + port: port, + routes: { + timeout: { + server: false, + socket: false + } + } + }); + + this._setupRoutes(server); + + server.start(); + log.info('[chimp] Chimp server is running on port', port, process.env['chimp.ddp']); + + if (booleanHelper.isTruthy(this.options.ddp)) { + this._handshakeOverDDP(); + } +}; + +Chimp.prototype._handshakeOverDDP = function () { + var ddp = new DDPClient({ + host: process.env['chimp.ddp'].match(/http:\/\/(.*):/)[1], + port: process.env['chimp.ddp'].match(/:([0-9]+)/)[1], + ssl: false, + autoReconnect: true, + autoReconnectTimer: 500, + maintainCollections: true, + ddpVersion: '1', + useSockJs: true + }); + ddp.connect(function (error) { + if (error) { + log.error('[chimp] Error handshaking via DDP'); + throw error; + } + }).then(function () { + log.debug('[chimp] Handshaking with DDP server'); + ddp.call('handshake').then(function () { + log.debug('[chimp] Handshake complete, closing DDP connection'); + ddp.close(); + }); + }); +}; + +Chimp.prototype._parseResult = function (res) { + // FIXME this is shitty, there's got to be a nicer way to deal with variable async chains + var cucumberResults = res[1][1] ? res[1][1] : res[1][0]; + + if (!cucumberResults) { + log.error('[chimp] Could not get Cucumber Results from run result:'); + log.error(res); + } + + log.debug('[chimp] Responding to /run request with:'); + log.debug(cucumberResults); + return cucumberResults; +}; + +Chimp.prototype._setupRoutes = function (server) { + var self = this; + server.route({ + method: 'GET', + path: '/run', + handler: function handler(request, reply) { + self.rerun(function (err, res) { + var cucumberResults = self._parseResult(res); + + reply(cucumberResults).header('Content-Type', 'application/json'); + }); + } + }); + server.route({ + method: 'GET', + path: '/run/{absolutePath*}', + handler: function handler(request, reply) { + /// XXX is there a more elegant way we can do this? + self.options._[2] = request.params.absolutePath; + self.rerun(function (err, res) { + var cucumberResults = self._parseResult(res); + + reply(cucumberResults).header('Content-Type', 'application/json'); + }); + } + }); + server.route({ + method: 'GET', + path: '/interrupt', + handler: function handler(request, reply) { + self.interrupt(function (err, res) { + reply('done').header('Content-Type', 'application/json'); + }); + } + }); + server.route({ + method: 'GET', + path: '/runAll', + handler: function handler(request, reply) { + self.options._tags = self.options.tags; + self.options.tags = '~@ignore'; + self.rerun(function (err, res) { + self.options.tags = self.options._tags; + + var cucumberResults = self._parseResult(res); + + reply(cucumberResults).header('Content-Type', 'application/json'); + }); + } + }); +}; +/** + * Starts servers and runs specs + * + * @api public + */ + + +Chimp.prototype.run = function (callback) { + log.info("\n[chimp] Running..."[DEFAULT_COLOR]); + var self = this; + + function getJsonCucumberResults(result) { + var startProcessesIndex = 1; + + if (!result || !result[startProcessesIndex]) { + return []; + } + + var jsonResult = '[]'; + + _.any(['domain', 'e2e', 'generic'], function (type) { + var _testRunner = _.findWhere(self.testRunnerRunOrder, { + name: 'cucumber', + type: type + }); + + if (_testRunner) { + jsonResult = result[startProcessesIndex][_testRunner.index]; + return true; + } + }); + + return JSON.parse(jsonResult); + } + + async.series([self.interrupt.bind(self), self._startProcesses.bind(self), self.interrupt.bind(self)], function (error, result) { + if (error) { + log.debug('[chimp] run complete with errors', error); + + if (booleanHelper.isFalsey(self.options.watch)) { + self.interrupt(function () {}); + } + } else { + log.debug('[chimp] run complete'); + } + + if (self.options.simianAccessToken && self.options.simianResultBranch !== false) { + var jsonCucumberResult = getJsonCucumberResults(result); + var simianReporter = new exports.SimianReporter(self.options); + simianReporter.report(jsonCucumberResult, function () { + callback(error, result); + }); + } else { + callback(error, result); + } + }); +}; +/** + * Interrupts any running specs in the reverse order. This allows cucumber to shut down first + * before webdriver servers, otherwise we can get test errors in the console + * + * @api public + */ + + +Chimp.prototype.interrupt = function (callback) { + log.debug('[chimp] interrupting'); + var self = this; + self.isInterrupting = true; + + if (!self.processes || self.processes.length === 0) { + self.isInterrupting = false; + log.debug('[chimp] no processes to interrupt'); + + if (callback) { + callback(); + } + + return; + } + + log.debug('[chimp]', self.processes.length, 'processes to interrupt'); + var reverseProcesses = []; + + while (self.processes.length !== 0) { + reverseProcesses.push(self.processes.pop()); + } + + var processes = _.collect(reverseProcesses, function (process) { + return process.interrupt.bind(process); + }); + + async.series(processes, function (error, r) { + self.isInterrupting = false; + log.debug('[chimp] Finished interrupting processes'); + + if (error) { + log.error('[chimp] with errors', error); + } + + if (callback) { + callback.apply(this, arguments); + } + }); +}; +/** + * Combines the interrupt and run methods and latches calls + * + * @api public + */ + + +Chimp.prototype.rerun = function (callback) { + log.debug('[chimp] rerunning'); + var self = this; + + if (self.isInterrupting) { + log.debug('[chimp] interrupt in progress, ignoring rerun'); + return; + } + + self.run(function (err, res) { + if (callback) { + callback(err, res); + } + + log.debug('[chimp] finished rerun'); + }); +}; +/** + * Starts processes in series + * + * @api private + */ + + +Chimp.prototype._startProcesses = function (callback) { + var self = this; + self.processes = self._createProcesses(); + + var processes = _.collect(self.processes, function (process) { + return process.start.bind(process); + }); // pushing at least one processes guarantees the series below runs + + + processes.push(function (callback) { + log.debug('[chimp] Finished running async processes'); + callback(); + }); + async.series(processes, function (err, res) { + if (err) { + self.isInterrupting = false; + log.debug('[chimp] Finished running async processes with errors'); + } + + callback(err, res); + }); +}; +/** + * Creates the correct sequence of servers needed prior to running cucumber + * + * @api private + */ + + +Chimp.prototype._createProcesses = function () { + var processes = []; + var self = this; + + var addTestRunnerToRunOrder = function addTestRunnerToRunOrder(name, type) { + self.testRunnerRunOrder.push({ + name: name, + type: type, + index: processes.length - 1 + }); + }; + + var userHasNotProvidedSeleniumHost = function userHasNotProvidedSeleniumHost() { + return booleanHelper.isFalsey(self.options.host); + }; + + var userHasProvidedBrowser = function userHasProvidedBrowser() { + return booleanHelper.isTruthy(self.options.browser); + }; + + if (!this.options.domainOnly) { + if (this.options.browser === 'phantomjs') { + process.env['chimp.host'] = this.options.host = 'localhost'; + var phantom = new exports.Phantom(this.options); + processes.push(phantom); + } else if (userHasProvidedBrowser() && userHasNotProvidedSeleniumHost()) { + process.env['chimp.host'] = this.options.host = 'localhost'; + var selenium = new exports.Selenium(this.options); + processes.push(selenium); + } else if (userHasNotProvidedSeleniumHost()) { + // rewrite the browser to be chrome since "chromedriver" is not a valid browser + process.env['chimp.browser'] = this.options.browser = 'chrome'; + process.env['chimp.host'] = this.options.host = 'localhost'; + var chromedriver = new exports.Chromedriver(this.options); + processes.push(chromedriver); + } + } + + if (booleanHelper.isTruthy(this.options.mocha)) { + var mocha = new exports.Mocha(this.options); + processes.push(mocha); + } else if (booleanHelper.isTruthy(this.options.jasmine)) { + var jasmine = new exports.Jasmine(this.options); + processes.push(jasmine); + } else { + if (booleanHelper.isTruthy(this.options.e2eSteps) || booleanHelper.isTruthy(this.options.domainSteps)) { + // domain scenarios + if (booleanHelper.isTruthy(this.options.domainSteps)) { + var options = JSON.parse(JSON.stringify(this.options)); + + if (options.r) { + options.r = _.isArray(options.r) ? options.r : [options.r]; + } else { + options.r = []; + } + + var message = '\n[chimp] domain scenarios...'; + options.r.push(options.domainSteps); + + if (booleanHelper.isTruthy(options.fullDomain)) { + delete options.tags; + } + + if (!this.options.domainOnly) { + processes.push(new exports.Consoler(message[DEFAULT_COLOR])); + } + + processes.push(new exports.Cucumber(options)); + addTestRunnerToRunOrder('cucumber', 'domain'); + processes.push(new exports.Consoler('')); + } + + if (booleanHelper.isTruthy(this.options.e2eSteps)) { + // e2e scenarios + var _options = JSON.parse(JSON.stringify(this.options)); + + if (_options.r) { + _options.r = _.isArray(_options.r) ? _options.r : [_options.r]; + } else { + _options.r = []; + } + + _options.tags = _options.tags.split(','); + + _options.tags.push(_options.e2eTags); + + _options.tags = _options.tags.join(); + + var _message = "\n[chimp] ".concat(_options.e2eTags, " scenarios ..."); + + _options.r.push(_options.e2eSteps); + + processes.push(new exports.Consoler(_message[DEFAULT_COLOR])); + processes.push(new exports.Cucumber(_options)); + addTestRunnerToRunOrder('cucumber', 'e2e'); + processes.push(new exports.Consoler('')); + } + } else { + var cucumber = new exports.Cucumber(this.options); + processes.push(cucumber); + addTestRunnerToRunOrder('cucumber', 'generic'); + } + } + + return processes; +}; +/** + * Uses process.kill wen interrupted by Meteor so that Selenium shuts down correctly for node 0.10.x + * + * @api private + */ + + +Chimp.prototype._handleChimpInterrupt = function () { + var self = this; + process.on('SIGINT', function () { + log.debug('[chimp] SIGINT detected, killing process'); + process.stdin.end(); + self.interrupt(); + + if (booleanHelper.isTruthy(self.options.watch)) { + self.watcher.close(); + } + }); +}; + +module.exports = Chimp; \ No newline at end of file diff --git a/dist/lib/chromedriver.js b/dist/lib/chromedriver.js new file mode 100644 index 0000000..3f879bf --- /dev/null +++ b/dist/lib/chromedriver.js @@ -0,0 +1,103 @@ +"use strict"; + +var chromedriver = require('chromedriver'), + processHelper = require('./process-helper.js'), + fs = require('fs'), + log = require('./log'); +/** + * Chromedriver Constructor + * + * @param {Object} options + * @api public + */ + + +function Chromedriver(options) { + if (!options) { + throw new Error('options is required'); + } + + if (!options.port) { + throw new Error('options.port is required'); + } + + this.options = options; + this.child = null; +} +/** + * Start Chromedriver + * + * @param {Function} callback + * @api public + */ + + +Chromedriver.prototype.start = function (callback) { + var self = this; + var port = self.options.port; + + if (this.child) { + callback(); + return; + } + + var chromedriverPath = chromedriver.path; + + if (fs.existsSync(chromedriverPath)) { + this.child = processHelper.start({ + bin: chromedriverPath, + prefix: 'chromedriver', + args: ['--port=' + port, '--url-base=wd/hub'], + waitForMessage: /Starting ChromeDriver/, + errorMessage: /Error/ + }, callback); + } else { + callback('[chimp][chromedriver] Chromedriver executable not found.'); + } +}; +/** + * Stop Chromedriver + * + * @param {Function} callback + * @api public + */ + + +Chromedriver.prototype.stop = function (callback) { + var self = this; + + if (self.child) { + log.debug('[chimp][chromedriver] stopping process'); + var options = { + child: self.child, + prefix: 'chromedriver' + }; + processHelper.kill(options, function (err, res) { + self.child = null; + callback(err, res); + }); + } else { + log.debug('[chimp][chromedriver] no process to kill'); + callback(null); + } +}; +/** + * Interrupt Chromedriver + * + * @param {Function} callback + * @api public + */ + + +Chromedriver.prototype.interrupt = function (callback) { + log.debug('[chimp][chromedriver] interrupt called'); + + if (!this.options['watch'] || !!this.options['clean-chromedriver-server']) { + this.stop(callback); + } else { + log.debug('[chimp][chromedriver] interrupt is not killing chromedriver because ' + 'clean-chromedriver-server not set'); + callback(null); + } +}; + +module.exports = Chromedriver; \ No newline at end of file diff --git a/dist/lib/ci.js b/dist/lib/ci.js new file mode 100644 index 0000000..6b6b4f2 --- /dev/null +++ b/dist/lib/ci.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isCI = isCI; + +var _environmentVariableParsers = require("./environment-variable-parsers"); + +function isCI() { + return (0, _environmentVariableParsers.parseBoolean)(process.env.CI); +} \ No newline at end of file diff --git a/dist/lib/consoler.js b/dist/lib/consoler.js new file mode 100644 index 0000000..a0729dd --- /dev/null +++ b/dist/lib/consoler.js @@ -0,0 +1,48 @@ +"use strict"; + +/** + * Consoler Constructor + * + * @param {Object} options + * @api public + */ +function Consoler(message, color) { + this.color = color || 'black'; + this.message = message; +} +/** + * Start Consoler + * + * @param {Function} callback + * @api public + */ + + +Consoler.prototype.start = function (callback) { + console.log(this.message); + callback(); +}; +/** + * Stop Consoler + * + * @param {Function} callback + * @api public + */ + + +Consoler.prototype.stop = function (callback) { + callback(); +}; +/** + * Interrupt Consoler + * + * @param {Function} callback + * @api public + */ + + +Consoler.prototype.interrupt = function (callback) { + callback(); +}; + +module.exports = Consoler; \ No newline at end of file diff --git a/dist/lib/cucumberjs/cucumber-wrapper.js b/dist/lib/cucumberjs/cucumber-wrapper.js new file mode 100644 index 0000000..d7f4c36 --- /dev/null +++ b/dist/lib/cucumberjs/cucumber-wrapper.js @@ -0,0 +1,109 @@ +"use strict"; + +/* + * This file does some minor modifications on how Cucumber is started. + * + * Modifications to the original code from cucumber: + * - Adds the IPC listener + * - Modify the argv that are passed to the Cucumber CLI + * - Use exit instead of process.exit + */ +var Cucumber = require('cucumber'); + +var exit = require('exit'); // This is a modified version of cucumber/lib/cli + + +function Cli(argv) { + var Cucumber = require('cucumber'); + + var Command = require('commander').Command; + + var path = require('path'); + + function collect(val, memo) { + memo.push(val); + return memo; + } + + function getProgram() { + var program = new Command(path.basename(argv[1])); + program.usage('[options] [...]').version(Cucumber.VERSION, '-v, --version').option('-b, --backtrace', 'show full backtrace for errors').option('--compiler ', 'require files with the given EXTENSION after requiring MODULE (repeatable)', collect, []).option('-d, --dry-run', 'invoke formatters without executing steps').option('--fail-fast', 'abort the run on first failure').option('-f, --format ', 'specify the output format, optionally supply PATH to redirect formatter output (repeatable)', collect, ['pretty']).option('--name ', 'only execute the scenarios with name matching the expression (repeatable)', collect, []).option('--no-colors', 'disable colors in formatter output').option('--no-snippets', 'hide step definition snippets for pending steps').option('--no-source', 'hide source uris').option('-p, --profile ', 'specify the profile to use (repeatable)', collect, []).option('-r, --require ', 'require files before executing features (repeatable)', collect, []).option('--snippet-syntax ', 'specify a custom snippet syntax').option('-S, --strict', 'fail if there are any undefined or pending steps').option('-t, --tags ', 'only execute the features or scenarios with tags matching the expression (repeatable)', collect, []); + program.on('--help', function () { + console.log(' For more details please visit https://github.com/cucumber/cucumber-js#cli\n'); + }); + return program; + } + + function getConfiguration() { + var program = getProgram(); + program.parse(argv); + var profileArgs = Cucumber.Cli.ProfilesLoader.getArgs(program.profile); + + if (profileArgs.length > 0) { + var fullArgs = argv.slice(0, 2).concat(profileArgs).concat(argv.slice(2)); + program = getProgram(); + program.parse(fullArgs); + } + + var configuration = Cucumber.Cli.Configuration(program.opts(), program.args); + return configuration; + } + + var self = { + run: function run(callback) { + var configuration = getConfiguration(); + var runtime = Cucumber.Runtime(configuration); + var formatters = [createIpcFormatter()].concat(configuration.getFormatters()); + formatters.forEach(function (formatter) { + runtime.attachListener(formatter); + }); + + try { + runtime.start(callback); + } catch (e) { + console.log(e.stack || e); + callback(false); + } + } + }; + return self; +} + +function createIpcFormatter() { + // add a json formatter that sends results over IPC + var ipcFormatter = new Cucumber.Listener.JsonFormatter(); + var finish = ipcFormatter.finish; + + ipcFormatter.finish = function sendResultToChimp(callback) { + var _this = this; + + finish.call(this, function (error, result) { + var results = _this.getLogs(); + + process.send(results, function () { + callback(error, result); + }); + }); + }; + + return ipcFormatter; +} // This is a modified version of cucumber/bin/cucumber + + +var argv = process.argv.slice(1); +argv = argv.slice(argv.indexOf('node')); +var cli = Cli(argv); +cli.run(function (succeeded) { + var code = succeeded ? 0 : 2; + + function exitNow() { + exit(code); + } + + if (process.stdout.write('')) { + exitNow(); + } else { + // write() returned false, kernel buffer is not empty yet... + process.stdout.on('drain', exitNow); + } +}); \ No newline at end of file diff --git a/dist/lib/cucumberjs/cucumber.js b/dist/lib/cucumberjs/cucumber.js new file mode 100644 index 0000000..aeac311 --- /dev/null +++ b/dist/lib/cucumberjs/cucumber.js @@ -0,0 +1,318 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); + +var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); + +var path = require('path'); + +var cp = require('child-process-debug'); + +var processHelper = require('./../process-helper.js'); + +var log = require('./../log'); + +var _ = require('underscore'); + +var booleanHelper = require('../boolean-helper'); + +var fs = require('fs-extra'); +/** + * Run Cucumber specs + * + * @param {Function} callback + * @api public + */ + + +var Cucumber = +/*#__PURE__*/ +function () { + function Cucumber(options) { + (0, _classCallCheck2["default"])(this, Cucumber); + this.options = options; + this.cucumberChild = null; + } + + (0, _createClass2["default"])(Cucumber, [{ + key: "start", + value: function start(callback) { + var _this = this; + + var args = this._getExecOptions(this.options); + + if (!fs.existsSync(this.options.path)) { + var infoMessage = "[chimp][cucumber] Directory ".concat(this.options.path, " does not exist. Not running"); + + if (booleanHelper.isTruthy(this.options['fail-when-no-tests-run'])) { + callback(infoMessage); + } else { + log.info(infoMessage); + callback(); + } + + return; + } + + log.debug('[chimp][cucumber] Running with', args); + var opts = { + env: process.env, + silent: true + }; + var port; + + if (booleanHelper.isTruthy(this.options.debugCucumber)) { + port = parseInt(this.options.debugCucumber, 10); + + if (port > 1) { + opts.execArgv = ['--debug=' + port]; + } else { + opts.execArgv = ['--debug']; + } + } + + if (booleanHelper.isTruthy(this.options.debugBrkCucumber)) { + port = parseInt(this.options.debugBrkCucumber, 10); + + if (port > 1) { + opts.execArgv = ['--debug-brk=' + port]; + } else { + opts.execArgv = ['--debug-brk']; + } + } + + this.cucumberChild = cp.fork(path.join(__dirname, 'cucumber-wrapper.js'), args, opts); + + if (booleanHelper.isTruthy(this.options.conditionOutput)) { + this.cucumberChild.stdout.on('data', function (data) { + _this._conditionMessage(data.toString()); + }); + } else { + this.cucumberChild.stdout.pipe(process.stdout); + } + + this.cucumberChild.stderr.pipe(process.stderr); + process.stdin.pipe(this.cucumberChild.stdin); + var jsonResults = null; + this.cucumberChild.on('message', function (res) { + log.debug('[chimp][cucumber] Received message from cucumber child. Result:', res); + jsonResults = res; + }); + this.cucumberChild.on('close', function (code) { + log.debug('[chimp][cucumber] Closed with code', code); + + if (!_this.cucumberChild.stopping) { + log.debug('[chimp][cucumber] Cucumber not in a stopping state'); + + if (_this.options.jsonOutput && jsonResults && JSON.parse(jsonResults).length) { + var dir = path.dirname(_this.options.jsonOutput); + log.debug('[chimp][cucumber] Ensuring directory exists', dir); + fs.mkdirsSync(dir); + log.debug('[chimp][cucumber] Writing json results to', _this.options.jsonOutput); + fs.writeFileSync(_this.options.jsonOutput, jsonResults); + log.debug('[chimp][cucumber] Finished writing results'); + } + + var failWhenNoTestsRun = booleanHelper.isTruthy(_this.options['fail-when-no-tests-run']); + var noTestsFound = jsonResults === null || JSON.parse(jsonResults).length === 0; + callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Cucumber steps failed' : null, jsonResults); + } + }); + } + }, { + key: "interrupt", + value: function interrupt(callback) { + var _this2 = this; + + log.debug('[chimp][cucumber] interrupting cucumber'); + + if (!this.cucumberChild) { + log.debug('[chimp][cucumber] no child to interrupt'); + return callback(); + } + + this.cucumberChild.stopping = true; + var options = { + child: this.cucumberChild, + prefix: 'cucumber' + }; + processHelper.kill(options, function (err, res) { + _this2.cucumberChild = null; + + if (callback) { + callback(err, res); + } + }); + } + }, { + key: "_getRecommendedFilename", + value: function _getRecommendedFilename(line) { + var stepType = line.match(/this\.(Given|When|Then)/)[1]; + var recommendedFilename = stepType + ' ' + line.match(/\^(.*)\$/)[1]; + recommendedFilename = recommendedFilename.replace(/".*"/g, '#'); + recommendedFilename = recommendedFilename.replace(/\(.*\)/g, '#'); + recommendedFilename = recommendedFilename.replace(/\\/g, ''); + recommendedFilename = recommendedFilename.replace(/\$/g, ''); + recommendedFilename = recommendedFilename.replace(/ /g, this.options.recommendedFilenameSeparator || ' '); + return recommendedFilename; + } + }, { + key: "_conditionOutput", + value: function _conditionOutput(message) { + if (message.indexOf('callback.pending()') === -1) { + process.stdout.write(message); + return; + } + + try { + var defaultText = 'Write code here that turns the phrase above into concrete actions'; + var replacementText = 'Write the automation code here'; + var tab = ''; + var self = this; + + _.each(message.split('\n'), function (eachLine) { + if (booleanHelper.isTruthy(self.options.singleSnippetPerFile) && eachLine.match(/this\./)) { + process.stdout.write('// Recommended filename: '.gray + (self._getRecommendedFilename(eachLine) + '.js\n').cyan); + process.stdout.write('module.exports = function() {\n'.yellow); + tab = ' '; + } + + var line = eachLine; + line = line.replace(defaultText, replacementText); + line = line.replace('callback.pending()', 'pending()'); + line = line.replace(', callback', ''); + line = line.replace('callback', ''); + process.stdout.write(tab + line + '\n'); + + if (booleanHelper.isTruthy(self.options.singleSnippetPerFile) && line.match(/}\);/)) { + process.stdout.write('};\n'.yellow); + tab = ''; + } + }); + } catch (e) { + log.debug('[chimp][cucumber] Error conditioning message', e); + process.stdout.write(message); + } + } + }, { + key: "_conditionMessage", + value: function _conditionMessage(message) { + if (this.options.debug) { + log.debug(message); + return; + } // output any strings that don't contain a stack trace + + + if (message.indexOf(' at') === -1) { + this._conditionOutput(message); + + return; + } + + var msg = ''; + var basePath = path.resolve('.', this.options.path); + var basePathParent = path.resolve(basePath, '..'); + var TAB = ' '; + + try { + _.each(message.split('\n'), function (line) { + var trimmedLine = line.trim(); + var relativePathLine = line.replace(basePathParent + path.sep, ''); // filter out some known unnecessary lines + // console.error('[' + line + ']'); + + if (trimmedLine.indexOf('node_modules') !== -1) { + return; + } // for stack trace lines + + + if (trimmedLine.indexOf('at') === 0) { + msg += relativePathLine.yellow + '\n'; + } else { + // or other lines that start with a tab (cucumber repeats errors at the end) + if (line.indexOf(TAB) !== -1) { + msg += relativePathLine.yellow + '\n'; + } else { + msg += relativePathLine.magenta + '\n'; + } + } + }); + + process.stdout.write(msg); + } catch (e) { + log.debug('[chimp][cucumber] Error conditioning console out', e); + process.stdout.write(message); + } + } + }, { + key: "_getExecOptions", + value: function _getExecOptions(options) { + var execOptions = ['node', path.resolve(__dirname, path.join('..', '..', '..', 'node_modules', '.bin', 'cucumber.js'))]; // XXX a feature may be defined at the start or end + // XXX do other options also get passed with this command? + + var features = options._.splice(2).toString() || options.features || options.path; + + if (features.indexOf(',') !== -1) { + features = features.split(','); + + _.each(features, function (feature) { + execOptions.push(feature); + }); + } else { + execOptions.push(features); + } + + execOptions.push('-r'); + execOptions.push(path.resolve(__dirname, path.join('../chimp-helper.js'))); + execOptions.push('-r'); + execOptions.push(path.resolve(__dirname, path.join('world.js'))); + + if (!options.domainOnly) { + execOptions.push('-r'); + execOptions.push(path.resolve(__dirname, path.join('hooks.js'))); + } + + if (!options.r && !options.require) { + execOptions.push('-r'); + execOptions.push(options.path); + } // See: https://github.com/cucumber/cucumber-js/blob/v0.9.2/lib/cucumber/cli.js + + + var allowedCucumberJsOptions = { + "long": ['version', 'backtrace', 'compiler', 'dry-run', 'fail-fast', 'format', 'no-colors', 'no-snippets', 'no-source', 'profile', 'require', 'snippet-syntax', 'strict', 'tags', 'help', 'name'], + "short": ['v', 'b', 'd', 'f', 'p', 'r', 'S', 't'] + }; + + _.forEach(options, function (eachOptionValues, optionName) { + var optionValues = _.isArray(eachOptionValues) ? eachOptionValues : [eachOptionValues]; + + if (_.contains(allowedCucumberJsOptions["long"], optionName)) { + _.forEach(optionValues, function (optionValue) { + execOptions.push('--' + optionName); + + if (['dry-run', 'fail-fast', 'no-colors', 'no-snippets', 'no-source', 'strict', 'backtrace'].indexOf(optionName) === -1) { + execOptions.push(optionValue.toString()); + } + }); + } else if (_.contains(allowedCucumberJsOptions["short"], optionName)) { + _.forEach(optionValues, function (optionValue) { + execOptions.push('-' + optionName); + + if (['d', 'S', 'b'].indexOf(optionName) === -1) { + execOptions.push(optionValue.toString()); + } + }); + } else if (_.last(optionValues) === false && _.contains(allowedCucumberJsOptions["long"], 'no-' + optionName)) { + execOptions.push('--no-' + optionName); + } + }); + + log.debug('[chimp][cucumber] Cucumber exec options are: ', execOptions); + return execOptions; + } + }]); + return Cucumber; +}(); + +module.exports = Cucumber; \ No newline at end of file diff --git a/dist/lib/cucumberjs/hooks.js b/dist/lib/cucumberjs/hooks.js new file mode 100644 index 0000000..abf4005 --- /dev/null +++ b/dist/lib/cucumberjs/hooks.js @@ -0,0 +1,124 @@ +"use strict"; + +var log = require('../log'); + +var exit = require('exit'); + +var _ = require('underscore'); + +var booleanHelper = require('../boolean-helper'); + +var screenshotHelper = require('../screenshot-helper'); + +module.exports = function hooks() { + var screenshots = {}; + this.setDefaultTimeout(60 * 1000); + this.registerHandler('BeforeFeatures', function () { + log.debug('[chimp][hooks] Starting BeforeFeatures'); + global.chimpHelper.setupBrowserAndDDP(); + global.chimpHelper.createGlobalAliases(); + log.debug('[chimp][hooks] Finished BeforeFeatures'); // noinspection JSUnresolvedVariable + + if (global.UserDefinedBeforeFeatures) { + log.debug('[chimp][hooks] User-defined BeforeFeatures found, calling'); // noinspection JSUnresolvedFunction + + global.UserDefinedBeforeFeatures(); // eslint-disable-line new-cap + } else { + log.debug('[chimp][hooks] User-defined BeforeFeatures not found, finishing up'); + } + }); + /** + * Capture screenshots either for erroneous / all steps + */ + + var lastStep; + this.StepResult(function (stepResult) { + // eslint-disable-line new-cap + lastStep = stepResult.getStep(); + + if (screenshotHelper.shouldTakeScreenshot(stepResult.getStatus())) { + log.debug('[chimp][hooks] capturing screenshot'); + + if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToReport'])) { + var screenshotId = lastStep.getUri() + ':' + lastStep.getLine(); // noinspection JSUnresolvedFunction + + screenshots[screenshotId] = { + keyword: lastStep.getKeyword(), + name: lastStep.getName(), + uri: lastStep.getUri(), + line: lastStep.getLine(), + png: global.browser.screenshot().value + }; + } + + if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { + var affix = stepResult.getStatus() !== 'passed' ? ' (failed)' : ''; // noinspection JSUnresolvedFunction + + var fileName = lastStep.getKeyword() + ' ' + lastStep.getName() + affix; + screenshotHelper.saveScreenshotsToDisk(fileName); + } + } + }); + /** + * Stores captures screenshots in the report + */ + + this.After(function (scenario) { + // eslint-disable-line new-cap + _.each(screenshots, function (element) { + var decodedImage = new Buffer(element.png, 'base64'); + scenario.attach(decodedImage, 'image/png'); + }); + }); + /** + * After features have run we close the browser and optionally notify + * SauceLabs + */ + + this.registerHandler('AfterFeatures', function () { + log.debug('[chimp][hooks] Starting AfterFeatures'); + + if (process.env['chimp.browser'] !== 'phantomjs') { + log.debug('[chimp][hooks] Ending browser session'); + global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); + log.debug('[chimp][hooks] Ended browser sessions'); + } + + log.debug('[chimp][hooks] Finished AfterFeatures'); + }); + process.on('unhandledRejection', function (reason, promise) { + log.error('[chimp] Detected an unhandledRejection:'.red); + + try { + if (reason.type === 'CommandError' && reason.message === 'Promise never resolved with an truthy value') { + reason.type += 'WebdriverIO CommandError (Promise never resolved with an truthy value)'; + reason.message = 'This usually happens when WebdriverIO assertions fail or timeout.'; + var hint = 'HINT: Check the step AFTER [' + lastStep.getKeyword() + lastStep.getName() + ']'; + var uri = lastStep.getUri(); + uri = uri.substring(process.cwd().length, uri.length); + hint += ' (' + uri + ': >' + lastStep.getLine() + ')'; + log.error('[chimp][hooks] Reason:'.red); + log.error('[chimp][hooks]'.red, reason.type.red); + log.error('[chimp][hooks]'.red, reason.message.red); + log.error(hint.yellow); + reason.message += '\n' + hint; + } else { + log.error('[chimp][hooks]'.red, reason.stack); + } + } catch (e) { + log.debug('[chimp][hooks] Could not provide error hint'); + } + + log.debug('[chimp][hooks] Promise:', JSON.parse(JSON.stringify(promise))); + log.debug('[chimp][hooks] Forcibly exiting Cucumber'); + process.send(JSON.stringify(reason)); + exit(2); + }); + process.on('SIGINT', function () { + log.debug('[chimp][hooks] Received SIGINT process event, ending browser session'); + global.browser.endAsync().then(function () { + log.debug('[chimp][hooks] ended browser session'); + exit(); + }); + }); +}; \ No newline at end of file diff --git a/dist/lib/cucumberjs/world.js b/dist/lib/cucumberjs/world.js new file mode 100644 index 0000000..812356b --- /dev/null +++ b/dist/lib/cucumberjs/world.js @@ -0,0 +1,31 @@ +"use strict"; + +var _ = require('underscore'); + +module.exports = function () { + chimpHelper.init(); + chimpHelper.loadAssertionLibrary(); + var UserWorld = this.World; + + this.World = function World() { + this.browser = global.browser; + this.driver = global.browser; + this.client = global.browser; + this.request = global.request; + this.ddp = global.ddp; + this.mirror = global.ddp; + this.server = global.ddp; + this.chimpWidgets = global.chimpWidgets; + + if (UserWorld) { + // The user can modify the world + var userWorldInstance = UserWorld.apply(this, _.toArray(arguments)); + + if (userWorldInstance) { + _.extend(this, userWorldInstance); + } + } + + return this; + }; +}; \ No newline at end of file diff --git a/dist/lib/ddp-watcher.js b/dist/lib/ddp-watcher.js new file mode 100644 index 0000000..c9de154 --- /dev/null +++ b/dist/lib/ddp-watcher.js @@ -0,0 +1,163 @@ +"use strict"; + +// taken from https://github.com/timbotnik/meteor-autoupdate-watcher +var DDPClient = require('xolvio-ddp'), + _ = require('underscore'), + URL = require('url'), + log = require('./log'); + +var AutoupdateWatcher = function AutoupdateWatcher(options) { + this.options = options; + this._url = this._getUrl(options.ddp); + this._currentVersions = {}; + this._lastRerun = 0; + this._autoupdateCollection = {}; + this._ddpClient = null; +}; + +AutoupdateWatcher.prototype._getUrl = function (ddpHost) { + if (ddpHost instanceof Array) { + ddpHost = ddpHost[0]; + } + + if (ddpHost.indexOf('http://') === -1 && ddpHost.indexOf('https://') === -1) { + throw new Error('[chimp][ddp] DDP url must contain the protocol'); + } + + return URL.parse(ddpHost); +}; + +AutoupdateWatcher.prototype._triggerRerun = function () { + var self = this; + var now = new Date().getTime(); + + if (now - self._lastRerun > 1000) { + // debounce this since we always see multiple version records change around the same time + // actually rerun here... + self._lastRerun = now; + + self._trigger(); + } +}; + +AutoupdateWatcher.prototype._didUpdateVersion = function (doc) { + var self = this; + var versionType; + var versionKey; + + if (doc._id.match(/version/) === null) { + versionType = 'version-server'; + versionKey = '_id'; + } else { + versionType = doc._id; + versionKey = 'version'; + } + + var prevVersion = self._currentVersions[versionType]; + var newVersion = doc[versionKey]; + var isUpdated = prevVersion && prevVersion !== newVersion; + + if (isUpdated) { + log.debug('[chimp][ddp-watcher] New ' + versionType + ': ' + newVersion); + } + + self._currentVersions[versionType] = newVersion; + return isUpdated; +}; + +AutoupdateWatcher.prototype._checkForUpdate = function () { + var self = this; + var observedAutoupdate = false; + + _.each(self._autoupdateCollection, function (doc) { + if (!observedAutoupdate && self._didUpdateVersion(doc)) { + observedAutoupdate = true; + } + }); + + if (observedAutoupdate) { + self._triggerRerun(); + } +}; + +AutoupdateWatcher.prototype.watch = function (trigger) { + var self = this; + self._trigger = trigger; + self._ddpClient = new DDPClient({ + // All properties optional, defaults shown + host: this._url.hostname, + port: this._url.port, + ssl: this._url.protocol === 'https:', + path: this._url.pathname !== '/' ? this._url.pathname + '/websocket' : undefined, + autoReconnect: true, + autoReconnectTimer: 500, + maintainCollections: true, + ddpVersion: '1', + useSockJs: this._url.pathname === '/' + }); + /* + * Observe the autoupdate collection. + */ + + var observer = self._ddpClient.observe('meteor_autoupdate_clientVersions'); + + observer.added = function (id) { + log.debug('[chimp][ddp-watcher] ADDED to ' + observer.name + ': ' + id); + }; + + observer.changed = function (id, oldFields, clearedFields, newFields) { + log.debug('[chimp][ddp-watcher] CHANGED in ' + observer.name + ': ' + id); + log.debug('[chimp][ddp-watcher] CHANGED old field values: ', oldFields); + log.debug('[chimp][ddp-watcher] CHANGED cleared fields: ', clearedFields); + log.debug('[chimp][ddp-watcher] CHANGED new fields: ', newFields); + + if (self._didUpdateVersion(self._autoupdateCollection[id])) { + self._triggerRerun(); + } + }; + + observer.removed = function (id, oldValue) { + log.debug('[chimp][ddp-watcher] REMOVED in ' + observer.name + ': ' + id); + log.debug('[chimp][ddp-watcher] REMOVED previous value: ', oldValue); + }; + + self._observer = observer; + /* + * Connect to the Meteor Server + */ + + self._ddpClient.connect(function (error, wasReconnect) { + // If autoReconnect is true, this callback will be invoked each time + // a server connection is re-established + if (error) { + log.error('[chimp][ddp-watcher] DDP connection error!', error); + self._isConnected = false; + return; + } + + self._isConnected = true; + + if (wasReconnect) { + log.debug('[chimp][ddp-watcher] Reconnected'); + } else { + log.debug('[chimp][ddp-watcher] Connected'); + } // force a reset of 'maintained' collections + + + self._ddpClient.collections = {}; + /* + * Subscribe to the Meteor Autoupdate Collection + */ + + self._subscriptionHandle = self._ddpClient.subscribe('meteor_autoupdate_clientVersions', [], function () { + // callback when the subscription is ready + self._autoupdateCollection = self._ddpClient.collections.meteor_autoupdate_clientVersions; + log.debug('[chimp][ddp-watcher] meteor_autoupdate_clientVersions ready:'); + log.debug('[chimp][ddp-watcher] ' + self._autoupdateCollection); + + self._checkForUpdate(); + }); + }); +}; + +module.exports = AutoupdateWatcher; \ No newline at end of file diff --git a/dist/lib/ddp.js b/dist/lib/ddp.js new file mode 100644 index 0000000..897c285 --- /dev/null +++ b/dist/lib/ddp.js @@ -0,0 +1,58 @@ +"use strict"; + +var log = require('./log'), + URL = require('url'), + DDPClient = require('xolvio-ddp'), + booleanHelper = require('./boolean-helper'), + wrapAsyncObject = require('xolvio-sync-webdriverio').wrapAsyncObject; +/** + * DDP Constructor + * + * @api public + */ + + +function DDP(url) { + log.debug('[chimp][ddp] creating DDP wrapper'); + process.env.ROOT_URL = process.env.ROOT_URL || process.env['chimp.ddp0']; + + if (!url) { + this.url = this._getUrl(process.env['chimp.ddp0']); + } else { + this.url = this._getUrl(url); + } +} + +DDP.prototype.connect = function () { + var options = this._getOptions(); + + log.debug('[chimp][ddp] Connecting to DDP server', options); + return wrapAsyncObject(new DDPClient(options), ['connect', 'call', 'apply', 'callWithRandomSeed', 'subscribe'], { + syncByDefault: booleanHelper.isTruthy(process.env['chimp.sync']) + }); +}; + +DDP.prototype._getUrl = function (ddpHost) { + if (ddpHost.indexOf('http://') === -1 && ddpHost.indexOf('https://') === -1) { + throw new Error('[chimp][ddp] DDP url must contain the protocol'); + } + + return URL.parse(ddpHost); +}; + +DDP.prototype._getOptions = function () { + return { + host: this.url.hostname, + port: this.url.port, + ssl: this.url.protocol === 'https:', + path: this.url.pathname !== '/' ? this.url.pathname + '/websocket' : undefined, + // TODO extract all options + autoReconnect: true, + autoReconnectTimer: 500, + maintainCollections: true, + ddpVersion: '1', + useSockJs: this.url.pathname === '/' + }; +}; + +module.exports = DDP; \ No newline at end of file diff --git a/dist/lib/environment-variable-parsers.js b/dist/lib/environment-variable-parsers.js new file mode 100644 index 0000000..6cb7f5d --- /dev/null +++ b/dist/lib/environment-variable-parsers.js @@ -0,0 +1,52 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.parseString = parseString; +exports.parseInteger = parseInteger; +exports.parseNumber = parseNumber; +exports.parseBoolean = parseBoolean; +exports.parseNullable = parseNullable; +exports.parseNullableString = parseNullableString; +exports.parseNullableInteger = parseNullableInteger; +exports.parseNullableNumber = parseNullableNumber; +exports.parseNullableBoolean = parseNullableBoolean; + +var _booleanHelper = require("./boolean-helper"); + +function parseString(value) { + return value; +} + +function parseInteger(value) { + return parseInt(value, 10); +} + +function parseNumber(value) { + return Number(value); +} + +function parseBoolean(value) { + return (0, _booleanHelper.isTruthy)(value); +} + +function parseNullable(value, convert) { + return value === 'null' ? null : convert(value); +} + +function parseNullableString(value) { + return parseNullable(value, parseString); +} + +function parseNullableInteger(value) { + return parseNullable(value, parseInteger); +} + +function parseNullableNumber(value) { + return parseNullable(value, parseNumber); +} + +function parseNullableBoolean(value) { + return parseNullable(value, parseBoolean); +} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-fiberized-api.js b/dist/lib/jasmine/jasmine-fiberized-api.js new file mode 100644 index 0000000..9b1d512 --- /dev/null +++ b/dist/lib/jasmine/jasmine-fiberized-api.js @@ -0,0 +1,39 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = fiberizeJasmineApi; + +var _underscore = _interopRequireDefault(require("underscore")); + +var _fiberize = require("../utils/fiberize"); + +function fiberizeJasmineApi(context) { + ['describe', 'xdescribe', 'fdescribe'].forEach(function (method) { + var original = context[method]; + context[method] = _underscore["default"].wrap(original, function (fn) { + var args = Array.prototype.slice.call(arguments, 1); + + if (_underscore["default"].isFunction(_underscore["default"].last(args))) { + args.push((0, _fiberize.fiberizeSync)(args.pop())); + } + + return fn.apply(this, args); + }); + }); + ['it', 'xit', 'fit', 'beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach(function (method) { + var original = context[method]; + context[method] = _underscore["default"].wrap(original, function (fn) { + var args = Array.prototype.slice.call(arguments, 1); + + if (_underscore["default"].isFunction(_underscore["default"].last(args))) { + args.push((0, _fiberize.fiberize)(args.pop())); + } + + return fn.apply(this, args); + }); + }); +} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-helpers.js b/dist/lib/jasmine/jasmine-helpers.js new file mode 100644 index 0000000..08bc97f --- /dev/null +++ b/dist/lib/jasmine/jasmine-helpers.js @@ -0,0 +1,24 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _chimpHelper = _interopRequireDefault(require("../chimp-helper")); + +var _log = _interopRequireDefault(require("../log")); + +beforeAll(function chimpSetup() { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000; + + _chimpHelper["default"].init(); + + _chimpHelper["default"].setupBrowserAndDDP(); +}); +afterAll(function chimpTeardown() { + if (process.env['chimp.browser'] !== 'phantomjs') { + _log["default"].debug('[chimp][jasmine-helpers] Ending browser session'); + + global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); + + _log["default"].debug('[chimp][jasmine-helpers] Ended browser sessions'); + } +}); \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-wrapper.js b/dist/lib/jasmine/jasmine-wrapper.js new file mode 100644 index 0000000..d1c8237 --- /dev/null +++ b/dist/lib/jasmine/jasmine-wrapper.js @@ -0,0 +1,96 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _path = _interopRequireDefault(require("path")); + +var _fibers = _interopRequireDefault(require("fibers")); + +var _underscore = _interopRequireDefault(require("underscore")); + +var _environmentVariableParsers = require("../environment-variable-parsers"); + +var _escapeRegExp = _interopRequireDefault(require("../utils/escape-reg-exp")); + +var _jasmineFiberizedApi = _interopRequireDefault(require("./jasmine-fiberized-api")); + +var _screenshotHelper = _interopRequireDefault(require("../screenshot-helper")); + +var _booleanHelper = _interopRequireDefault(require("../boolean-helper")); + +require('../babel-register'); + +new _fibers["default"](function runJasmineInFiber() { + var projectDir = process.env.PWD; + var testsDir = process.env['chimp.path']; + process.chdir(testsDir); + + var Jasmine = require('jasmine'); + + var jasmine = new Jasmine(); // Capability to add multiple spec filters + + var specFilters = []; + + jasmine.env.specFilter = function shouldRunSpec(spec) { + return _underscore["default"].every(specFilters, function (specFilter) { + return specFilter(spec); + }); + }; + + jasmine.jasmine.addSpecFilter = function addSpecFilter(filterFn) { + specFilters.push(filterFn); + }; + + if ((0, _environmentVariableParsers.parseBoolean)(process.env['chimp.watch'])) { + // Only run specs with a watch tag in watch mode + var watchedSpecRegExp = new RegExp((0, _environmentVariableParsers.parseString)(process.env['chimp.watchTags']).split(',').map(_escapeRegExp["default"]).join('|')); + jasmine.jasmine.addSpecFilter(function (spec) { + return watchedSpecRegExp.test(spec.getFullName()); + }); + } // Capability to capture screenshots + + + jasmine.jasmine.getEnv().addReporter({ + specDone: function specDone(result) { + if (_screenshotHelper["default"].shouldTakeScreenshot(result.status)) { + if (_booleanHelper["default"].isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { + var affix = result.status !== 'passed' ? ' (failed)' : ''; + var fileName = result.fullName + affix; + + _screenshotHelper["default"].saveScreenshotsToDisk(fileName, projectDir); + } + } + } + }); + (0, _jasmineFiberizedApi["default"])(global); + jasmine.loadConfig(getJasmineConfig()); + jasmine.configureDefaultReporter(JSON.parse(process.env['chimp.jasmineReporterConfig'])); + jasmine.execute(); +}).run(); + +function getJasmineConfig() { + var jasmineConfig = JSON.parse(process.env['chimp.jasmineConfig']); + + if (jasmineConfig.specDir) { + if (!jasmineConfig.spec_dir) { + jasmineConfig.spec_dir = jasmineConfig.specDir; + } + + delete jasmineConfig.specDir; + } + + if (jasmineConfig.specFiles) { + if (!jasmineConfig.spec_files) { + jasmineConfig.spec_files = jasmineConfig.specFiles; + } + + delete jasmineConfig.specFiles; + } + + if (!jasmineConfig.helpers) { + jasmineConfig.helpers = []; + } + + jasmineConfig.helpers.unshift(_path["default"].relative(jasmineConfig.spec_dir, _path["default"].resolve(__dirname, 'jasmine-helpers.js'))); + return jasmineConfig; +} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine.js b/dist/lib/jasmine/jasmine.js new file mode 100644 index 0000000..c21afd2 --- /dev/null +++ b/dist/lib/jasmine/jasmine.js @@ -0,0 +1,127 @@ +"use strict"; + +var path = require('path'), + cp = require('child-process-debug'), + processHelper = require('./../process-helper.js'), + booleanHelper = require('../boolean-helper'), + log = require('./../log'), + _ = require('underscore'), + colors = require('colors'), + glob = require('glob'), + fs = require('fs-extra'); +/** + * Mocha Constructor + * + * @param {Object} options + * @api public + */ + + +function Jasmine(options) { + this.options = options; + this.child = null; +} +/** + * Run Mocha specs + * + * @param {Function} callback + * @api public + */ + + +Jasmine.prototype.start = function (callback) { + var self = this; + + if (glob.sync(self.options.path).length === 0) { + var infoMessage = "[chimp][jasmine] Directory ".concat(self.options.path, " does not exist. Not running"); + + if (booleanHelper.isTruthy(this.options['fail-when-no-tests-run'])) { + callback(infoMessage); + } else { + log.info(infoMessage); + callback(); + } + + return; + } + + log.debug('[chimp][jasmine] Running...'); + var opts = { + env: process.env, + silent: true + }; + var port; + + if (this.options.debugJasmine) { + port = parseInt(this.options.debugJasmine); + + if (port > 1) { + opts.execArgv = ['--debug=' + port]; + } else { + opts.execArgv = ['--debug']; + } + } + + if (this.options.debugBrkMocha) { + port = parseInt(this.options.debugBrkMocha); + + if (port > 1) { + opts.execArgv = ['--debug-brk=' + port]; + } else { + opts.execArgv = ['--debug-brk']; + } + } + + self.child = cp.fork(path.join(__dirname, 'jasmine-wrapper.js'), [], opts); + self.child.stdout.pipe(process.stdout); + self.child.stderr.pipe(process.stderr); + process.stdin.pipe(self.child.stdin); + var noTestsFound = false; + self.child.stdout.on('data', function (data) { + var colorCodesRegExp = new RegExp("\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]", 'g'); + var dataFromStdout = data.toString().replace(colorCodesRegExp, '').trim(); + + if (/^No specs found/.test(dataFromStdout)) { + noTestsFound = true; + } + }); + var result = null; + self.child.on('message', function (res) { + log.debug('[chimp][jasmine] Received message from Jasmine child. Result:', res); + result = res; + }); + self.child.on('close', function (code) { + log.debug('[chimp][jasmine] Closed with code', code); + var failWhenNoTestsRun = booleanHelper.isTruthy(self.options['fail-when-no-tests-run']); + + if (!self.child.stopping) { + log.debug('[chimp][jasmine] Jasmine not in a stopping state'); + callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Jasmine failed' : null, result); + } + }); +}; + +Jasmine.prototype.interrupt = function (callback) { + log.debug('[chimp][jasmine] interrupting jasmine'); + var self = this; + + if (!self.child) { + log.debug('[chimp][jasmine] no child to interrupt'); + return callback(); + } + + self.child.stopping = true; + var options = { + child: self.child, + prefix: 'jasmine' + }; + processHelper.kill(options, function (err, res) { + self.child = null; + + if (callback) { + callback(err, res); + } + }); +}; + +module.exports = Jasmine; \ No newline at end of file diff --git a/dist/lib/log.js b/dist/lib/log.js new file mode 100644 index 0000000..e97c0bb --- /dev/null +++ b/dist/lib/log.js @@ -0,0 +1,21 @@ +"use strict"; + +var log = require('loglevel'), + minimist = require('minimist'); + +var argv = minimist(process.argv, { + 'default': { + 'debug': false, + 'log': 'info' + }, + 'boolean': true +}) || []; +var debug = process.env['chimp.debug'] === 'true' ? true : process.env['chimp.debug'] === 'false' ? false : process.env['chimp.debug'] || process.env.DEBUG === 'true' || process.env.DEBUG === '1' || argv.debug; + +if (debug) { + log.setLevel('debug'); +} else { + log.setLevel(argv.log); +} + +module.exports = log; \ No newline at end of file diff --git a/dist/lib/mocha/mocha-fiberized-ui.js b/dist/lib/mocha/mocha-fiberized-ui.js new file mode 100644 index 0000000..da4564b --- /dev/null +++ b/dist/lib/mocha/mocha-fiberized-ui.js @@ -0,0 +1,33 @@ +"use strict"; + +var _fiberize = require("../utils/fiberize"); + +// taken from https://github.com/tzeskimo/mocha-fibers/blob/master/lib/mocha-fibers.js +// A copy of bdd interface, but beforeEach, afterEach, before, after, +// and it methods all run within fibers. +var Mocha = require('mocha'), + bdd = Mocha.interfaces.bdd, + _ = require('underscore'), + util = require('util'); + +// A copy of bdd interface, but wrapping everything in fibers +module.exports = Mocha.interfaces['fiberized-bdd-ui'] = function (suite) { + bdd(suite); + suite.on('pre-require', function (context) { + // Wrap test related methods in fiber + ['beforeEach', 'afterEach', 'after', 'before', 'it'].forEach(function (method) { + var original = context[method]; + context[method] = _.wrap(original, function (fn) { + var args = Array.prototype.slice.call(arguments, 1); + + if (_.isFunction(_.last(args))) { + args.push((0, _fiberize.fiberize)(args.pop())); + } + + return fn.apply(this, args); + }); + + _.extend(context[method], _(original).pick('only', 'skip')); + }); + }); +}; \ No newline at end of file diff --git a/dist/lib/mocha/mocha-helper.js b/dist/lib/mocha/mocha-helper.js new file mode 100644 index 0000000..6fa0945 --- /dev/null +++ b/dist/lib/mocha/mocha-helper.js @@ -0,0 +1,34 @@ +"use strict"; + +var chimpHelper = require('../chimp-helper'); + +var exit = require('exit'); + +var log = require('../log'); + +var booleanHelper = require('../boolean-helper'); + +var screenshotHelper = require('../screenshot-helper'); + +before(function () { + process.env['chimp.chai'] = true; + chimpHelper.loadAssertionLibrary(); + chimpHelper.init(); + chimpHelper.setupBrowserAndDDP(); +}); +after(function () { + if (process.env['chimp.browser'] !== 'phantomjs') { + log.debug('[chimp][mocha-helper] Ending browser session'); + global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); + log.debug('[chimp][mocha-helper] Ended browser sessions'); + } +}); +afterEach(function () { + if (screenshotHelper.shouldTakeScreenshot(this.currentTest.state)) { + if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { + var affix = this.currentTest.state !== 'passed' ? ' (failed)' : ''; + var fileName = this.currentTest.fullTitle() + affix; + screenshotHelper.saveScreenshotsToDisk(fileName); + } + } +}); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper-instance.js b/dist/lib/mocha/mocha-wrapper-instance.js new file mode 100644 index 0000000..103d454 --- /dev/null +++ b/dist/lib/mocha/mocha-wrapper-instance.js @@ -0,0 +1,5 @@ +"use strict"; + +var _mochaWrapper = require("./mocha-wrapper"); + +var mochaWrapper = new _mochaWrapper.MochaWrapper(); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper-spec.js b/dist/lib/mocha/mocha-wrapper-spec.js new file mode 100644 index 0000000..8678c1c --- /dev/null +++ b/dist/lib/mocha/mocha-wrapper-spec.js @@ -0,0 +1,124 @@ +"use strict"; + +var testDir = './tests/'; +var testDirFiles = ['fileA.js', 'fileB.js']; +var filesGlobValue = './lib/**/*.spec.js'; +var filesGlobFiles = ['./lib/fileA.spec.js', './lib/someDir/fileB.spec.js']; +var emptyTestsDirPath = ''; +describe('mocha-wrapper', function () { + beforeEach(function () { + td.replace('./mocha-fiberized-ui', {}); + td.replace('exit', td["function"]('exit')); + td.replace('../babel-register', td.object({})); + + var emptyFn = function emptyFn() {}; + + this.mocha = td.replace('mocha'); + this.path = td.replace('path', td.object({ + join: emptyFn, + resolve: emptyFn + })); + this.glob = td.replace('glob', td.object({ + sync: emptyFn + })); + process.env.mochaConfig = JSON.stringify({ + tags: '' + }); + process.argv = []; + }); + afterEach(function () { + td.reset(); + }); + describe('add files', function () { + it('adds files inside testDir', function () { + process.argv = []; + process.env['chimp.path'] = testDir; // mock --path tests dir files + + td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.join(testDir, '**')).thenReturn(testDir); + td.when(this.glob.sync(testDir)).thenReturn(testDirFiles); + td.when(this.mocha.run(td.matchers.anything())).thenReturn(null); + + var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; + + var mochaWrapper = new MochaWrapper(); + td.verify(this.mocha.addFile('fileA.js')); + td.verify(this.mocha.addFile('fileB.js')); + td.verify(this.mocha.addFile('mocha-helper.js')); + td.verify(this.mocha.addFile(), { + times: 3, + ignoreExtraArgs: true + }); // verify only called three times + }); + it('adds files specified by --files options when --path is empty dir', function () { + process.argv = []; + process.env['chimp.path'] = emptyTestsDirPath; + process.env['chimp.files'] = filesGlobValue; // mock empty --path tests dir files + + td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.join(emptyTestsDirPath, '**')).thenReturn(emptyTestsDirPath); + td.when(this.glob.sync(emptyTestsDirPath)).thenReturn([]); // mock --files flag files + + td.when(this.glob.sync(filesGlobValue)).thenReturn(filesGlobFiles); + + var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; + + var mochaWrapper = new MochaWrapper(); + td.verify(this.mocha.addFile('./lib/fileA.spec.js')); + td.verify(this.mocha.addFile('./lib/someDir/fileB.spec.js')); + td.verify(this.mocha.addFile('mocha-helper.js')); + td.verify(this.mocha.addFile(), { + times: 3, + ignoreExtraArgs: true + }); + }); + it('adds files specified by --files option and files in --path when both contain files', function () { + process.argv = []; + process.env['chimp.path'] = testDir; + process.env['chimp.files'] = filesGlobValue; // mock mocha-helper + + td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); // mock --files flag files + + td.when(this.glob.sync(filesGlobValue)).thenReturn(filesGlobFiles); // mock --path test dir files + + td.when(this.path.join(testDir, '**')).thenReturn(testDir); + td.when(this.glob.sync(testDir)).thenReturn(testDirFiles); + td.when(this.mocha.run(td.matchers.anything())).thenReturn(null); + + var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; + + var mochaWrapper = new MochaWrapper(); + td.verify(this.mocha.addFile('fileA.js')); + td.verify(this.mocha.addFile('fileB.js')); + td.verify(this.mocha.addFile('./lib/fileA.spec.js')); + td.verify(this.mocha.addFile('./lib/someDir/fileB.spec.js')); + td.verify(this.mocha.addFile('mocha-helper.js')); + td.verify(this.mocha.addFile(), { + times: 5, + ignoreExtraArgs: true + }); + }); + it('adds files specified on cli directly', function () { + process.argv = ['/usr/local/bin/node', 'chimp', '--mocha', 'test/fileA.js', 'test/fileB.js', 'test/fileC.js', 'fileD.js']; // mock mocha-helper + + td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); + td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); + + var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; + + var mochaWrapper = new MochaWrapper(); + td.verify(this.mocha.addFile('test/fileA.js')); + td.verify(this.mocha.addFile('test/fileB.js')); + td.verify(this.mocha.addFile('test/fileC.js')); + td.verify(this.mocha.addFile('fileD.js')); + td.verify(this.mocha.addFile('mocha-helper.js')); + td.verify(this.mocha.addFile(), { + times: 5, + ignoreExtraArgs: true + }); + }); + }); +}); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper.js b/dist/lib/mocha/mocha-wrapper.js new file mode 100644 index 0000000..e39bca8 --- /dev/null +++ b/dist/lib/mocha/mocha-wrapper.js @@ -0,0 +1,78 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MochaWrapper = void 0; + +var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); + +var _environmentVariableParsers = require("../environment-variable-parsers"); + +var _escapeRegExp = _interopRequireDefault(require("../utils/escape-reg-exp")); + +require('../babel-register'); + +var Mocha = require('mocha'), + fs = require('fs'), + path = require('path'), + exit = require('exit'), + glob = require('glob'), + ui = require('./mocha-fiberized-ui'), + _ = require('underscore'); + +var MochaWrapper = function MochaWrapper() { + (0, _classCallCheck2["default"])(this, MochaWrapper); + var mochaConfig = JSON.parse(process.env.mochaConfig); + var mochaCommandLineOptions = process.env['chimp.mochaCommandLineOptions'] ? JSON.parse(process.env['chimp.mochaCommandLineOptions']) : false; + + if (mochaCommandLineOptions && _.isObject(mochaCommandLineOptions)) { + _.extend(mochaConfig, mochaCommandLineOptions); + } + + mochaConfig.ui = 'fiberized-bdd-ui'; + + if (!mochaConfig.grep && (0, _environmentVariableParsers.parseBoolean)(process.env['chimp.watch'])) { + mochaConfig.grep = new RegExp((0, _environmentVariableParsers.parseString)(process.env['chimp.watchTags']).split(',').map(_escapeRegExp["default"]).join('|')); + } else if (!mochaConfig.grep) { + mochaConfig.grep = new RegExp((0, _environmentVariableParsers.parseString)(mochaConfig.tags).split(',').map(_escapeRegExp["default"]).join('|')); + } + + var mocha = new Mocha(mochaConfig); + mocha.addFile(path.join(path.resolve(__dirname, path.join('mocha-helper.js')))); + + if (process.argv.length > 3) { + process.argv.splice(3).forEach(function (spec) { + mocha.addFile(spec); + }); + } else { + // Add each .js file in the tests dir to the mocha instance + var testDir = process.env['chimp.path']; + glob.sync(path.join(testDir, '**')).filter(function (file) { + // Only keep the .js files + return file.substr(-3) === '.js'; + }).forEach(function (file) { + mocha.addFile(file); + }); + + if (process.env['chimp.files']) { + // Add each file specified by the "files" option to the mocha instance + glob.sync(process.env['chimp.files']).forEach(function (file) { + mocha.addFile(file); + }); + } + } + + try { + // Run the tests. + mocha.run(function (failures) { + exit(failures); + }); + } catch (e) { + throw e; + } +}; + +exports.MochaWrapper = MochaWrapper; \ No newline at end of file diff --git a/dist/lib/mocha/mocha.js b/dist/lib/mocha/mocha.js new file mode 100644 index 0000000..86961c1 --- /dev/null +++ b/dist/lib/mocha/mocha.js @@ -0,0 +1,156 @@ +"use strict"; + +var path = require('path'), + cp = require('child-process-debug'), + processHelper = require('./../process-helper.js'), + booleanHelper = require('../boolean-helper'), + log = require('./../log'), + _ = require('underscore'), + colors = require('colors'), + glob = require('glob'), + fs = require('fs-extra'); +/** + * Mocha Constructor + * + * @param {Object} options + * @api public + */ + + +function Mocha(options) { + this.options = options; + this.child = null; +} +/** + * Run Mocha specs + * + * @param {Function} callback + * @api public + */ + + +Mocha.prototype.start = function (callback) { + var self = this; + + if (glob.sync(self.options.path).length === 0) { + var infoMessage = "[chimp][mocha] Directory ".concat(self.options.path, " does not exist. Not running"); + + if (booleanHelper.isTruthy(self.options['fail-when-no-tests-run'])) { + callback(infoMessage); + } else { + log.info(infoMessage); + callback(); + } + + return; + } + + log.debug('[chimp][mocha] Running...'); + var opts = { + env: process.env, + silent: true + }; + var port; + + if (this.options.debugMocha) { + port = parseInt(this.options.debugMocha); + + if (port > 1) { + opts.execArgv = ['--debug=' + port]; + } else { + opts.execArgv = ['--debug']; + } + } + + if (this.options.debugBrkMocha) { + port = parseInt(this.options.debugBrkMocha); + + if (port > 1) { + opts.execArgv = ['--debug-brk=' + port]; + } else { + opts.execArgv = ['--debug-brk']; + } + } + + if (this.options.inspectMocha) { + port = parseInt(this.options.inspectMocha); + + if (port > 1) { + opts.execArgv = ['--inspect=' + port]; + } else { + opts.execArgv = ['--inspect']; + } + } + + if (this.options.inspectBrkMocha) { + port = parseInt(this.options.inspectBrkMocha); + + if (port > 1) { + opts.execArgv = ['--inspect-brk=' + port]; + } else { + opts.execArgv = ['--inspect-brk']; + } + } + + var _specs = []; + + if (this.options._ && this.options._.length > 2) { + _specs = this.options._.slice(2); + } + + opts.env = _.extend(process.env, { + mochaConfig: JSON.stringify(this.options.mochaConfig) + }); + self.child = cp.fork(path.join(__dirname, 'mocha-wrapper-instance.js'), _specs, opts); + self.child.stdout.pipe(process.stdout); + self.child.stderr.pipe(process.stderr); + process.stdin.pipe(self.child.stdin); + var noTestsFound = false; + self.child.stdout.on('data', function (data) { + var colorCodesRegExp = new RegExp("\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]", 'g'); + var dataFromStdout = data.toString().replace(colorCodesRegExp, '').trim(); + + if (/^0 passing/.test(dataFromStdout)) { + noTestsFound = true; + } + }); + var result = null; + self.child.on('message', function (res) { + log.debug('[chimp][mocha] Received message from Mocha child. Result:', res); + result = res; + }); + self.child.on('close', function (code) { + log.debug('[chimp][mocha] Closed with code', code); + var failWhenNoTestsRun = booleanHelper.isTruthy(self.options['fail-when-no-tests-run']); + + if (!self.child.stopping) { + log.debug('[chimp][mocha] Mocha not in a stopping state'); + callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Mocha failed' : null, result); + } + }); +}; + +Mocha.prototype.interrupt = function (callback) { + log.debug('[chimp][mocha] interrupting mocha'); + var self = this; + + if (!self.child) { + log.debug('[chimp][mocha] no child to interrupt'); + return callback(); + } + + self.child.stopping = true; + var options = { + child: self.child, + prefix: 'mocha' + }; + processHelper.kill(options, function (err, res) { + self.child = null; + + if (callback) { + callback(err, res); + } + }); +}; + +module.exports = Mocha; \ No newline at end of file diff --git a/dist/lib/options-loader.js b/dist/lib/options-loader.js new file mode 100644 index 0000000..15d2057 --- /dev/null +++ b/dist/lib/options-loader.js @@ -0,0 +1,57 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _deepExtend = _interopRequireDefault(require("deep-extend")); + +var path = require('path'); + +var fs = require('fs'); + +var log = require('./log'); + +module.exports = { + getOptions: function getOptions() { + var userOptionsFile; + + var processArgv = this._getProcessArgv(); + + if (processArgv[2] && processArgv[2].match(/.*chimp.*\.js$/)) { + userOptionsFile = path.resolve(process.cwd(), processArgv[2]); + processArgv.splice(2, 1); + + if (!fs.existsSync(userOptionsFile)) { + log.error(('[chimp] Could not find ' + processArgv[2]).red); + + this._exit(1); + } + } else { + userOptionsFile = path.resolve(process.cwd(), 'chimp.js'); + } + + var userOptions = {}; + + if (fs.existsSync(userOptionsFile)) { + userOptions = this._requireFile(userOptionsFile); + log.debug('[chimp] loaded', userOptionsFile); + } + + var defaultOptions = this._requireFile(this._getDefaultConfigFilePath()); + + var options = (0, _deepExtend["default"])(defaultOptions, userOptions); + log.debug('[chimp] Chimp options are', options); + return options; + }, + _requireFile: function _requireFile(file) { + return require(file); + }, + _getProcessArgv: function _getProcessArgv() { + return process.argv; + }, + _exit: function _exit(code) { + process.exit(code); + }, + _getDefaultConfigFilePath: function _getDefaultConfigFilePath() { + return path.resolve(__dirname, '..', 'bin', 'default.js'); + } +}; \ No newline at end of file diff --git a/dist/lib/phantom.js b/dist/lib/phantom.js new file mode 100644 index 0000000..a896b41 --- /dev/null +++ b/dist/lib/phantom.js @@ -0,0 +1,90 @@ +"use strict"; + +var phantomjs = require('phantomjs-prebuilt'), + processHelper = require('./process-helper.js'), + log = require('./log'); +/** + * Phantom Constructor + * + * @param {Object} options + * @api public + */ + + +function Phantom(options) { + if (!options) { + throw new Error('options is required'); + } + + if (!options.port) { + throw new Error('options.port is required'); + } + + this.options = options; + this.child = null; +} +/** + * Start Phantom + * + * @param {Function} callback + * @api public + */ + + +Phantom.prototype.start = function (callback) { + var self = this; + var port = self.options.port; + var ignoreSSLErrors = self.options.phantom_ignoreSSLErrors || 'false'; + + if (this.child) { + callback(); + return; + } + + this.child = processHelper.start({ + bin: process.env['chimp.phantom_path'] || phantomjs.path, + prefix: 'phantom', + args: ['--webdriver', port, '--ignore-ssl-errors', ignoreSSLErrors], + waitForMessage: /GhostDriver - Main - running on port/, + errorMessage: /Error/ + }, callback); +}; +/** + * Stop Phantom + * + * @param {Function} callback + * @api public + */ + + +Phantom.prototype.stop = function (callback) { + var self = this; + + if (self.child) { + log.debug('[chimp][phantom] stopping process'); + var options = { + child: self.child, + prefix: 'phantom' + }; + processHelper.kill(options, function (err, res) { + self.child = null; + callback(err, res); + }); + } else { + log.debug('[chimp][phantom] no process to kill'); + callback(null); + } +}; +/** + * Interrupt Phantom + * + * @param {Function} callback + * @api public + */ + + +Phantom.prototype.interrupt = function (callback) { + this.stop(callback); +}; + +module.exports = Phantom; \ No newline at end of file diff --git a/dist/lib/process-helper.js b/dist/lib/process-helper.js new file mode 100644 index 0000000..bdc20c6 --- /dev/null +++ b/dist/lib/process-helper.js @@ -0,0 +1,102 @@ +"use strict"; + +var cp = require('child_process'), + log = require('./log'); + +module.exports = { + start: function start(options, callback) { + var child = this.spawn(options); + + if (options.waitForMessage) { + this.waitForMessage(options, child, callback); + } else { + callback(); + } + + return child; + }, + spawn: function spawn(options) { + log.debug('[chimp][' + options.prefix + ']', 'starting process'); + var child = cp.spawn(options.bin, options.args); + this.logOutputs(options.prefix, child); + return child; + }, + logOutputs: function logOutputs(prefix, child) { + child.stdout.on('data', function (data) { + log.debug('[chimp][' + prefix + '.stdout]', data.toString()); + }); + child.stderr.on('data', function (data) { + log.debug('[chimp][' + prefix + '.stderr]', data.toString()); + }); + }, + waitForMessage: function waitForMessage(options, child, callback) { + child.stderr.on('data', onDataStdErr); + child.stdout.on('data', onDataStdOut); + + function onDataStdErr(data) { + onData(data, function () { + child.stderr.removeListener('data', onDataStdErr); + }); + } + + function onDataStdOut(data) { + onData(data, function () { + child.stdout.removeListener('data', onDataStdOut); + }); + } + + function onData(data, removeListener) { + if (data.toString().match(options.waitForMessage)) { + removeListener(); + log.debug('[chimp][' + options.prefix + ']', 'started successfully'); + return callback(); + } + + if (data.toString().match(options.errorMessage)) { + log.error('[chimp][' + options.prefix + ']', 'failed to start'); + log.error(data.toString()); + callback(data.toString()); + } + } + }, + kill: function kill(options, callback) { + log.debug('[chimp][' + options.prefix + ']', 'kill called on ' + options.prefix + ' process with pid', options.child.pid); + options.signal = options.signal || 'SIGTERM'; + + try { + log.debug('[chimp][' + options.prefix + ']', 'checking if process exists'); + process.kill(options.child.pid, 0); + log.debug('[chimp][' + options.prefix + ']', options.prefix + ' process exists, killing it with', options.signal); + process.kill(options.child.pid, options.signal); + } catch (e) { + log.debug('[chimp][' + options.prefix + ']', options.prefix + ' process does not exists, ignoring'); + options.child = null; + return callback(); + } + + var delay = 300, + totalRetries = 10, + retries = totalRetries * (1000 / delay), + attempt = 0; + var waitForProcessToDie = setInterval(function () { + try { + if (retries-- < 0) { + throw new Error('Process took too long to die'); + } + + log.debug('[chimp][' + options.prefix + ']', 'waiting for process to die (' + attempt++ + '/' + totalRetries + ')'); + process.kill(options.child.pid, 0); + } catch (e) { + clearInterval(waitForProcessToDie); + + if (e.code === 'ESRCH') { + log.debug('[chimp][' + options.prefix + ']', 'process is dead'); + options.child = null; + callback(); + } else { + callback(e); + } + } + }, delay); + } +}; \ No newline at end of file diff --git a/dist/lib/saucelabs-manager.js b/dist/lib/saucelabs-manager.js new file mode 100644 index 0000000..d69a248 --- /dev/null +++ b/dist/lib/saucelabs-manager.js @@ -0,0 +1,109 @@ +"use strict"; + +var request = require('request'), + log = require('./log'); +/** + * SessionManager Constructor + * + * @param {Object} options + * @api public + */ + + +function SauceLabsSessionManager(options) { + log.debug('[chimp][saucelabs-session-manager] options are', options); + var host = options.host.replace('ondemand.', ''); + var sauceLabsBaseUrl = 'https://' + options.user + ':' + options.key + '@' + host + '/rest/v1/' + options.user; + options.sauceLabsUrl = sauceLabsBaseUrl; + this.options = options; + this.maxRetries = 30; + this.retryDelay = 3000; + this.retry = 0; + log.debug('[chimp][saucelabs-session-manager] created a new SessionManager', options); +} + +SauceLabsSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); +/** + * Wraps the webdriver remote method and allows reuse options + * + * @api public + */ + +SauceLabsSessionManager.prototype.remote = function (webdriverOptions, callback) { + var self = this; + log.debug('[chimp][saucelabs-session-manager] creating webdriver remote '); + var browser = this.webdriver.remote(webdriverOptions); + callback(null, browser); + return; +}; +/** + * Gets a list of sessions from the SauceLabs API based on Build ID + * + * @api private + */ + + +SauceLabsSessionManager.prototype._getJobs = function (callback) { + var hub = this.options.sauceLabsUrl + '/jobs?full=:get_full_info&limit=10'; //default is 100 which seems like too much + + log.debug('[chimp][saucelabs-session-manager]', 'requesting sessions from', hub); + request(hub, function (error, response, body) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][saucelabs-session-manager]', 'received data', body); + callback(null, JSON.parse(body)); + } else { + log.error('[chimp][saucelabs-session-manager]', 'received error', error); + callback(error); + } + }); +}; +/** + * Kills the 1st session found running on SauceLabs + * + * @api public + */ + + +SauceLabsSessionManager.prototype.killCurrentSession = function (callback) { + this._getJobs(function (err, jobs) { + if (jobs && jobs.length) { + var job = jobs[0]; // This will stop the session, causing a 'User terminated' error. + // If we don't manually stop the session, we get a timed-out error. + + var options = { + url: this.options.sauceLabsUrl + '/jobs/' + job.id + '/stop', + method: 'PUT' + }; + request(options, function (error, response) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][saucelabs-session-manager]', 'stopped session'); + callback(); + } else { + log.error('[chimp][saucelabs-session-manager]', 'received error', error); + callback(error); + } + }); // This will set the session to passing or else it will show as Errored out + // even though we stop it. + + options = { + url: this.options.sauceLabsUrl + '/jobs/' + job.id, + method: 'PUT', + json: true, + body: { + passed: true + } + }; + request(options, function (error, response) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][saucelabs-session-manager]', 'updated session to passing state'); + callback(); + } else { + log.error('[chimp][saucelabs-session-manager]', 'received error', error); + callback(error); + } + }); + } + }.bind(this)); +}; + +module.exports = SauceLabsSessionManager; \ No newline at end of file diff --git a/dist/lib/screenshot-helper.js b/dist/lib/screenshot-helper.js new file mode 100644 index 0000000..f1b3ad4 --- /dev/null +++ b/dist/lib/screenshot-helper.js @@ -0,0 +1,19 @@ +"use strict"; + +var booleanHelper = require('./boolean-helper'); + +var screenshotHelper = { + shouldTakeScreenshot: function shouldTakeScreenshot(status) { + return booleanHelper.isTruthy(process.env['chimp.captureAllStepScreenshots']) || status !== 'passed' && booleanHelper.isTruthy(process.env['chimp.screenshotsOnError']); + }, + saveScreenshotsToDisk: function saveScreenshotsToDisk(fileName, projectDir) { + if (global.browser.instances) { + global.browser.instances.forEach(function (instance, index) { + instance.captureSync(fileName + '_browser_' + index, projectDir); + }); + } else { + global.browser.captureSync(fileName, projectDir); + } + } +}; +module.exports = screenshotHelper; \ No newline at end of file diff --git a/dist/lib/selenium.js b/dist/lib/selenium.js new file mode 100644 index 0000000..d528fc4 --- /dev/null +++ b/dist/lib/selenium.js @@ -0,0 +1,192 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); + +var _ = require('underscore'), + processHelper = require('./process-helper.js'), + selenium = require('selenium-standalone'), + booleanHelper = require('./boolean-helper'), + log = require('./log'); +/** + * Selenium Constructor + * + * @param {Object} options + * @api public + */ + + +function Selenium(options) { + if (!options) { + throw new Error('options is required'); + } + + if (booleanHelper.isFalsey(options.port)) { + throw new Error('options.port is required'); + } + + this.options = _.clone(options); + this.seleniumStandaloneOptions = options.seleniumStandaloneOptions; + + if (!this.options['clean-selenium-server']) { + // poor-man's singleton is enough for our needs + if ((0, _typeof2["default"])(Selenium.instance) === 'object') { + log.debug('[chimp][selenium]', 'Selenium object already exists, not creating a new one'); + return Selenium.instance; + } + + log.debug('[chimp][selenium]', 'Selenium object created'); + Selenium.instance = this; + } + + this.options.port = String(options.port); + this.child = null; +} +/** + * Installs Selenium and drivers. + * + * @param {Function} callback + * @api public + */ + + +Selenium.prototype.install = function (callback) { + var ProgressBar = require('progress'); + + var bar; + var firstProgress = true; + + if (this.options.offline) { + log.debug('[chimp][selenium]', 'Offline mode enabled, Chimp will not attempt to install Selenium & Drivers'); + callback(); + return; + } + + log.debug('[chimp][selenium]', 'Installing Selenium + drivers if needed'); + this.seleniumStandaloneOptions.progressCb = progressCb; + selenium.install(this.seleniumStandaloneOptions, function (e, r) { + if (e && e.message.match(/Error: getaddrinfo ENOTFOUND/)) { + log.debug('[chimp][selenium]', e.message); + log.info('[chimp][selenium] Detected a connection error in selenium-standalone. Are you offline?'); + log.info('[chimp][selenium] Consider using the --offline option to explicitly skip installing Selenium & drivers.'); + log.info('[chimp][selenium] Attempting to continue...'); + callback(null, r); + } else { + callback(e, r); + } + }); + + function progressCb(total, progress, chunk) { + if (firstProgress) { + firstProgress = false; + } + + bar = bar || new ProgressBar('selenium-standalone installation [:bar] :percent :etas', { + total: total, + complete: '=', + incomplete: ' ', + width: 20 + }); + bar.tick(chunk); + } +}; +/** + * Start Selenium process. + * + * It also installs Selenium if necessary. + * + * @param {Function} callback + * @api public + */ + + +Selenium.prototype.start = function (callback) { + var self = this; + var port = self.options.port; + log.debug('[chimp][selenium]', 'Start'); + + if (self.child) { + log.debug('[chimp][selenium]', 'Already running, doing nothing'); + callback(null); + return; + } + + self.install(function (error) { + if (error) { + log.error('[selenium]', error); + callback(error); + return; + } + + if (!self.seleniumStandaloneOptions.seleniumArgs) { + self.seleniumStandaloneOptions.seleniumArgs = []; + } + + self.seleniumStandaloneOptions.seleniumArgs.push('-port', port); + + if (process.env['chimp.log'] === 'verbose' || process.env['chimp.log'] === 'debug') { + self.options.seleniumDebug = true; + } + + if (self.options.seleniumDebug) { + self.seleniumStandaloneOptions.seleniumArgs.push('-debug'); + } + + log.debug('\n[chimp][selenium] hub can be seen at http://localhost:' + port + '/wd/hub'); + selenium.start(self.seleniumStandaloneOptions, function (error, seleniumChild) { + self.child = seleniumChild; + + if (error) { + callback(error); + return; + } + + if (self.options.seleniumDebug) { + processHelper.logOutputs('selenium', self.child); + } + + process.on('exit', function () { + log.debug('[chimp][selenium] process exit event detected. Stopping process'); + self.stop(function () { + log.debug('[chimp][selenium] process exit event stop complete'); + }); + }); + callback(null); + }); + }); +}; + +Selenium.prototype.stop = function (callback) { + var self = this; + + if (self.child) { + log.debug('[chimp][selenium] killing active session'); + var options = { + child: self.child, + prefix: 'selenium', + signal: 'SIGINT' + }; + log.debug('[chimp][selenium] stopping process'); + processHelper.kill(options, function (err, res) { + self.child = null; + callback(err, res); + }); + } else { + log.debug('[chimp][selenium] no process to kill'); + callback(null); + } +}; + +Selenium.prototype.interrupt = function (callback) { + log.debug('[chimp][selenium] interrupt called'); + + if (!this.options['watch'] || !!this.options['clean-selenium-server']) { + this.stop(callback); + } else { + log.debug('[chimp][selenium] interrupt is not killing selenium because ' + 'clean-selenium-server not set'); + callback(null); + } +}; + +module.exports = Selenium; \ No newline at end of file diff --git a/dist/lib/session-factory.js b/dist/lib/session-factory.js new file mode 100644 index 0000000..1bde110 --- /dev/null +++ b/dist/lib/session-factory.js @@ -0,0 +1,53 @@ +"use strict"; + +var request = require('request'), + log = require('./log'); + +var SessionManager = require('./session-manager.js'); + +var BsManager = require('./browserstack-manager.js'); + +var SlManager = require('./saucelabs-manager.js'); + +var TbManager = require('./testingbot-manager.js'); +/** + * Wraps creation of different Session Managers depending on host value. + * + * @param {Object} options + * @api public + */ + + +function SessionManagerFactory(options) { + log.debug('[chimp][session-manager-factory] options are', options); + + if (!options) { + throw new Error('options is required'); + } + + if (!options.port) { + throw new Error('options.port is required'); + } + + if (!options.browser && !options.deviceName) { + throw new Error('[chimp][session-manager-factory] options.browser or options.deviceName is required'); + } + + if (options.host && (options.host.indexOf('browserstack') > -1 || options.host.indexOf('saucelabs') > -1 || options.host.indexOf('testingbot') > -1)) { + if (!options.user || !options.key) { + throw new Error('[chimp][session-manager-factory] options.user and options.key are required'); + } + + if (options.host.indexOf('browserstack') > -1) { + return new BsManager(options); + } else if (options.host.indexOf('saucelabs') > -1) { + return new SlManager(options); + } else if (options.host.indexOf('testingbot') > -1) { + return new TbManager(options); + } + } else { + return new SessionManager(options); + } +} + +module.exports = SessionManagerFactory; \ No newline at end of file diff --git a/dist/lib/session-manager.js b/dist/lib/session-manager.js new file mode 100644 index 0000000..a19e709 --- /dev/null +++ b/dist/lib/session-manager.js @@ -0,0 +1,266 @@ +"use strict"; + +var requestretry = require('requestretry'), + request = require('request'), + log = require('./log'), + booleanHelper = require('./boolean-helper'), + parseBoolean = require('./environment-variable-parsers').parseBoolean; +/** + * SessionManager Constructor + * + * @param {Object} options + * @api public + */ + + +function SessionManager(options) { + if (!options) { + throw new Error('options is required'); + } + + if (!options.port) { + throw new Error('options.port is required'); + } + + if (!options.browser && !options.deviceName) { + throw new Error('[chimp][session-manager] options.browser or options.deviceName is required'); + } + + this.options = options; + this.maxRetries = 30; + this.retryDelay = 3000; + this.retry = 0; + log.debug('[chimp][session-manager] created a new SessionManager'); +} + +SessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); +/** + * Wraps the webdriver remote method and allows reuse options + * + * @api public + */ + +SessionManager.prototype._configureRemote = function (webdriverOptions, remote, callback) { + var self = this; + log.debug('[chimp][session-manager] creating webdriver remote '); + var browser = remote(webdriverOptions); + + function decideReuse() { + if (self.options.browser === 'phantomjs') { + log.debug('[chimp][session-manager] browser is phantomjs, not reusing a session'); + callback(null, browser); + return; + } + + if (booleanHelper.isTruthy(process.env['chimp.noSessionReuse'])) { + log.debug('[chimp][session-manager] noSessionReuse is true, not reusing a session'); + callback(null, browser); + return; + } + + if (booleanHelper.isFalsey(process.env['chimp.watch']) && booleanHelper.isFalsey(process.env['chimp.server'])) { + log.debug('[chimp][session-manager] watch mode is false, not reusing a session'); + callback(null, browser); + return; + } + + self._getWebdriverSessions(function (err, sessions) { + if (err) { + callback(err); + return; + } + + if (sessions.length !== 0) { + log.debug('[chimp][session-manager] Found an open selenium sessions, reusing session', sessions[0].id); + browser._original.requestHandler.sessionID = sessions[0].id; + } else { + log.debug('[chimp][session-manager] Did not find any open selenium sessions, not reusing a session'); + } + + browser = self._monkeyPatchBrowserSessionManagement(browser, sessions); + callback(null, browser); + }); + } + + this._waitForConnection(browser, decideReuse); +}; + +SessionManager.prototype.multiremote = function (webdriverOptions, callback) { + this._configureRemote(webdriverOptions, this.webdriver.multiremote, callback); +}; + +SessionManager.prototype.remote = function (webdriverOptions, callback) { + this._configureRemote(webdriverOptions, this.webdriver.remote, callback); +}; + +SessionManager.prototype._waitForConnection = function (browser, callback) { + log.debug('[chimp][session-manager] checking connection to selenium server'); + var self = this; + browser.statusAsync().then(function () { + log.debug('[chimp][session-manager] Connection to the to selenium server verified'); + callback(); + }, function (err) { + if (err && /ECONNREFUSED/.test(err.message)) { + if (++self.retry === self.maxRetries) { + callback('[chimp][session-manager] timed out retrying to connect to selenium server'); + } + + log.debug('[chimp][session-manager] could not connect to the server, retrying', '(' + self.retry + '/' + self.maxRetries + ')'); + setTimeout(function () { + self._waitForConnection(browser, callback); + }, self.retryDelay); + } else { + log.debug('[chimp][session-manager] Connection to the to selenium server verified'); + callback(); + } + }); +}; + +SessionManager.prototype._monkeyPatchBrowserSessionManagement = function (browser, sessions) { + log.debug('[chimp][session-manager]', 'monkey patching the browser object'); + + var callbacker = function callbacker() { + var cb = arguments[arguments.length - 1]; + + if (cb && typeof cb === 'function') { + cb(); + } + + return { + then: function then(c) { + c(); + } + }; + }; + + var initWrapperFactory = function initWrapperFactory(init) { + return function () { + if (sessions.length !== 0) { + log.debug('[chimp][session-manager]', 'browser already initialized'); + return callbacker.apply(this, arguments); + } else { + log.debug('[chimp][session-manager]', 'initializing browser'); + return init.apply(this, arguments); + } + }; + }; + + var updateBrowserObject = function updateBrowserObject(browserObject) { + browserObject._initAsync = browserObject.initAsync; + browserObject.initAsync = initWrapperFactory(browserObject.initAsync); + browserObject._initSync = browserObject.initSync; + browserObject.initSync = initWrapperFactory(browserObject.initSync); + browserObject._init = browserObject.init; + + if (browserObject._init === browserObject._initSync) { + browserObject.init = browserObject.initSync; + } else if (browserObject._init === browserObject._initAsync) { + browserObject.init = browserObject.initAsync; + } else { + throw new Error('browserObject.init has already been overwritten by something else.'); + } + + browserObject.end = callbacker.bind(browserObject); + browserObject.endSync = browserObject.end; + browserObject.endAsync = browserObject.end; + browserObject.endAll = callbacker.bind(browserObject); + browserObject.endAllSync = browserObject.endAll; + browserObject.endAllAsync = browserObject.endAll; + return browserObject; + }; + + if (browser.instances) { + browser.instances.forEach(function (singleBrowser) { + singleBrowser = updateBrowserObject(singleBrowser); + }); + } else { + browser = updateBrowserObject(browser); + } + + return browser; +}; +/** + * Gets a list of sessions from the localhost selenium server + * + * @api private + */ + + +SessionManager.prototype._getWebdriverSessions = function (callback) { + var wdHubSessions = 'http://' + this.options.host + ':' + this.options.port + '/wd/hub/sessions'; + log.debug('[chimp][session-manager]', 'requesting sessions from', wdHubSessions); + requestretry({ + url: wdHubSessions, + maxAttempts: 10, + retryDelay: 500, + retryStrategy: requestretry.RetryStrategies.HTTPOrNetworkError + }, function (error, response, body) { + if (!error) { + if (response.statusCode === 200) { + log.debug('[chimp][session-manager]', 'received data', body); + callback(null, JSON.parse(body).value); + } else { + log.error('[chimp][session-manager]', 'received error', "".concat(response.statusMessage, " [").concat(response.statusCode, "]")); + + if (response.body) { + log.debug('[chimp][session-manager]', 'response', response.body); + } + + callback(error); + } + } else { + log.error('[chimp][session-manager]', 'received error', error, 'response', response); + callback(error); + } + }); +}; +/** + * Kills the 1st session found running on selenium server + * + * @api public + */ + + +SessionManager.prototype.killCurrentSession = function (callback) { + if (this.options.browser === 'phantomjs') { + log.debug('[chimp][session-manager] browser is phantomjs, not killing session'); + callback(); + return; + } + + if (booleanHelper.isTruthy(process.env['chimp.noSessionReuse'])) { + log.debug('[chimp][session-manager] noSessionReuse is true, , not killing session'); + callback(); + return; + } + + if ((parseBoolean(process.env['chimp.watch']) || parseBoolean(process.env['chimp.server'])) && !parseBoolean(process.env['forceSessionKill'])) { + log.debug('[chimp][session-manager] watch / server mode are true, not killing session'); + callback(); + return; + } + + var wdHubSession = 'http://' + this.options.host + ':' + this.options.port + '/wd/hub/session'; + + this._getWebdriverSessions(function (err, sessions) { + if (sessions && sessions.length) { + sessions.forEach(function (session) { + var sessionId = session.id; + log.debug('[chimp][session-manager]', 'deleting wd session', sessionId); + request.del(wdHubSession + '/' + sessionId, function (error, response, body) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][session-manager]', 'received data', body); + callback(); + } else { + log.error('[chimp][session-manager]', 'received error', error); + callback(error); + } + }); + }); + } else { + callback(null); + } + }); +}; + +module.exports = SessionManager; \ No newline at end of file diff --git a/dist/lib/simian-reporter.js b/dist/lib/simian-reporter.js new file mode 100644 index 0000000..6dda8c6 --- /dev/null +++ b/dist/lib/simian-reporter.js @@ -0,0 +1,65 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +var _request = _interopRequireDefault(require("request")); + +var _log = _interopRequireDefault(require("./log")); + +/** + * SimianReporter Constructor + * + * @param {Object} options + * @api public + */ +function SimianReporter(options) { + this.options = options; // FIXME: We need a way to isolate instance in jest tests, until then this allows asserions + + SimianReporter.instance = this; +} + +SimianReporter.prototype.report = function report(jsonCucumberResult, callback) { + var query = { + accessToken: this.options.simianAccessToken + }; + + if (this.options.simianRepositoryId) { + query.repositoryId = this.options.simianRepositoryId; + } + + var url = require('url').format({ + protocol: 'http', + host: this.options.simianResultEndPoint, + query: query + }); + + var data = { + type: 'cucumber', + branch: this.options.simianResultBranch, + result: jsonCucumberResult + }; + + if (this.options.simianBuildNumber) { + data.buildNumber = parseInt(this.options.simianBuildNumber, 10); + } + + _request["default"].post({ + url: url, + json: true, + body: data + }, function (error, response, body) { + if (!error && response.statusCode === 200) { + _log["default"].debug('[chimp][simian-reporter]', 'received data', body); + } else { + if (body) { + _log["default"].error('[chimp][simian-reporter] Error from Simian:', body.error); + } else { + _log["default"].error('[chimp][simian-reporter]', 'Error while sending result to Simian:', error); + } + } + + callback(error); + }); +}; + +module.exports = SimianReporter; \ No newline at end of file diff --git a/dist/lib/testingbot-manager.js b/dist/lib/testingbot-manager.js new file mode 100644 index 0000000..6d4d9ef --- /dev/null +++ b/dist/lib/testingbot-manager.js @@ -0,0 +1,108 @@ +"use strict"; + +var request = require('request'), + log = require('./log'); +/** + * SessionManager Constructor + * + * @param {Object} options + * @api public + */ + + +function TestingBotSessionManager(options) { + log.debug('[chimp][testingbot-session-manager] options are', options); + var testingbotBaseUrl = 'https://' + options.user + ':' + options.key + '@api.testingbot.com/v1/'; + options.testingbotBaseUrl = testingbotBaseUrl; + this.options = options; + this.maxRetries = 30; + this.retryDelay = 3000; + this.retry = 0; + log.debug('[chimp][testingbot-session-manager] created a new SessionManager', options); +} + +TestingBotSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); +/** + * Wraps the webdriver remote method and allows reuse options + * + * @api public + */ + +TestingBotSessionManager.prototype.remote = function (webdriverOptions, callback) { + var self = this; + log.debug('[chimp][testingbot-session-manager] creating webdriver remote '); + var browser = this.webdriver.remote(webdriverOptions); + callback(null, browser); + return; +}; +/** + * Gets a list of sessions from the TestingBot API based on Build ID + * + * @api private + */ + + +TestingBotSessionManager.prototype._getJobs = function (callback) { + var hub = this.options.testingbotBaseUrl + '/tests?count=10'; //default is 100 which seems like too much + + log.debug('[chimp][testingbot-session-manager]', 'requesting sessions from', hub); + request(hub, function (error, response, body) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][testingbot-session-manager]', 'received data', body); + callback(null, JSON.parse(body)); + } else { + log.error('[chimp][testingbot-session-manager]', 'received error', error); + callback(error); + } + }); +}; +/** + * Kills the 1st session found running on TestingBot + * + * @api public + */ + + +TestingBotSessionManager.prototype.killCurrentSession = function (callback) { + this._getJobs(function (err, jobs) { + if (jobs && jobs.length) { + var job = jobs[0]; // This will stop the session, causing a 'User terminated' error. + // If we don't manually stop the session, we get a timed-out error. + + var options = { + url: this.options.testingbotBaseUrl + '/tests/' + job.id + '/stop', + method: 'PUT' + }; + request(options, function (error, response) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][testingbot-session-manager]', 'stopped session'); + callback(); + } else { + log.error('[chimp][testingbot-session-manager]', 'received error', error); + callback(error); + } + }); // This will set the session to passing or else it will show as Errored out + // even though we stop it. + + options = { + url: this.options.testingbotBaseUrl + '/tests/' + job.id, + method: 'PUT', + json: true, + body: { + 'test[passed]': true + } + }; + request(options, function (error, response) { + if (!error && response.statusCode === 200) { + log.debug('[chimp][testingbot-session-manager]', 'updated session to passing state'); + callback(); + } else { + log.error('[chimp][testingbot-session-manager]', 'received error', error); + callback(error); + } + }); + } + }.bind(this)); +}; + +module.exports = TestingBotSessionManager; \ No newline at end of file diff --git a/dist/lib/utils/escape-reg-exp.js b/dist/lib/utils/escape-reg-exp.js new file mode 100644 index 0000000..db9027c --- /dev/null +++ b/dist/lib/utils/escape-reg-exp.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = escapeRegExp; + +function escapeRegExp(string) { + return string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); +} \ No newline at end of file diff --git a/dist/lib/utils/fiberize.js b/dist/lib/utils/fiberize.js new file mode 100644 index 0000000..8b80bf5 --- /dev/null +++ b/dist/lib/utils/fiberize.js @@ -0,0 +1,45 @@ +"use strict"; + +var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.fiberize = fiberize; +exports.fiberizeSync = fiberizeSync; + +var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); + +var _fibers = _interopRequireDefault(require("fibers")); + +// Wrap a function in a fiber. +// Correctly handles expected presence of done callback +function fiberize(fn) { + return function (done) { + var self = this; + (0, _fibers["default"])(function () { + if (fn.length === 1) { + fn.call(self, done); + } else { + var res = fn.call(self); + + if ((0, _typeof2["default"])(res) === 'object' && res !== null && typeof res.then === 'function') { + res.then(function () { + return done(); + })["catch"](done); + } else { + done(); + } + } + }).run(); + }; +} + +function fiberizeSync(fn) { + return function () { + var self = this; + (0, _fibers["default"])(function () { + fn.call(self); + }).run(); + }; +} \ No newline at end of file diff --git a/dist/lib/versions.js b/dist/lib/versions.js new file mode 100644 index 0000000..4ac405b --- /dev/null +++ b/dist/lib/versions.js @@ -0,0 +1,229 @@ +"use strict"; + +var _ = require('underscore'), + fs = require('fs'), + os = require('os'), + log = require('./log'), + async = require('async'), + request = require('request'), + spawnSync = require('child_process').spawnSync, + selenium = require('selenium-standalone'), + chromedriver = require('chromedriver'), + booleanHelper = require('./boolean-helper'), + processHelper = require('./process-helper.js'); + +function Versions(options) { + var _this = this; + + this.options = options; + this.appDir = '../..'; + this.chromeDriverExec = chromedriver.path; + + this.show = function (callback) { + console.log('Chimp version: ', _this.getChimpVersion()); + console.log('ChromeDriver version: ', _this.getChromeDriverVersion()); + console.log('Java version: ', _this.getJavaVersion()); + console.log('Selenium version: ', _this.getSeleniumVersion()); + console.log('Selenium drivers version: ', _this.getSeleniumDriversVersion()); + console.log('OS version: ', _this.getOsVersion()); + console.log('Node version: ', _this.getNodeVersion()); + + _this.getCurrentBrowserVersion(function (browserVersion) { + var currentBrowser = _this.options.browser || 'chrome'; + console.log('Browser version: ', currentBrowser, browserVersion); + + if (callback) { + callback(); + } + }); + }; + + this.getChimpVersion = function () { + var packageJson = require("".concat(_this.appDir, "/package.json")); + + return packageJson.version; + }; + + this.getChromeDriverVersion = function () { + if (booleanHelper.isFalsey(_this.options.host)) { + if (booleanHelper.isTruthy(_this.options.browser)) { + return 'Unknown. Chromedriver not used directly.'; + } else { + return _this._spawnSync("".concat(_this.chromeDriverExec, " -v")); + } + } else { + return 'Unknown. Selenium host provided.'; + } + }; + + this.getJavaVersion = function () { + return _this._spawnSync('java -version'); + }; + + this.getSeleniumVersion = function () { + if (_this.options.seleniumStandaloneOptions) { + return _this.options.seleniumStandaloneOptions.version; + } + + return "Unknown."; + }; + + this.getSeleniumDriversVersion = function () { + if (_this.options.seleniumStandaloneOptions) { + var driversVersion = []; + var drivers = _this.options.seleniumStandaloneOptions.drivers; + + _.each(_.keys(drivers), function (driverName) { + driversVersion.push("".concat(driverName, ": ").concat(drivers[driverName].version)); + }); + + return driversVersion.toString().replace(/,/g, ', '); + } + + return "Unknown."; + }; + + this.getOsVersion = function () { + return "".concat(os.type(), " ").concat(os.release()); + }; + + this.getNodeVersion = function () { + return process.version; + }; + + this.getCurrentBrowserVersion = function (callback) { + if (booleanHelper.isTruthy(_this.options.browser)) { + var seleniumOptions = _.clone(_this.options.seleniumStandaloneOptions); + + seleniumOptions.port = 1; + async.series([function (cb) { + selenium.install(seleniumOptions, function (err, seleniumInstallPaths) { + cb(err, seleniumInstallPaths); + }); + }], function (err, seleniumInstallPaths) { + var selectedBrowserDriver = seleniumInstallPaths[0][_this.options.browser]; + + if (selectedBrowserDriver) { + var startBrowserOptions = { + path: selectedBrowserDriver.installPath, + port: _this.options.port + }; + + _this._startBrowserDriver(startBrowserOptions, function () { + _this._getBrowserVersion(startBrowserOptions, function (err, browserVersion) { + _this._stopBrowserDriver(function (err) { + if (err) { + log.warn(err); + } + + callback(browserVersion); + }); + }); + }); + } else { + callback("Driver for selected browser(".concat(_this.options.browser, ") not found.")); + } + }); + } else { + if (fs.existsSync(_this.chromeDriverExec)) { + var startBrowserOptions = { + path: _this.chromeDriverExec, + port: _this.options.port + }; + + _this._startBrowserDriver(startBrowserOptions, function () { + _this._getBrowserVersion(startBrowserOptions, function (err, browserVersion) { + _this._stopBrowserDriver(function (err) { + if (err) { + log.warn(err); + } + + callback(browserVersion); + }); + }); + }); + } else { + callback("Driver for selected browser not found."); + } + } + }; // ------------------------------------------------------------------------------------- + + + this._startBrowserDriver = function (options, callback) { + var waitMessage = new RegExp("".concat(options.port)); + _this.child = processHelper.start({ + bin: options.path, + prefix: 'browserdriver', + args: ['--port=' + options.port], + waitForMessage: waitMessage, + errorMessage: /Error/ + }, callback); + }; + + this._getBrowserVersion = function (options, callback) { + var url = "http://localhost:".concat(options.port, "/session"); + var data = { + "desiredCapabilities": {} + }; + request.post({ + url: url, + json: true, + body: data + }, function (error, response, body) { + var data = {}; + + if (!error && response.statusCode === 200) { + data.sessionId = body.sessionId; + data.browserVersion = body.value.version; + request["delete"]("".concat(url, "/").concat(data.sessionId), function () { + callback(null, data.browserVersion); + }); + } else { + error = 'Error connecting to browser driver.'; + callback(error); + } + }); + }; + + this._stopBrowserDriver = function (callback) { + if (_this.child) { + var _options = { + child: _this.child, + prefix: 'browserdriver' + }; + processHelper.kill(_options, function (err, res) { + _this.child = null; + callback(err, res); + }); + } else { + callback(null); + } + }; + + this._spawnSync = function (commandToRun) { + var endLine = new RegExp("".concat(os.EOL), 'g'); + var commandOptions = commandToRun.split(' '); + var command = commandOptions.shift(); + var commandResult = spawnSync(command, commandOptions); + + if (commandResult.status !== 0 && commandResult.error) { + if (commandResult.error.code === 'ENOENT') { + return 'No such file or directory'; + } else { + return "Error ".concat(commandResult.error.code); + } + } else { + var commandToReturn = ''; + + _.each(commandResult.output, function (output) { + if (output && output.length) { + commandToReturn += output.toString().trim(); + } + }); + + return commandToReturn.replace(endLine, ', '); + } + }; +} + +module.exports = Versions; \ No newline at end of file From 254db9c3c8925cb2e521525db0e1350e9bccbdc0 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 09:15:14 -0400 Subject: [PATCH 07/29] Revert "Committing the dist directory so I can sync this repo using npm/github in the short term." This reverts commit 69954d34 --- .gitignore | 1 + dist/__mocks__/bluebird.js | 5 - dist/__mocks__/chokidar.js | 11 - dist/__mocks__/colors.js | 5 - dist/__mocks__/ddp.js | 3 - dist/__mocks__/freeport.js | 3 - dist/__mocks__/hapi.js | 13 - dist/__mocks__/request.js | 5 - dist/__mocks__/selenium-standalone.js | 6 - dist/__mocks__/webdriverio.js | 5 - dist/__mocks__/xolvio-sync-webdriverio.js | 5 - dist/__tests__/browserstack-manager-spec.js | 19 - dist/__tests__/chimp-spec.js | 735 -------------------- dist/__tests__/ddp-spec.js | 107 --- dist/__tests__/options-loader.js | 51 -- dist/__tests__/phantom-spec.js | 170 ----- dist/__tests__/process-helper-spec.js | 196 ------ dist/__tests__/saucelabs-manager-spec.js | 19 - dist/__tests__/selenium-spec.js | 339 --------- dist/__tests__/session-factory-spec.js | 64 -- dist/__tests__/session-manager-spec.js | 238 ------- dist/__tests__/simian-reporter-spec.js | 88 --- dist/__tests__/testingbot-manager-spec.js | 19 - dist/__tests__/world-spec.js | 1 - dist/bin/chimp.js | 72 -- dist/bin/default.js | 145 ---- dist/lib/babel-register.js | 7 - dist/lib/boolean-helper.js | 14 - dist/lib/browserstack-manager.js | 173 ----- dist/lib/chimp-helper.js | 282 -------- dist/lib/chimp-spec.js | 76 -- dist/lib/chimp.js | 706 ------------------- dist/lib/chromedriver.js | 103 --- dist/lib/ci.js | 12 - dist/lib/consoler.js | 48 -- dist/lib/cucumberjs/cucumber-wrapper.js | 109 --- dist/lib/cucumberjs/cucumber.js | 318 --------- dist/lib/cucumberjs/hooks.js | 124 ---- dist/lib/cucumberjs/world.js | 31 - dist/lib/ddp-watcher.js | 163 ----- dist/lib/ddp.js | 58 -- dist/lib/environment-variable-parsers.js | 52 -- dist/lib/jasmine/jasmine-fiberized-api.js | 39 -- dist/lib/jasmine/jasmine-helpers.js | 24 - dist/lib/jasmine/jasmine-wrapper.js | 96 --- dist/lib/jasmine/jasmine.js | 127 ---- dist/lib/log.js | 21 - dist/lib/mocha/mocha-fiberized-ui.js | 33 - dist/lib/mocha/mocha-helper.js | 34 - dist/lib/mocha/mocha-wrapper-instance.js | 5 - dist/lib/mocha/mocha-wrapper-spec.js | 124 ---- dist/lib/mocha/mocha-wrapper.js | 78 --- dist/lib/mocha/mocha.js | 156 ----- dist/lib/options-loader.js | 57 -- dist/lib/phantom.js | 90 --- dist/lib/process-helper.js | 102 --- dist/lib/saucelabs-manager.js | 109 --- dist/lib/screenshot-helper.js | 19 - dist/lib/selenium.js | 192 ----- dist/lib/session-factory.js | 53 -- dist/lib/session-manager.js | 266 ------- dist/lib/simian-reporter.js | 65 -- dist/lib/testingbot-manager.js | 108 --- dist/lib/utils/escape-reg-exp.js | 10 - dist/lib/utils/fiberize.js | 45 -- dist/lib/versions.js | 229 ------ 66 files changed, 1 insertion(+), 6682 deletions(-) delete mode 100644 dist/__mocks__/bluebird.js delete mode 100644 dist/__mocks__/chokidar.js delete mode 100644 dist/__mocks__/colors.js delete mode 100644 dist/__mocks__/ddp.js delete mode 100644 dist/__mocks__/freeport.js delete mode 100644 dist/__mocks__/hapi.js delete mode 100644 dist/__mocks__/request.js delete mode 100644 dist/__mocks__/selenium-standalone.js delete mode 100644 dist/__mocks__/webdriverio.js delete mode 100644 dist/__mocks__/xolvio-sync-webdriverio.js delete mode 100644 dist/__tests__/browserstack-manager-spec.js delete mode 100644 dist/__tests__/chimp-spec.js delete mode 100644 dist/__tests__/ddp-spec.js delete mode 100644 dist/__tests__/options-loader.js delete mode 100644 dist/__tests__/phantom-spec.js delete mode 100644 dist/__tests__/process-helper-spec.js delete mode 100644 dist/__tests__/saucelabs-manager-spec.js delete mode 100644 dist/__tests__/selenium-spec.js delete mode 100644 dist/__tests__/session-factory-spec.js delete mode 100644 dist/__tests__/session-manager-spec.js delete mode 100644 dist/__tests__/simian-reporter-spec.js delete mode 100644 dist/__tests__/testingbot-manager-spec.js delete mode 100644 dist/__tests__/world-spec.js delete mode 100644 dist/bin/chimp.js delete mode 100644 dist/bin/default.js delete mode 100644 dist/lib/babel-register.js delete mode 100644 dist/lib/boolean-helper.js delete mode 100644 dist/lib/browserstack-manager.js delete mode 100644 dist/lib/chimp-helper.js delete mode 100644 dist/lib/chimp-spec.js delete mode 100644 dist/lib/chimp.js delete mode 100644 dist/lib/chromedriver.js delete mode 100644 dist/lib/ci.js delete mode 100644 dist/lib/consoler.js delete mode 100644 dist/lib/cucumberjs/cucumber-wrapper.js delete mode 100644 dist/lib/cucumberjs/cucumber.js delete mode 100644 dist/lib/cucumberjs/hooks.js delete mode 100644 dist/lib/cucumberjs/world.js delete mode 100644 dist/lib/ddp-watcher.js delete mode 100644 dist/lib/ddp.js delete mode 100644 dist/lib/environment-variable-parsers.js delete mode 100644 dist/lib/jasmine/jasmine-fiberized-api.js delete mode 100644 dist/lib/jasmine/jasmine-helpers.js delete mode 100644 dist/lib/jasmine/jasmine-wrapper.js delete mode 100644 dist/lib/jasmine/jasmine.js delete mode 100644 dist/lib/log.js delete mode 100644 dist/lib/mocha/mocha-fiberized-ui.js delete mode 100644 dist/lib/mocha/mocha-helper.js delete mode 100644 dist/lib/mocha/mocha-wrapper-instance.js delete mode 100644 dist/lib/mocha/mocha-wrapper-spec.js delete mode 100644 dist/lib/mocha/mocha-wrapper.js delete mode 100644 dist/lib/mocha/mocha.js delete mode 100644 dist/lib/options-loader.js delete mode 100644 dist/lib/phantom.js delete mode 100644 dist/lib/process-helper.js delete mode 100644 dist/lib/saucelabs-manager.js delete mode 100644 dist/lib/screenshot-helper.js delete mode 100644 dist/lib/selenium.js delete mode 100644 dist/lib/session-factory.js delete mode 100644 dist/lib/session-manager.js delete mode 100644 dist/lib/simian-reporter.js delete mode 100644 dist/lib/testingbot-manager.js delete mode 100644 dist/lib/utils/escape-reg-exp.js delete mode 100644 dist/lib/utils/fiberize.js delete mode 100644 dist/lib/versions.js diff --git a/.gitignore b/.gitignore index 0a87580..029b6fb 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ npm-debug.log node_modules tmp +dist output.json diff --git a/dist/__mocks__/bluebird.js b/dist/__mocks__/bluebird.js deleted file mode 100644 index cc9c257..0000000 --- a/dist/__mocks__/bluebird.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -jest.autoMockOff(); -module.exports = require.requireActual('bluebird'); -jest.autoMockOn(); \ No newline at end of file diff --git a/dist/__mocks__/chokidar.js b/dist/__mocks__/chokidar.js deleted file mode 100644 index 88a4b98..0000000 --- a/dist/__mocks__/chokidar.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -var chokidar = { - watcher: { - on: jest.genMockFunction(), - once: jest.genMockFunction() - }, - watch: jest.genMockFunction() -}; -chokidar.watch.mockReturnValue(chokidar.watcher); -module.exports = chokidar; \ No newline at end of file diff --git a/dist/__mocks__/colors.js b/dist/__mocks__/colors.js deleted file mode 100644 index 79d5a79..0000000 --- a/dist/__mocks__/colors.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = { - supportsColor: {} -}; \ No newline at end of file diff --git a/dist/__mocks__/ddp.js b/dist/__mocks__/ddp.js deleted file mode 100644 index 7954f22..0000000 --- a/dist/__mocks__/ddp.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = jest.genMockFn(); \ No newline at end of file diff --git a/dist/__mocks__/freeport.js b/dist/__mocks__/freeport.js deleted file mode 100644 index 7954f22..0000000 --- a/dist/__mocks__/freeport.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = jest.genMockFn(); \ No newline at end of file diff --git a/dist/__mocks__/hapi.js b/dist/__mocks__/hapi.js deleted file mode 100644 index 04f62ec..0000000 --- a/dist/__mocks__/hapi.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -var Hapi = { - instance: { - connection: jest.genMockFn(), - route: jest.genMockFn(), - start: jest.genMockFn() - }, - Server: function Server() { - return Hapi.instance; - } -}; -module.exports = Hapi; \ No newline at end of file diff --git a/dist/__mocks__/request.js b/dist/__mocks__/request.js deleted file mode 100644 index d5bfd5b..0000000 --- a/dist/__mocks__/request.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = { - post: jest.genMockFunction() -}; \ No newline at end of file diff --git a/dist/__mocks__/selenium-standalone.js b/dist/__mocks__/selenium-standalone.js deleted file mode 100644 index 6837e0d..0000000 --- a/dist/__mocks__/selenium-standalone.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -module.exports = { - install: jest.genMockFunction(), - start: jest.genMockFunction() -}; \ No newline at end of file diff --git a/dist/__mocks__/webdriverio.js b/dist/__mocks__/webdriverio.js deleted file mode 100644 index 482bde4..0000000 --- a/dist/__mocks__/webdriverio.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = { - remote: jest.genMockFunction() -}; \ No newline at end of file diff --git a/dist/__mocks__/xolvio-sync-webdriverio.js b/dist/__mocks__/xolvio-sync-webdriverio.js deleted file mode 100644 index b69c6fd..0000000 --- a/dist/__mocks__/xolvio-sync-webdriverio.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -module.exports = { - wrapAsyncObject: jest.genMockFunction() -}; \ No newline at end of file diff --git a/dist/__tests__/browserstack-manager-spec.js b/dist/__tests__/browserstack-manager-spec.js deleted file mode 100644 index b3971cd..0000000 --- a/dist/__tests__/browserstack-manager-spec.js +++ /dev/null @@ -1,19 +0,0 @@ -jest.dontMock('../lib/browserstack-manager'); -describe('BrowserStack Session Manager', function () { - describe('Constructor', function () { - it('sets the browserStackUrl', function () { - var BrowserStackManager = require('../lib/browserstack-manager'); - - var options = { - port: 1234, - browser: 'something', - user: 'testus3r', - key: '12345678', - host: 'browserstack.com' - }; - var browserStackBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host; - var session = new BrowserStackManager(options); - expect(session.options.browserStackUrl).toBe(browserStackBaseUrl); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/chimp-spec.js b/dist/__tests__/chimp-spec.js deleted file mode 100644 index ccbdaef..0000000 --- a/dist/__tests__/chimp-spec.js +++ /dev/null @@ -1,735 +0,0 @@ -jest.dontMock('../lib/chimp.js'); -jest.dontMock('../lib/boolean-helper'); -jest.dontMock('underscore'); -jest.dontMock('async'); -jest.dontMock('wrappy'); -describe('Chimp', function () { - var Chimp = require('../lib/chimp'); - - describe('constructor', function () {// moved to src/lib/chimp-specs.js - }); - describe('bin path', function () { - it('sets the bin path to the location of chimp', function () { - expect(Chimp.bin.match(/bin\/chimp$/)).not.toBe(null); - }); - }); - describe('init', function () { - it('calls selectMode right away if it does not find package.json', function () { - var chimp = new Chimp(); - var restore = chimp.fs.existsSync; - chimp.fs.existsSync = jest.genMockFn().mockReturnValue(false); - chimp.informUser = jest.genMockFunction(); - chimp.exec = jest.genMockFunction(); - chimp.selectMode = jest.genMockFunction(); - - var callback = function () {}; - - chimp.init(callback); - expect(chimp.selectMode).toBeCalledWith(callback); - expect(chimp.exec).not.toBeCalled(); - chimp.fs.existsSync = restore; - }); - it('does not executes npm install if the offline option is set', function () { - var chimp = new Chimp({ - offline: true - }); - var restore = chimp.fs.existsSync; - chimp.fs.existsSync = jest.genMockFn().mockReturnValue(true); - chimp.informUser = jest.genMockFunction(); - chimp.exec = jest.genMockFunction(); - chimp.selectMode = jest.genMockFunction(); - var callback = jest.genMockFunction(); - chimp.init(callback); - expect(chimp.exec.mock.calls.length).toBe(0); - expect(chimp.selectMode.mock.calls.length).toBe(1); - expect(callback.mock.calls.length).toBe(0); - chimp.fs.existsSync = restore; - }); - it('executes npm install then calls selectMode when there are no errors', function () { - var chimp = new Chimp(); - var restore = chimp.fs.existsSync; - chimp.fs.existsSync = jest.genMockFn().mockReturnValue(true); - chimp.informUser = jest.genMockFunction(); - chimp.exec = jest.genMockFunction().mockImplementation(function (cmd, callback) { - return callback(null); - }); - chimp.selectMode = jest.genMockFunction(); - - var callback = function () {}; - - chimp.init(callback); - expect(chimp.selectMode).toBeCalledWith(callback); - chimp.fs.existsSync = restore; - }); - }); - describe('selectMode', function () { - it('runs in single mode when no mode option is passed', function () { - var chimp = new Chimp(); - chimp.run = jest.genMockFunction(); - chimp.start = jest.genMockFunction(); - chimp.watch = jest.genMockFunction(); - chimp.server = jest.genMockFunction(); - - var callback = function () {}; - - chimp.selectMode(callback); - expect(chimp.run).toBeCalledWith(callback); - expect(chimp.run.mock.calls.length).toBe(1); - expect(chimp.start.mock.calls.length).toBe(0); - expect(chimp.watch.mock.calls.length).toBe(0); - expect(chimp.server.mock.calls.length).toBe(0); - }); - it('runs in watch mode)', function () { - var chimp = new Chimp({ - watch: true - }); - chimp.run = jest.genMockFunction(); - chimp.start = jest.genMockFunction(); - chimp.watch = jest.genMockFunction(); - chimp.server = jest.genMockFunction(); - chimp.selectMode(); - expect(chimp.watch).toBeCalledWith(); - expect(chimp.watch.mock.calls.length).toBe(1); - expect(chimp.run.mock.calls.length).toBe(0); - expect(chimp.start.mock.calls.length).toBe(0); - expect(chimp.server.mock.calls.length).toBe(0); - }); - it('runs in server mode)', function () { - var chimp = new Chimp({ - server: true - }); - chimp.run = jest.genMockFunction(); - chimp.start = jest.genMockFunction(); - chimp.watch = jest.genMockFunction(); - chimp.server = jest.genMockFunction(); - chimp.selectMode(); - expect(chimp.server.mock.calls.length).toBe(1); - expect(typeof chimp.server.mock.calls[0][0]).toBe('undefined'); - expect(chimp.watch.mock.calls.length).toBe(0); - expect(chimp.run.mock.calls.length).toBe(0); - expect(chimp.start.mock.calls.length).toBe(0); - }); - }); - describe('watch', function () { - it('initializes chokidar', function () { - var chokidar = require('chokidar'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - path: 'abc' - }; - var chimp = new Chimp(options); - chimp.run = jest.genMockFunction(); - chimp.watch(); - expect(chokidar.watch.mock.calls[0][0]).toEqual([options.path]); - }); - it('all listener is registered after watcher is ready', function () { - var chokidar = require('chokidar'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - path: 'abc' - }; - var chimp = new Chimp(options); - chimp.run = jest.genMockFunction(); - chokidar.watcher.on = jest.genMockFunction(); - chimp.watch(); - expect(chokidar.watcher.once.mock.calls[0][0]).toBe('ready'); - var readyCallback = chokidar.watcher.once.mock.calls[0][1]; - readyCallback(); - expect(chokidar.watcher.on.mock.calls[0][0]).toBe('all'); - }); - it('an non-unlink event triggers the interrupt and run sequence', function () { - var chokidar = require('chokidar'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp(); - chimp.run = jest.genMockFunction(); - var self = this; - self.func = null; - self.timeout = null; - - chimp._getDebouncedFunction = function (func, timeout) { - self.allCallback = func; - self.timeout = timeout; - }; - - chimp.watch(); - var readyCallback = chokidar.watcher.once.mock.calls[0][1]; - readyCallback(); - chimp.rerun = jest.genMockFunction(); - self.allCallback('not-unlink'); - expect(chimp.rerun.mock.calls.length).toBe(1); - }); - it('a deleted feature does not trigger the interrupt and run sequence', function () { - var chokidar = require('chokidar'); - - var Chimp = require('../lib/chimp.js'); //var _on = process.on; - //process.on = jest.genMockFunction(); - - - var chimp = new Chimp(); - chimp.run = jest.genMockFunction(); - chimp.watch(); - var readyCallback = chokidar.watcher.once.mock.calls[0][1]; - readyCallback(); - var allCallback = chokidar.watcher.on.mock.calls[0][1]; - chimp.rerun = jest.genMockFunction(); - allCallback('unlink', '/path/some.feature'); - expect(chimp.rerun.mock.calls.length).toBe(0); //process.on = _on; - }); - it('a deleted non-feature triggers the interrupt and run sequence', function () { - var chokidar = require('chokidar'); - - var async = require('async'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp(); - chimp.run = jest.genMockFunction(); - var self = this; - self.func = null; - self.timeout = null; - - chimp._getDebouncedFunction = function (func, timeout) { - self.allCallback = func; - self.timeout = timeout; - }; - - chimp.watch(); - var readyCallback = chokidar.watcher.once.mock.calls[0][1]; - readyCallback(); - chimp.rerun = jest.genMockFunction(); - this.allCallback('unlink', '/path/some.feature.js'); - expect(chimp.rerun.mock.calls.length).toBe(1); - }); - it('runs on startup', function () { - var chokidar = require('chokidar'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp(); - chimp.run = jest.genMockFunction(); - chimp.watch(); - var readyCallback = chokidar.watcher.once.mock.calls[0][1]; - readyCallback(); - expect(chimp.run.mock.calls.length).toBe(1); - }); - it('uses the watchTag with cucumber', function () { - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - watchTags: '@someTag,@andAnotherTag' - }); - chimp.watch(); - expect(chimp.options.tags).toBe('@someTag,@andAnotherTag'); - }); - }); - describe('server', function () { - it('listens on a freeport when server-port is not provided', function () { - var freeport = require('freeport'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp(); - chimp.server(); - expect(freeport.mock.calls.length).toBe(1); - }); - it('listens on the server-port when it is provided', function () { - var freeport = require('freeport'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverPort: 1234 - }); - chimp._startServer = jest.genMockFn(); - chimp.server(); - expect(chimp._startServer.mock.calls.length).toBe(1); - expect(chimp._startServer.mock.calls[0][0]).toBe(1234); - expect(freeport.mock.calls.length).toBe(0); - }); - it('handshakes with a DDP endpoint with the server address on startup if ddp is passed', function () {// TODO having some issues testing this. DDPClient is tricky to jest up - }); - it('exposes the run and interrupt endpoints', function () { - var Hapi = require('hapi'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverHost: 'localhost', - serverPort: 1234 - }); - chimp.server(); - expect(Hapi.instance.route.mock.calls[0][0].method).toBe('GET'); - expect(Hapi.instance.route.mock.calls[0][0].path).toBe('/run'); - expect(Hapi.instance.route.mock.calls[1][0].method).toBe('GET'); - expect(Hapi.instance.route.mock.calls[1][0].path).toBe('/run/{absolutePath*}'); - expect(Hapi.instance.route.mock.calls[2][0].method).toBe('GET'); - expect(Hapi.instance.route.mock.calls[2][0].path).toBe('/interrupt'); - expect(Hapi.instance.route.mock.calls[3][0].method).toBe('GET'); - expect(Hapi.instance.route.mock.calls[3][0].path).toBe('/runAll'); - }); - it('returns cucumber results when run handler is called successfully', function () { - var Hapi = require('hapi'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverHost: 'localhost', - serverPort: 1234 - }); - chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, [null, [null, 'cucumber results']]); - }); - chimp.server(); - var getHandler = Hapi.instance.route.mock.calls[0][0].handler; - var headerMock = jest.genMockFn(); - var reply = jest.genMockFn().mockReturnValue({ - header: headerMock - }); - getHandler(null, reply); - expect(reply.mock.calls[0][0]).toBe('cucumber results'); - }); - it('returns cucumber results when run handler is called successfully with a feature', function () { - var Hapi = require('hapi'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverHost: 'localhost', - serverPort: 1234 - }); - chimp.options._ = {}; - chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, [null, [null, 'cucumber results']]); - }); - chimp.server(); - var getHandler = Hapi.instance.route.mock.calls[1][0].handler; - var request = { - params: { - absolutePath: 'blah' - } - }; - var headerMock = jest.genMockFn(); - var reply = jest.genMockFn().mockReturnValue({ - header: headerMock - }); - getHandler(request, reply); - expect(chimp.options._[2]).toBe(request.params.absolutePath); - expect(reply.mock.calls[0][0]).toBe('cucumber results'); - }); - it('returns "done" when interrupt handler is called successfully', function () { - var Hapi = require('hapi'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverHost: 'localhost', - serverPort: 1234 - }); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, [null, [null, 'cucumber results']]); - }); - chimp.server(); - var interruptHandler = Hapi.instance.route.mock.calls[2][0].handler; - var headerMock = jest.genMockFn(); - var reply = jest.genMockFn().mockReturnValue({ - header: headerMock - }); - interruptHandler(null, reply); - expect(reply.mock.calls[0][0]).toBe('done'); - }); - it('returns cucumber results when runAll handler is called successfully', function () { - var Hapi = require('hapi'); - - var Chimp = require('../lib/chimp.js'); - - var chimp = new Chimp({ - serverHost: 'localhost', - serverPort: 1234 - }); - chimp.rerun = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, [null, [null, 'cucumber results']]); - }); - chimp.server(); - var getHandler = Hapi.instance.route.mock.calls[3][0].handler; - var headerMock = jest.genMockFn(); - var reply = jest.genMockFn().mockReturnValue({ - header: headerMock - }); - getHandler(null, reply); - expect(reply.mock.calls[0][0]).toBe('cucumber results'); - }); - }); - describe('run', function () { - it('interrupts any existing processes, starts processes and calls callback', function () { - var chimp = new Chimp(); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - var callback = jest.genMockFn(); - chimp.run(callback); - expect(chimp.interrupt.mock.calls.length).toBe(2); - expect(chimp._startProcesses.mock.calls.length).toBe(1); - expect(callback.mock.calls.length).toBe(1); - }); - it('detects errors in interrupt and calls callback with an error', function () { - var chimp = new Chimp(); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback('error'); - }); - var callback = jest.genMockFn(); - chimp.run(callback); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toEqual('error'); - }); - it('stops all processes on successful runs', function () { - var chimp = new Chimp(); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - chimp.stop = jest.genMockFunction(); - var callback = jest.genMockFn(); - chimp.run(callback); - expect(chimp.interrupt.mock.calls.length).toBe(2); - }); - it('passes the options to the simian reporter constructor', function () { - var SimianReporter = require('../lib/simian-reporter'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - simianAccessToken: 'present' - }; - var chimp = new Chimp(options); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { - return callback(); - }); - var callback = jest.genMockFn(); - chimp.run(callback); - expect(SimianReporter.mock.calls[0][0]).toBe(options); - expect(SimianReporter.mock.calls.length).toBe(1); - }); - it('calls the simian reporter when the run is finished', function () { - jest.dontMock('../lib/simian-reporter'); - - var SimianReporter = require('../lib/simian-reporter'); - - SimianReporter.prototype.report = jest.genMockFn(); - - var Chimp = require('../lib/chimp.js'); - - var options = { - simianAccessToken: 'present' - }; - var chimp = new Chimp(options); - chimp.interrupt = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, 'hello'); - }); - chimp._startProcesses = jest.genMockFunction().mockImplementation(function (callback) { - return callback(null, [undefined, '[]']); - }); - var callback = jest.genMockFn(); - chimp.run(callback); - expect(SimianReporter.instance.report.mock.calls.length).toBe(1); - }); - }); - describe('interrupt', function () { - it('calls interrupt on all processes in the reverse order that they were started', function () { - jest.dontMock('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - var orderCounter = 0; - - function Process() { - this.orderRun = -1; - } - - Process.prototype.interrupt = function (callback) { - this.orderRun = orderCounter++; - callback(); - }; - - var process1 = new Process('1'); - var process2 = new Process('2'); - chimp.processes = [process1, process2]; - var callback = jest.genMockFunction(); - chimp.interrupt(callback); - expect(process2.orderRun).toBe(0); - expect(process1.orderRun).toBe(1); - }); - it('bubbles callback without modifying the arguments', function () { - var async = require('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - chimp.processes = [{ - interrupt: jest.genMockFn() - }]; - var someArgs = ['some', 'args']; - async.series = jest.genMockFunction().mockImplementation(function (processes, callback) { - callback.apply(this, someArgs); - }); - var callback = jest.genMockFn(); - chimp.interrupt(callback); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0]).toEqual(['some', 'args']); - }); - it('calls the callback when no processes have been started', function () { - var async = require('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - chimp.isInterrupting = true; - async.series = jest.genMockFn(); - var callback = jest.genMockFn(); - chimp.interrupt(callback); - expect(chimp.isInterrupting).toBe(false); - expect(callback.mock.calls.length).toBe(1); - expect(async.series.mock.calls.length).toBe(0); - }); - it('cancels the isInterrupting flag after all processes have run with no errors', function () { - var _ = require('underscore'); - - var async = require('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - chimp.isInterrupting = true; - chimp.processes = ['yo']; - _.collect = jest.genMockFn(); - async.series = jest.genMockFn().mockImpl(function (procs, func) { - func(); - }); - chimp.interrupt(jest.genMockFn()); - expect(chimp.isInterrupting).toBe(false); - }); - it('cancels the isInterrupting flag after all processes have run with errors', function () { - var _ = require('underscore'); - - var async = require('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - chimp.isInterrupting = true; - chimp.processes = ['yo']; - _.collect = jest.genMockFn(); - async.series = jest.genMockFn().mockImpl(function (procs, func) { - func('error'); - }); - chimp.interrupt(jest.genMockFn()); - expect(chimp.isInterrupting).toBe(false); - }); - }); - describe('rerun', function () { - it('calls run if interrupt is successful', function () { - var chimp = new Chimp(); - chimp.interrupt = jest.genMockFn().mockImplementation(function (callback) { - callback(null); - }); - chimp.run = jest.genMockFn(); - chimp.rerun(); - expect(chimp.run.mock.calls.length).toBe(1); - }); - it('does not rerun if an rerun is in progress', function () { - var chimp = new Chimp(); - chimp.run = jest.genMockFn(); - chimp.isInterrupting = true; - chimp.rerun(); - expect(chimp.run.mock.calls.length).toBe(0); - }); - it('reruns once it has finished rerunning', function () { - var chimp = new Chimp(); - chimp.run = jest.genMockFn().mockImplementation(function (callback) { - callback(null); // after the first run, replace this mockImplementation with a standard mock so we - // can assert on that the rerun interrupts after a successful run - - chimp.run = jest.genMockFn(); - }); - chimp.rerun(); - chimp.rerun(); - expect(chimp.run.mock.calls.length).toBe(1); - }); - }); - describe('_startProcesses', function () { - it('creates an array of series of processes and starts them', function () { - var async = require('async'); - - var Chimp = require('../lib/chimp.js'); - - async.series = jest.genMockFn(); - var chimp = new Chimp(); - var processes = []; - chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); - - chimp._startProcesses(); - - expect(chimp._createProcesses.mock.calls.length).toBe(1); - expect(chimp.processes).toBe(processes); - }); - it('start each process in its own context and calls callback once', function () { - jest.dontMock('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - - function Process() { - this.state = 'constructed'; - } - - Process.prototype.start = function (callback) { - this.state = 'started'; - callback(); - }; - - var processes = [new Process(), new Process()]; - chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); - var callback = jest.genMockFunction(); - - chimp._startProcesses(callback); - - expect(typeof callback.mock.calls[0][0]).toBe('undefined'); - expect(callback.mock.calls.length).toBe(1); - expect(processes[0].state).toBe('started'); - expect(processes[1].state).toBe('started'); - }); - it('bubbles up errors in callback if an processes callback with an error', function () { - jest.dontMock('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - - function Process() { - this.state = 'constructed'; - } - - Process.prototype.start = function (callback) { - this.state = 'started'; - callback('error!'); - }; - - var processes = [new Process('1'), new Process('2')]; - chimp._createProcesses = jest.genMockFunction().mockReturnValue(processes); - var callback = jest.genMockFunction(); - - chimp._startProcesses(callback); - - expect(callback.mock.calls[0][0]).toBe('error!'); - expect(callback.mock.calls.length).toBe(1); - expect(processes[0].state).toBe('started'); - expect(processes[1].state).toBe('constructed'); - }); - it('cancels the isInterrupting flag on error', function () { - var _ = require('underscore'); - - var async = require('async'); - - var Chimp = require('../lib/chimp'); - - var chimp = new Chimp(); - chimp.isInterrupting = true; - chimp._createProcesses = jest.genMockFn(); - _.collect = jest.genMockFn().mockReturnValue(['yo']); - async.series = jest.genMockFn().mockImpl(function (procs, func) { - func('error'); - }); - - chimp._startProcesses(jest.genMockFn()); - - expect(chimp.isInterrupting).toBe(false); - }); - }); - describe('_createProcesses', function () { - it('adds a phantom', function () { - var Phantom = require('../lib/phantom.js'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - browser: 'phantomjs' - }; - var chimp = new Chimp(options); - - var processes = chimp._createProcesses(); - - expect(Phantom.mock.calls[0][0]).toBe(options); - expect(processes.length).toBe(2); - }); - it('adds a selenium when no browser is passed', function () { - var Selenium = require('../lib/selenium.js'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - browser: 'some-browser', - host: '' - }; - var chimp = new Chimp(options); - - var processes = chimp._createProcesses(); - - expect(Selenium.mock.calls[0][0]).toBe(options); - expect(processes.length).toBe(2); - }); - it('does not add selenium when SauceLabs is the host', function () { - var Selenium = require('../lib/selenium.js'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - host: 'saucelabs' - }; - var chimp = new Chimp(options); - - var processes = chimp._createProcesses(); - - expect(Selenium.mock.calls.length).toBe(0); - expect(processes.length).toBe(1); - }); - it('adds cucumber last', function () { - jest.dontMock('../lib/cucumberjs/cucumber.js'); - - var Chimp = require('../lib/chimp.js'); - - var options = { - browser: 'phantomjs' - }; - var chimp = new Chimp(options); - - var processes = chimp._createProcesses(); - - expect(typeof processes[0].cucumberChild).toBe('undefined'); - expect(typeof processes[1].cucumberChild).not.toBe('undefined'); - }); - it('should add at least one process', function () { - var chimp = new Chimp({ - browser: 'phantomjs' - }); - - var processes = chimp._createProcesses(); - - expect(processes.length).not.toBe(0); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/ddp-spec.js b/dist/__tests__/ddp-spec.js deleted file mode 100644 index d2067a3..0000000 --- a/dist/__tests__/ddp-spec.js +++ /dev/null @@ -1,107 +0,0 @@ -jest.dontMock('../lib/ddp.js'); -describe('DDP Wrapper', function () { - var DDP = require('../lib/ddp'); - - describe('constructor', function () { - beforeEach(function () { - delete process.env.ROOT_URL; - - for (var key in process.env) { - if (key.indexOf('chimp.ddp') !== -1) { - delete process.env[key]; - } - } - }); - it('sets ROOT_URL env var to be the chimp.ddp env var', function () { - process.env['chimp.ddp0'] = 'http://here.com:3000'; - new DDP(); - expect(process.env.ROOT_URL).toEqual('http://here.com:3000'); - }); - it('does not change the ROOT_URL when it is provided', function () { - process.env.ROOT_URL = 'http://somewhere.com:3000'; - process.env['chimp.ddp0'] = 'http://here.com:3000'; - new DDP(); - expect(process.env.ROOT_URL).toEqual('http://somewhere.com:3000'); - }); - it('parses the DDP host of [chimp.ddp0] if no url provided', function () { - process.env['chimp.ddp0'] = 'http://here.com:3000'; - var ddp = new DDP(); - expect(ddp.url.host).toEqual('here.com:3000'); - }); - it('parses the DDP host of provided url', function () { - process.env['chimp.ddp0'] = 'http://here.com:3000'; - process.env['chimp.ddp1'] = 'http://here.com:3001'; - var ddp = new DDP('http://here.com:3001'); - expect(ddp.url.host).toEqual('here.com:3001'); - }); - }); - describe('connect', function () { - it('returns an async-wrapped DDPClient', function () {// TODO check that the DDPClient return value is passed to wrapAsyncObject - // and that the connect', 'call', 'apply', 'callWithRandomSeed', 'subscribe' methods are passed in - }); - it('does not set sync-by-default when chimp.sync is false', function () {// TODO - }); - }); - describe('_getUrl', function () { - it('throws an error if http or https are not passed', function () { - var thrower = function () { - new DDP()._getUrl('blah.com'); - }; - - expect(thrower).toThrowError('[chimp][ddp] DDP url must contain the protocol'); - }); - it('parses http URLs', function () { - var url = new DDP()._getUrl('http://somewhere:3000'); - - expect(url.hostname).toEqual('somewhere'); - expect(url.port).toEqual('3000'); - expect(url.protocol).toEqual('http:'); - }); - it('parses https URLs', function () { - var url = new DDP()._getUrl('https://somewhere:3000'); - - expect(url.hostname).toEqual('somewhere'); - expect(url.port).toEqual('3000'); - expect(url.protocol).toEqual('https:'); - }); - }); - describe('_getOptions', function () { - it('sets the port and hostname using the instance url object', function () { - var ddp = new DDP(); - ddp.url = { - hostname: 'the.host', - port: 3130, - protocol: 'http:' - }; - - var options = ddp._getOptions(); - - expect(options.host).toEqual('the.host'); - expect(options.port).toEqual(3130); - }); - it('sets the ssl to false when the protocol is http', function () { - var ddp = new DDP(); - ddp.url = { - hostname: 'the.host', - port: 3130, - protocol: 'http:' - }; - - var options = ddp._getOptions(); - - expect(options.ssl).toEqual(false); - }); - it('sets the ssl to true when the protocol is https', function () { - var ddp = new DDP(); - ddp.url = { - hostname: 'the.host', - port: 3130, - protocol: 'https:' - }; - - var options = ddp._getOptions(); - - expect(options.ssl).toEqual(true); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/options-loader.js b/dist/__tests__/options-loader.js deleted file mode 100644 index bd67e1c..0000000 --- a/dist/__tests__/options-loader.js +++ /dev/null @@ -1,51 +0,0 @@ -jest.dontMock('../lib/options-loader'); -jest.dontMock('path'); -describe('Options Loader', () => { - const optionsLoader = require('../lib/options-loader'); - - describe('getOptions', () => { - const fs = require('fs'); - - beforeEach(() => { - spyOn(process, 'cwd').and.returnValue('/myFolder'); - optionsLoader._exit = jest.genMockFn(); - optionsLoader._requireFile = jest.genMockFn(); - }); - it('should use the first argument as the config file if it is a js file containing "chimp"', () => { - const argv = ['not', 'applicable', 'my-chimp-file.js']; - optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); - fs.existsSync = jest.genMockFn().mockReturnValue(true); - optionsLoader.getOptions(); - expect(optionsLoader._requireFile.mock.calls[0][0]).toBe('/myFolder/my-chimp-file.js'); - }); - it('should remove the config file from the arguments', () => { - fs.existsSync = jest.genMockFn().mockReturnValue(true); - const argv = ['not', 'applicable', 'my-chimp-file.js', '2nd-arg']; - optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); - optionsLoader.getOptions(); - expect(argv).toEqual(['not', 'applicable', '2nd-arg']); - }); - it('it should log an error if the provided config file does not exist and exist with a code 1', () => { - const argv = ['not', 'applicable', 'my-chimp-file.js']; - optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); - fs.existsSync = jest.genMockFn().mockReturnValue(false); - optionsLoader.getOptions(); - expect(optionsLoader._exit.mock.calls[0][0]).toBe(1); - }); - it('should load the chimp.js file if it exists in the current directory', () => { - const argv = ['not', 'applicable', 'not-a-config-file.js']; - optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); - fs.existsSync = jest.genMockFn().mockReturnValue(true); - optionsLoader.getOptions(); - expect(optionsLoader._requireFile.mock.calls[0][0]).toBe('/myFolder/chimp.js'); - }); - it('should load default values from default.js', () => { - const argv = ['not', 'applicable', 'not-a-config-file.js']; - optionsLoader._getProcessArgv = jest.genMockFn().mockReturnValue(argv); - optionsLoader._getDefaultConfigFilePath = jest.genMockFn().mockReturnValue('defaultFileLocation'); - fs.existsSync = jest.genMockFn().mockReturnValue(true); - optionsLoader.getOptions(); - expect(optionsLoader._requireFile.mock.calls[1][0]).toBe('defaultFileLocation'); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/phantom-spec.js b/dist/__tests__/phantom-spec.js deleted file mode 100644 index d44acf5..0000000 --- a/dist/__tests__/phantom-spec.js +++ /dev/null @@ -1,170 +0,0 @@ -jest.dontMock('../lib/phantom'); -describe('Phantom', function () { - describe('constructor', function () { - var Phantom = require('../lib/phantom'); - - it('throws when options is not passed', function () { - var createPhantom = function () { - new Phantom(); - }; - - expect(createPhantom).toThrowError('options is required'); - }); - it('throws when options.port is not passed', function () { - var options = {}; - - var createPhantom = function () { - new Phantom(options); - }; - - expect(createPhantom).toThrowError('options.port is required'); - }); - }); - describe('start', function () { - it('uses options.port to start phantom in webdriver mode', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.start(); - expect(processHelper.start.mock.calls.length).toBe(1); - expect(processHelper.start.mock.calls[0][0].args).toEqual(['--webdriver', 9876, '--ignore-ssl-errors', 'false']); - }); - it('sets this.child to the phantom child process', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var childProcess = {}; - processHelper.start.mockReturnValue(childProcess); - var phantom = new Phantom({ - port: 9876 - }); - expect(phantom.child).toBe(null); - phantom.start(null); - expect(phantom.child).toBe(childProcess); - }); - it('calls the callback with null when phantom starts successfully', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - processHelper.start = jest.genMockFn().mockImplementation(function (options, callback) { - callback(); - }); - var phantom = new Phantom({ - port: 9876 - }); - var callback = jest.genMockFn(); - phantom.start(callback); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - }); - it('calls the callback with the error when phantom fails to start', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - processHelper.start = jest.genMockFn().mockImplementation = function (options, callback) { - callback('error!'); - }; - - var phantom = new Phantom({ - port: 9876 - }); - var callback = jest.genMockFn(); - phantom.start(callback); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBe('error!'); - }); - it('immediately calls the callback without starting phantom if already running', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.child = 'not null'; - var callback = jest.genMockFn(); - phantom.start(callback); - expect(processHelper.start.mock.calls.length).toBe(0); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - expect(phantom.child).toBe('not null'); - }); - }); - describe('stop', function () { - it('kills the phantom child when phantom is running and sets the child to null', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.child = 'not null'; - processHelper.kill = jest.genMockFn().mockImplementation(function (options, callback) { - callback(); - }); - var callback = jest.genMockFn(); - phantom.stop(callback); - expect(processHelper.kill.mock.calls.length).toBe(1); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - expect(phantom.child).toBe(null); - }); - it('calls the callback immediately when phantom is not running', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.child = null; - processHelper.kill = jest.genMockFn(); - var callback = jest.genMockFn(); - phantom.stop(callback); - expect(processHelper.kill.mock.calls.length).toBe(0); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - expect(phantom.child).toBe(null); - }); - it('calls the callback with an error if an error is encountered', function () { - var processHelper = require('../lib/process-helper'); - - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.child = 'not null'; - processHelper.kill = jest.genMockFn().mockImplementation(function (options, callback) { - callback('Error!'); - }); - var callback = jest.genMockFn(); - phantom.stop(callback); - expect(processHelper.kill.mock.calls.length).toBe(1); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBe('Error!'); - }); - }); - describe('interrupt', function () { - it('should stop phantom', function () { - var Phantom = require('../lib/phantom'); - - var phantom = new Phantom({ - port: 9876 - }); - phantom.stop = jest.genMockFn(); - var callback = 'callback'; - phantom.interrupt(callback); - expect(phantom.stop.mock.calls.length).toBe(1); - expect(phantom.stop.mock.calls[0][0]).toBe(callback); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/process-helper-spec.js b/dist/__tests__/process-helper-spec.js deleted file mode 100644 index b8f64e3..0000000 --- a/dist/__tests__/process-helper-spec.js +++ /dev/null @@ -1,196 +0,0 @@ -jest.dontMock('../lib/process-helper'); -describe('process-helper', function () { - describe('start', function () { - it('spawns a child, calls the callback and returns the child', function () { - var processHelper = require('../lib/process-helper.js'); - - var child = {}; - processHelper.spawn = jest.genMockFn().mockReturnValue(child); - var options = {}; - var callback = jest.genMockFn(); - var ret = processHelper.start(options, callback); - expect(ret).toBe(child); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - }); - it('waits for message if waitForMessage is provided and delegates the callback as is', function () { - var processHelper = require('../lib/process-helper.js'); - - var child = {}; - processHelper.spawn = jest.genMockFn(); - processHelper.waitForMessage = jest.genMockFn().mockImplementation(function (options, child, callback) { - callback.apply(this, [1, 2, 3, 4]); - }); - var options = { - waitForMessage: 'not null' - }; - var callback = jest.genMockFn(); - var ret = processHelper.start(options, callback); - expect(processHelper.waitForMessage.mock.calls.length).toBe(1); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0]).toEqual([1, 2, 3, 4]); - }); - }); - describe('spawn', function () { - it('calls spawn with the binary and args and returns the child process', function () { - var cp = require('child_process'), - processHelper = require('../lib/process-helper.js'); - - processHelper.logOutputs = jest.genMockFn(); - var child = {}; - spyOn(cp, 'spawn').and.returnValue(child); - var options = { - bin: '/someBinary', - args: ['bunch', 'of', 'args'] - }; - var ret = processHelper.spawn(options); - expect(cp.spawn).toHaveBeenCalledWith(options.bin, options.args); - expect(ret).toBe(child); - }); - it('logs the outputs of the child process', function () { - var cp = require('child_process'), - processHelper = require('../lib/process-helper.js'); - - processHelper.logOutputs = jest.genMockFn(); - var child = {}; - spyOn(cp, 'spawn').and.returnValue(child); - var options = { - prefix: 'hey bear' - }; - var ret = processHelper.spawn(options); - expect(processHelper.logOutputs.mock.calls.length).toBe(1); - expect(processHelper.logOutputs.mock.calls[0][0]).toBe(options.prefix); - expect(processHelper.logOutputs.mock.calls[0][1]).toBe(child); - }); - }); - describe('logOutputs', function () { - it('logs the output of the child process stderr events', function () { - var log = require('../lib/log.js'), - processHelper = require('../lib/process-helper.js'); - - var child = { - stdout: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventTrigger('blah'); - expect(event).toBe('data'); - expect(log.debug.mock.calls.length).toBe(1); - expect(log.debug.mock.calls[0][0]).toBe('[chimp][prefix.stdout]'); - expect(log.debug.mock.calls[0][1]).toBe('blah'); - }) - }, - stderr: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventTrigger('blah blah'); - expect(event).toBe('data'); - expect(log.debug.mock.calls.length).toBe(2); - expect(log.debug.mock.calls[1][0]).toBe('[chimp][prefix.stderr]'); - expect(log.debug.mock.calls[1][1]).toBe('blah blah'); - }) - } - }; - processHelper.logOutputs('prefix', child); - }); - }); - describe('waitForMessage', function () { - it('removes the listener if the success message is seen and calls the callback', function () { - var processHelper = require('../lib/process-helper.js'); - - var callback = jest.genMockFn(); - var options = { - prefix: '[apollo]', - waitForMessage: 'we have lift off' - }; - var eventToBeRemovedStdOut = false; - var eventToBeRemovedStdErr = false; - var child = { - stdout: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventToBeRemovedStdOut = eventTrigger; - eventTrigger('Huston, we have lift off!'); - }), - removeListener: jest.genMockFn() - }, - stderr: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventToBeRemovedStdErr = eventTrigger; - eventTrigger('Huston, we have lift off!'); - }), - removeListener: jest.genMockFn() - } - }; - processHelper.waitForMessage(options, child, callback); - expect(child.stdout.removeListener.mock.calls.length).toBe(1); - expect(child.stdout.removeListener.mock.calls[0][0]).toBe('data'); - expect(child.stdout.removeListener.mock.calls[0][1]).toBe(eventToBeRemovedStdOut); - expect(child.stderr.removeListener.mock.calls.length).toBe(1); - expect(child.stderr.removeListener.mock.calls[0][0]).toBe('data'); - expect(child.stderr.removeListener.mock.calls[0][1]).toBe(eventToBeRemovedStdErr); - expect(callback.mock.calls.length).toBe(2); - expect(callback.mock.calls[0][0]).toBeFalsy(); - expect(callback.mock.calls[1][0]).toBeFalsy(); - }); - it('calls back with an error if the error message is seen', function () { - var processHelper = require('../lib/process-helper.js'); - - var callback = jest.genMockFn(); - var options = { - prefix: '[apollo]', - waitForMessage: 'not empty', - errorMessage: 'engine failure' - }; - var eventToBeRemoved = false; - var child = { - stdout: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventTrigger('Huston, we have a problem - engine failure!'); - }) - }, - stderr: { - on: jest.genMockFn().mockImplementation(function (event, eventTrigger) { - eventTrigger('Huston, we have a problem - engine failure!'); - }) - } - }; - processHelper.waitForMessage(options, child, callback); - expect(callback.mock.calls.length).toBe(2); - expect(callback.mock.calls[0][0]).toBe('Huston, we have a problem - engine failure!'); - expect(callback.mock.calls[1][0]).toBe('Huston, we have a problem - engine failure!'); - }); - }); - describe('kill', function () { - it('kills the provided process, sets it to null and calls the callback when the process is dead', function () { - var processHelper = require('../lib/process-helper.js'); - - process.kill = jest.genMockFn().mockImplementation(function () { - // the first call checks if the process exists - // the second call is the actual kill - // subsequent calls are checking if the process exists - // it takes 3 calls to go through all the execution paths for this SUT - if (process.kill.mock.calls.length === 4) { - throw { - code: 'ESRCH' - }; - } - }); - var options = { - child: { - pid: 1234 - } - }; - var callback = jest.genMockFn(); - processHelper.kill(options, callback); - jest.runAllTimers(); - expect(process.kill.mock.calls.length).toBe(4); - expect(process.kill.mock.calls[0][0]).toEqual(1234); - expect(process.kill.mock.calls[0][1]).toBe(0); - expect(process.kill.mock.calls[1][1]).toBe('SIGTERM'); - expect(process.kill.mock.calls[2][0]).toEqual(1234); - expect(process.kill.mock.calls[2][1]).toEqual(0); - expect(process.kill.mock.calls[3][0]).toEqual(1234); - expect(process.kill.mock.calls[3][1]).toEqual(0); - expect(options.child).toBe(null); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBeFalsy(); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/saucelabs-manager-spec.js b/dist/__tests__/saucelabs-manager-spec.js deleted file mode 100644 index ee05850..0000000 --- a/dist/__tests__/saucelabs-manager-spec.js +++ /dev/null @@ -1,19 +0,0 @@ -jest.dontMock('../lib/saucelabs-manager'); -describe('SauceLabs Session Manager', function () { - describe('Constructor', function () { - it('sets the SauceLabsUrl', function () { - var SauceLabsManager = require('../lib/saucelabs-manager'); - - var options = { - port: 1234, - browser: 'something', - user: 'testus3r', - key: '12345678', - host: 'saucelabs.com' - }; - var sauceLabsBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host + '/rest/v1/' + options.user; - var session = new SauceLabsManager(options); - expect(session.options.sauceLabsUrl).toBe(sauceLabsBaseUrl); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/selenium-spec.js b/dist/__tests__/selenium-spec.js deleted file mode 100644 index b917114..0000000 --- a/dist/__tests__/selenium-spec.js +++ /dev/null @@ -1,339 +0,0 @@ -jest.dontMock('../lib/selenium'); -jest.dontMock('../lib/boolean-helper'); -jest.dontMock('underscore'); -describe('Selenium', function () { - describe('constructor', function () { - it('throws when options is not passed', function () { - var Selenium = require('../lib/selenium'); - - var createSelenium = function () { - new Selenium(); - }; - - expect(createSelenium).toThrowError('options is required'); - }); - it('throws when options.port is not passed', function () { - var Selenium = require('../lib/selenium'); - - var options = {}; - - var createSelenium = function () { - new Selenium(options); - }; - - expect(createSelenium).toThrowError('options.port is required'); - }); - it('converts options.port to a string', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: 4444 - }); - expect(selenium.options.port).toBe('4444'); - }); - it('does not modify original options', function () { - var Selenium = require('../lib/selenium'); - - var originalOptions = { - port: 4444, - someVar: 1234 - }; - var selenium = new Selenium(originalOptions); - originalOptions.someVar = 5678; - expect(selenium.options.someVar).toBe(1234); - }); - it('creates a singleton by default', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: 4444 - }); - var selenium2 = new Selenium({ - port: 5678 - }); - expect(selenium).toBe(selenium2); - }); - it('does not create a singleton when --clean-selenium-server is true', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - 'clean-selenium-server': true - }); - var selenium2 = new Selenium({ - port: 5678 - }); - expect(selenium).not.toBe(selenium2); - }); - }); - describe('install', function () { - it('installs selenium', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install(); - expect(seleniumStandalone.install).toBeCalled(); - }); - it('passes callback to selenium-standalone call', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - var callback = jest.genMockFn(); - selenium.install(callback); - seleniumStandalone.install.mock.calls[0][1](); - expect(callback).toBeCalled(); - }); - it('does not run if chimp is offline mode', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - offline: true - }); - - var seleniumStandalone = require('selenium-standalone'); - - var callback = jest.genMockFn(); - selenium.install(callback); - expect(seleniumStandalone.install).not.toBeCalled(); - expect(callback.mock.calls.length).toBe(1); - }); - }); - describe('start', function () { - it('uses options.port to start selenium', function () { - var Selenium = require('../lib/selenium'); - - var port = '4444'; - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install = jest.genMockFunction(); - selenium.install.mockImplementation(function (callback) { - callback(null); - }); - - var callback = function () {}; - - selenium.start(callback); - expect(seleniumStandalone.start.mock.calls[0][0].seleniumArgs).toEqual(['-port', port]); - }); - it('retains pre-existing options.seleniumArgs when starting selenium', function () { - var Selenium = require('../lib/selenium'); - - var port = '4444'; - var opt = '-some-option=True'; - var selenium = new Selenium({ - port, - seleniumStandaloneOptions: { - seleniumArgs: [opt] - } - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install = jest.genMockFunction(); - selenium.install.mockImplementation(function (callback) { - callback(null); - }); - - var callback = function () {}; - - selenium.start(callback); - expect(seleniumStandalone.start.mock.calls[0][0].seleniumArgs).toEqual([opt, '-port', port]); - }); - it('sets this.child to the selenium child process', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install = jest.genMockFunction(); - selenium.install.mockImplementation(function (callback) { - callback(null); - }); - var seleniumChild = { - stderr: { - on: jest.genMockFunction() - } - }; - seleniumStandalone.start.mockImplementation(function (options, callback) { - callback(null, seleniumChild); - }); - - var callback = function () {}; - - selenium.start(callback); - expect(selenium.child).toBe(seleniumChild); - }); - it('calls the callback with null when selenium has been started successfully', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install = jest.genMockFunction(); - selenium.install.mockImplementation(function (callback) { - callback(null); - }); - var seleniumChild = { - stderr: { - on: jest.genMockFunction() - } - }; - seleniumStandalone.start.mockImplementation(function (options, callback) { - callback(null, seleniumChild); - }); - var callback = jest.genMockFunction(); - selenium.start(callback); - expect(callback.mock.calls[0]).toEqual([null]); - }); - it('calls the callback with the error when selenium fails to start', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - seleniumStandaloneOptions: {} - }); - - var seleniumStandalone = require('selenium-standalone'); - - selenium.install = jest.genMockFunction(); - selenium.install.mockImplementation(function (callback) { - callback(null); - }); - var error = new Error('Selenium start error'); - seleniumStandalone.start.mockImplementation(function (options, callback) { - callback(error); - }); - var callback = jest.genMockFunction(); - selenium.start(callback); - expect(callback.mock.calls[0]).toEqual([error]); - }); - it('logs the output of the child process', function () {// TODO - }); - it('calls the callback immediately with null when selenium is already running', function () { - var seleniumStandalone = require('selenium-standalone'); - - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444' - }); - var callback = jest.genMockFunction(); - seleniumStandalone.start = jest.genMockFn(); - selenium.child = 'not null'; - selenium.start(callback); - expect(callback.mock.calls.length).toBe(1); - expect(callback.mock.calls[0][0]).toBe(null); - expect(seleniumStandalone.start.mock.calls.length).toBe(0); - }); - }); - describe('stop', function () { - describe('when selenium is running', function () { - it('kills the selenium child', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444' - }); - - var processHelper = require('../lib/process-helper'); - - var seleniumChild = { - pid: 1234 - }; - selenium.child = seleniumChild; - selenium.sessionManager = {}; - var callback = jest.genMockFunction(); - selenium.stop(callback); - expect(processHelper.kill.mock.calls.length).toBe(1); - expect(processHelper.kill.mock.calls[0][0]).toEqual({ - child: selenium.child, - signal: 'SIGINT', - prefix: 'selenium' - }); // simulate the callback - - processHelper.kill.mock.calls[0][1]('this', 'that'); - expect(selenium.child).toBe(null); - expect(callback).toBeCalledWith('this', 'that'); - }); - }); - describe('when selenium is not running', function () { - it('calls the callback immediately', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444' - }); - var callback = jest.genMockFunction(); - selenium.stop(callback); - expect(selenium.child).toBe(null); - expect(callback).toBeCalledWith(null); - }); - }); - }); - describe('interrupt', function () { - it('should return immediately in watch mode', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - watch: true - }); - var callback = jest.genMockFunction(); - selenium.stop = jest.genMockFn(); - selenium.interrupt(callback); - expect(callback).toBeCalledWith(null); - expect(selenium.stop.mock.calls.length).toBe(0); - }); - it('should call kill when not in watch mode', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444' - }); - var callback = jest.genMockFunction(); - selenium.stop = jest.genMockFn(); - selenium.interrupt(callback); - expect(selenium.stop.mock.calls.length).toBe(1); - expect(selenium.stop.mock.calls.length).toBe(1); - }); - it('should call kill when --clean-selenium-server is true', function () { - var Selenium = require('../lib/selenium'); - - var selenium = new Selenium({ - port: '4444', - 'clean-selenium-server': true - }); - selenium.stop = jest.genMockFn(); - var callback = 'callback'; - selenium.interrupt(callback); - expect(selenium.stop.mock.calls.length).toBe(1); - expect(selenium.stop.mock.calls[0][0]).toBe(callback); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/session-factory-spec.js b/dist/__tests__/session-factory-spec.js deleted file mode 100644 index 00b088c..0000000 --- a/dist/__tests__/session-factory-spec.js +++ /dev/null @@ -1,64 +0,0 @@ -jest.dontMock('../lib/session-factory'); -jest.dontMock('../lib/session-manager'); -describe('Session Factory', function () { - describe('Constructor', function () { - it('sets the options on the instance when no exceptions are thrown', function () { - var SessionFactory = require('../lib/session-factory'); - - var options = { - port: 1234, - browser: 'something' - }; - var session = new SessionFactory(options); - expect(session.options).toBe(options); - }); - it('throws when options is not passed', function () { - var SessionFactory = require('../lib/session-factory'); - - var session = function () { - new SessionFactory(); - }; - - expect(session).toThrowError('options is required'); - }); - it('throws when options.port is not passed', function () { - var SessionFactory = require('../lib/session-factory'); - - var options = {}; - - var session = function () { - new SessionFactory({}); - }; - - expect(session).toThrowError('options.port is required'); - }); - it('throws when options.browser and options.device is not passed', function () { - var SessionFactory = require('../lib/session-factory'); - - var options = { - port: 1234 - }; - - var session = function () { - new SessionFactory(options); - }; - - expect(session).toThrowError('[chimp][session-manager-factory] options.browser or options.deviceName is required'); - }); - it('throws when options.user and options.key is not passed and not using localhost', function () { - var SessionFactory = require('../lib/session-factory'); - - var options = { - port: 1234, - browser: 'firefox', - host: 'browserstack.com' - }; - - var session = function () { - new SessionFactory(options); - }; - - expect(session).toThrowError('[chimp][session-manager-factory] options.user and options.key are required'); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/session-manager-spec.js b/dist/__tests__/session-manager-spec.js deleted file mode 100644 index f9707f9..0000000 --- a/dist/__tests__/session-manager-spec.js +++ /dev/null @@ -1,238 +0,0 @@ -jest.dontMock('underscore'); -jest.dontMock('../lib/session-manager'); -jest.dontMock('../lib/boolean-helper'); //jest.dontMock('loglevel'); -//require('loglevel').setLevel('TRACE'); - -describe('Session Manager', function () { - describe('Constructor', function () { - it('sets the options on the instance when no exceptions are thrown', function () { - var SessionManager = require('../lib/session-manager'); - - var options = { - port: 1234, - browser: 'something' - }; - var sessionManager = new SessionManager(options); - expect(sessionManager.options).toBe(options); - }); - }); - describe('Remote', function () { - beforeEach(function () { - delete process.env['chimp.noSessionReuse']; - delete process.env['chimp.watch']; - }); - it('should delegate the webdriver remote call if using phantom', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'phantomjs' - }); - var sessions = [1234]; - sessionManager._getWebdriverSessions = jest.genMockFn().mockImpl(function (callback) { - callback(sessions); - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - sessionManager.remote(options, callback); - expect(wd.remote.mock.calls.length).toBe(2); - expect(callback.mock.calls[0][1]).toBe('return from remote1'); - expect(callback.mock.calls[1][1]).toBe('return from remote2'); - expect(wd.remote.mock.calls[0][0]).toBe(options); - expect(wd.remote.mock.calls[1][0]).toBe(options); - }); - it('should delegate the webdriver remote call if a session has not already started', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - var browser = {}; - wd.remote = jest.genMockFn().mockReturnValue(browser); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'something' - }); - var sessions = []; - sessionManager._getWebdriverSessions = jest.genMockFn().mockImpl(function (callback) { - callback(null, sessions); - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - expect(callback.mock.calls[0][1]).toBe(browser); - expect(wd.remote.mock.calls.length).toBe(1); - expect(wd.remote.mock.calls[0][0]).toBe(options); - }); - it('should reuse a session if one has already started in watch mode', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - process.env['chimp.watch'] = true; - var browser = { - _original: { - requestHandler: { - sessionID: 'some-id' - } - } - }; - wd.remote = jest.genMockFn().mockReturnValue(browser); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'something' - }); - var sessions = [{ - id: 'session-id' - }]; - sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { - callback(null, sessions); - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - expect(callback.mock.calls[0][1]).toBe(browser); - expect(browser._original.requestHandler.sessionID).toBe(sessions[0].id); - expect(wd.remote.mock.calls.length).toBe(1); - expect(wd.remote.mock.calls[0][0]).toBe(options); - }); - it('should reuse a session if one has already started in server mode', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - process.env['chimp.server'] = true; - var browser = { - _original: { - requestHandler: { - sessionID: 'some-id' - } - } - }; - wd.remote = jest.genMockFn().mockReturnValue(browser); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'something' - }); - var sessions = [{ - id: 'session-id' - }]; - sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { - callback(null, sessions); - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - expect(callback.mock.calls[0][1]).toBe(browser); - expect(browser._original.requestHandler.sessionID).toBe(sessions[0].id); - expect(wd.remote.mock.calls.length).toBe(1); - expect(wd.remote.mock.calls[0][0]).toBe(options); - }); - it('starts a new session when noSessionReuse is true when a session exists', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'something' - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - process.env['chimp.noSessionReuse'] = true; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - sessionManager.remote(options, callback); - expect(callback.mock.calls[0][1]).toBe('return from remote1'); - expect(callback.mock.calls[1][1]).toBe('return from remote2'); - expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); - expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); - expect(wd.remote.mock.calls.length).toBe(2); - expect(wd.remote.mock.calls[0][0]).toBe(options); - expect(wd.remote.mock.calls[1][0]).toBe(options); - }); - it('respects noSessionReuse in watch mode', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - wd.remote = jest.genMockFn().mockReturnValueOnce('return from remote1').mockReturnValueOnce('return from remote2'); - var sessionManager = new SessionManager({ - port: 1234, - browser: 'something' - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - var options = { - some: 'options' - }; - process.env['chimp.watch'] = true; - process.env['chimp.noSessionReuse'] = true; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - sessionManager.remote(options, callback); - expect(callback.mock.calls[0][1]).toBe('return from remote1'); - expect(callback.mock.calls[1][1]).toBe('return from remote2'); - expect(callback.mock.calls[0][1].requestHandler).toBeFalsy(); - expect(callback.mock.calls[1][1].requestHandler).toBeFalsy(); - expect(wd.remote.mock.calls.length).toBe(2); - expect(wd.remote.mock.calls[0][0]).toBe(options); - expect(wd.remote.mock.calls[1][0]).toBe(options); - }); - it('should monkey patch the browser when reusing sessions in watch mode', function () { - var wd = require('xolvio-sync-webdriverio'); - - var SessionManager = require('../lib/session-manager'); - - var sessionManager = new SessionManager({ - port: 1234, - browser: 'somebrowser' - }); - var sessions = []; - sessionManager._getWebdriverSessions = jest.genMockFn().mockImplementation(function (callback) { - callback(null, sessions); - }); - sessionManager._waitForConnection = jest.genMockFn().mockImpl(function (browser, callback) { - callback(); - }); - wd.remote = jest.genMockFn(); - process.env['chimp.watch'] = true; - sessionManager._monkeyPatchBrowserSessionManagement = jest.genMockFn(); - var options = { - some: 'options' - }; - var callback = jest.genMockFn(); - sessionManager.remote(options, callback); - expect(sessionManager._monkeyPatchBrowserSessionManagement.mock.calls.length).toBe(1); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/simian-reporter-spec.js b/dist/__tests__/simian-reporter-spec.js deleted file mode 100644 index 96b0e6f..0000000 --- a/dist/__tests__/simian-reporter-spec.js +++ /dev/null @@ -1,88 +0,0 @@ -jest.dontMock('../lib/simian-reporter'); -describe('Simian reporter', function () { - it('sends the results to Simian and adds the access token', function () { - var request = require('request'); - - var SimianReporter = require('../lib/simian-reporter'); - - var simianReporter = new SimianReporter({ - simianResultEndPoint: 'api.simian.io/v1.0/result', - simianAccessToken: 'secretToken' - }); - var callback = jest.genMockFunction(); - var result = [{ - id: 'Use-browser-inside-steps' - }]; - simianReporter.report(result, callback); - expect(request.post.mock.calls.length).toBe(1); - var postedObject = request.post.mock.calls[0][0]; - expect(postedObject.url).toEqual('http://api.simian.io/v1.0/result?accessToken=secretToken'); - expect(postedObject.json).toEqual(true); - expect(postedObject.body).toEqual({ - type: 'cucumber', - result: result - }); // calls back on a good response - - var postCallback = request.post.mock.calls[0][1]; - postCallback(null, { - statusCode: 200 - }); - expect(callback.mock.calls.length).toBe(1); - }); - it('shows the error to the user when Simian returns a non 200 response', function () { - var request = require('request'); - - var SimianReporter = require('../lib/simian-reporter'); - - var simianReporter = new SimianReporter({ - simianAccessToken: 'secretToken' - }); - - const log = require('../lib/log'); - - spyOn(log, 'error'); - var callback = jest.genMockFunction(); - var result = [{ - id: 'Use-browser-inside-steps' - }]; - simianReporter.report(result, callback); // calls back on a good response - - var postCallback = request.post.mock.calls[0][1]; - var response = { - statusCode: 401 - }; - var body = { - status: 'error', - error: 'invalid accessToken' - }; - postCallback(null, response, body); - expect(callback.mock.calls.length).toBe(1); - expect(log.error).toHaveBeenCalledWith('[chimp][simian-reporter] Error from Simian:', 'invalid accessToken'); - }); - it('shows the error to the user when a request error happens before reaching the Simian API', function () { - var request = require('request'); - - var SimianReporter = require('../lib/simian-reporter'); - - var simianReporter = new SimianReporter({ - simianAccessToken: 'secretToken' - }); - - const log = require('../lib/log'); - - spyOn(log, 'error'); - var callback = jest.genMockFunction(); - var result = [{ - id: 'Use-browser-inside-steps' - }]; - simianReporter.report(result, callback); // calls back on a good response - - var postCallback = request.post.mock.calls[0][1]; - var error = new Error('network error'); - var response = null; - var body = null; - postCallback(error, response, body); - expect(callback.mock.calls.length).toBe(1); - expect(log.error).toHaveBeenCalledWith('[chimp][simian-reporter]', 'Error while sending result to Simian:', error); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/testingbot-manager-spec.js b/dist/__tests__/testingbot-manager-spec.js deleted file mode 100644 index 779b7c6..0000000 --- a/dist/__tests__/testingbot-manager-spec.js +++ /dev/null @@ -1,19 +0,0 @@ -jest.dontMock('../lib/testingbot-manager'); -describe('TestingBot Session Manager', function () { - describe('Constructor', function () { - it('sets the TestingBotUrl', function () { - var TestingBotManager = require('../lib/testingbot-manager'); - - var options = { - port: 1234, - browser: 'something', - user: 'testus3r', - key: '12345678', - host: 'api.testingbot.com' - }; - var testingBotBaseUrl = 'https://' + options.user + ':' + options.key + '@' + options.host + '/v1/'; - var session = new TestingBotManager(options); - expect(session.options.testingbotBaseUrl).toBe(testingBotBaseUrl); - }); - }); -}); \ No newline at end of file diff --git a/dist/__tests__/world-spec.js b/dist/__tests__/world-spec.js deleted file mode 100644 index 66b69d8..0000000 --- a/dist/__tests__/world-spec.js +++ /dev/null @@ -1 +0,0 @@ -describe('Cucumber World', function () {}); \ No newline at end of file diff --git a/dist/bin/chimp.js b/dist/bin/chimp.js deleted file mode 100644 index 709c141..0000000 --- a/dist/bin/chimp.js +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env node -"use strict"; - -var Chimp = require('../lib/chimp.js'), - minimist = require('minimist'), - freeport = require('freeport'), - exit = require('exit'), - log = require('../lib/log'), - fs = require('fs'), - _ = require('underscore'), - path = require('path'), - optionsLoader = require('../lib/options-loader'), - packageJson = require('../../package.json'); // Make babel plugins available to Cucumber and Mocha child processes - - -process.env.NODE_PATH += path.delimiter + path.resolve(__dirname, '../../node_modules') + path.delimiter + path.resolve(__dirname, '../../../../node_modules'); -var argv = minimist(process.argv, { - "default": optionsLoader.getOptions(), - "boolean": [// - - - - CHIMP - - - - - 'watch', 'watchWithPolling', 'server', 'sync', 'offline', // - - - - CUCUMBER - - - - - 'singleSnippetPerFile', 'chai', 'screenshotsOnError', 'captureAllStepScreenshots', 'saveScreenshotsToDisk', 'saveScreenshotsToReport', // - - - - SELENIUM - - - - - // - - - - WEBDRIVER-IO - - - - - // - - - - SESSION-MANAGER - - - - - 'noSessionReuse', // - - - - SIMIAN - - - - - // - - - - MOCHA - - - - - 'mocha', // - - - - METEOR - - - - - // - - - - DEBUGGING - - - - - 'debug'] -}); - -if (argv.host && (argv.host.indexOf('sauce') !== -1 || argv.host.indexOf('browserstack') !== -1 || argv.host.indexOf('testingbot') !== -1)) { - argv.noSessionReuse = true; -} - -if (argv.deviceName) { - argv.browser = ''; -} - -if (argv.v || argv.version) { - console.log(packageJson.version); - process.exit(); -} - -try { - if (!argv.port) { - freeport(function (error, port) { - if (error) { - throw error; - } - - argv.port = port; - startChimp(argv); - }); - } else { - startChimp(argv); - } -} catch (ex) { - process.stderr.write(ex.stack + '\n'); - exit(2); -} - -function startChimp(options) { - var chimp = new Chimp(options); - chimp.init(function (err) { - if (err) { - log.error(err); - log.debug('Error in chimp init', err); - } - - exit(err ? 2 : 0); - }); -} \ No newline at end of file diff --git a/dist/bin/default.js b/dist/bin/default.js deleted file mode 100644 index b791db4..0000000 --- a/dist/bin/default.js +++ /dev/null @@ -1,145 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _path = _interopRequireDefault(require("path")); - -var _ci = require("../lib/ci"); - -module.exports = { - // - - - - CHIMP - - - - - watch: false, - watchTags: '@watch,@focus', - domainSteps: null, - e2eSteps: null, - fullDomain: false, - domainOnly: false, - e2eTags: '@e2e', - watchWithPolling: false, - server: false, - serverPort: 8060, - serverHost: 'localhost', - sync: true, - offline: false, - showXolvioMessages: true, - 'fail-when-no-tests-run': false, - // - - - - CUCUMBER - - - - - path: './features', - format: 'pretty', - tags: '~@ignore', - singleSnippetPerFile: true, - recommendedFilenameSeparator: '_', - chai: false, - screenshotsOnError: (0, _ci.isCI)(), - screenshotsPath: '.screenshots', - captureAllStepScreenshots: false, - saveScreenshotsToDisk: true, - // Note: With a large viewport size and captureAllStepScreenshots enabled, - // you may run out of memory. Use browser.setViewportSize to make the - // viewport size smaller. - saveScreenshotsToReport: false, - jsonOutput: null, - compiler: 'js:' + _path["default"].resolve(__dirname, '../lib/babel-register.js'), - conditionOutput: true, - // - - - - SELENIUM - - - - - browser: null, - platform: 'ANY', - name: '', - user: '', - key: '', - port: null, - host: null, - // deviceName: null, - // - - - - WEBDRIVER-IO - - - - - webdriverio: { - desiredCapabilities: {}, - logLevel: 'silent', - // logOutput: null, - host: '127.0.0.1', - port: 4444, - path: '/wd/hub', - baseUrl: null, - coloredLogs: true, - screenshotPath: null, - waitforTimeout: 500, - waitforInterval: 250 - }, - // - - - - SELENIUM-STANDALONE - seleniumStandaloneOptions: { - // check for more recent versions of selenium here: - // http://selenium-release.storage.googleapis.com/index.html - version: '3.8.1', - baseURL: 'https://selenium-release.storage.googleapis.com', - drivers: { - chrome: { - // check for more recent versions of chrome driver here: - // http://chromedriver.storage.googleapis.com/index.html - version: require('../../package').dependencies.chromedriver.substring(1), - arch: process.arch, - baseURL: 'https://chromedriver.storage.googleapis.com' - }, - ie: { - // check for more recent versions of internet explorer driver here: - // http://selenium-release.storage.googleapis.com/index.html - version: '3.0.0', - arch: 'ia32', - baseURL: 'https://selenium-release.storage.googleapis.com' - }, - firefox: { - // check for more recent versions of gecko driver here: - // https://github.com/mozilla/geckodriver/releases - version: '0.19.1', - arch: process.arch, - baseURL: 'https://github.com/mozilla/geckodriver/releases/download' - } - } - }, - // - - - - SESSION-MANAGER - - - - - noSessionReuse: false, - // - - - - SIMIAN - - - - - simianResultEndPoint: 'api.simian.io/v1.0/result', - simianAccessToken: false, - simianResultBranch: null, - simianRepositoryId: null, - // - - - - MOCHA - - - - - mocha: false, - mochaCommandLineOptions: { - bail: true - }, - mochaConfig: { - // tags and grep only work when watch mode is false - tags: '', - grep: null, - timeout: 60000, - reporter: 'spec', - slow: 10000, - useColors: true - }, - // - - - - JASMINE - - - - - jasmine: false, - jasmineConfig: { - specDir: '.', - specFiles: ['**/*@(_spec|-spec|Spec).@(js|jsx)'], - helpers: ['support/**/*.@(js|jsx)'], - stopSpecOnExpectationFailure: false, - random: false - }, - jasmineReporterConfig: {// This options are passed to jasmine.configureDefaultReporter(...) - // See: http://jasmine.github.io/2.4/node.html#section-Reporters - }, - // - - - - METEOR - - - - - ddp: false, - serverExecuteTimeout: 10000, - // - - - - PHANTOM - - - - - phantom_w: 1280, - phantom_h: 1024, - phantom_ignoreSSLErrors: false, - // - - - - DEBUGGING - - - - - log: 'info', - debug: false, - seleniumDebug: null, - debugCucumber: null, - debugBrkCucumber: null, - debugMocha: null, - debugBrkMocha: null -}; \ No newline at end of file diff --git a/dist/lib/babel-register.js b/dist/lib/babel-register.js deleted file mode 100644 index 3a846ec..0000000 --- a/dist/lib/babel-register.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -require('@babel/register')({ - 'presets': ['@babel/env'] -}); - -require('@babel/polyfill'); \ No newline at end of file diff --git a/dist/lib/boolean-helper.js b/dist/lib/boolean-helper.js deleted file mode 100644 index 76b200d..0000000 --- a/dist/lib/boolean-helper.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; - -module.exports = { - isFalsey: isFalsey, - isTruthy: isTruthy -}; - -function isFalsey(variable) { - return !variable || variable === 'false' || variable === 'null' || variable === ''; -} - -function isTruthy(variable) { - return !isFalsey(variable); -} \ No newline at end of file diff --git a/dist/lib/browserstack-manager.js b/dist/lib/browserstack-manager.js deleted file mode 100644 index 6f4a487..0000000 --- a/dist/lib/browserstack-manager.js +++ /dev/null @@ -1,173 +0,0 @@ -"use strict"; - -var request = require('request'), - log = require('./log'), - _ = require('underscore'); -/** - * SessionManager Constructor - * - * @param {Object} options - * @api public - */ - - -function BrowserStackSessionManager(options) { - log.debug('[chimp][browserstack-session-manager] options are', options); - var host = options.host.replace(/hub\.|hub-cloud\./, 'api.'); - var browserStackBaseUrl = 'https://' + options.user + ':' + options.key + '@' + host; - options.browserStackUrl = browserStackBaseUrl; - this.options = options; - this.maxRetries = 30; - this.retryDelay = 3000; - this.retry = 0; // this will be set by the remote and multiremote methods from - // desiredCapabilities - - this.buildName = null; - log.debug('[chimp][browserstack-session-manager] created a new SessionManager', options); -} - -BrowserStackSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); -/** - * Wraps the webdriver remote method and allows reuse options - * - * @api public - */ - -BrowserStackSessionManager.prototype.remote = function (webdriverOptions, callback) { - var self = this; - log.debug('[chimp][browserstack-session-manager] creating webdriver remote '); - var browser = this.webdriver.remote(webdriverOptions); - this.buildName = webdriverOptions.desiredCapabilities.build; - log.debug('[chimp][browserstack-session-manager] BuildName: ' + this.buildName); - callback(null, browser); - return; -}; -/** - * Wraps the webdriver multiremote method and allows reuse options - * - * @api public - */ - - -BrowserStackSessionManager.prototype.multiremote = function (webdriverOptions, callback) { - log.debug('[chimp][browserstack-session-manager] creating webdriver remote '); - var browser = this.webdriver.multiremote(webdriverOptions); - this.buildName = webdriverOptions['browser0'].desiredCapabilities.build; - log.debug('[chimp][browserstack-session-manager] BuildName: ' + this.buildName); - callback(null, browser); - return; -}; -/** - * Gets a list of builds from the BrowserStack API as sessions must be queried based on Builds - * - * @api private - */ - - -BrowserStackSessionManager.prototype._getBuilds = function (callback) { - var hub = this.options.browserStackUrl + '/automate/builds.json?status=running'; - log.debug('[chimp][browserstack-session-manager]', 'requesting builds from', hub); - request(hub, function (error, response, body) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][browserstack-session-manager]', 'received data', body); - callback(null, JSON.parse(body)); - } else { - log.error('[chimp][browserstack-session-manager]', 'received error', error); - callback(error); - } - }); -}; -/** - * Gets a list of sessions from the BrowserStack API based on Build ID - * - * @api private - */ - - -BrowserStackSessionManager.prototype._getSessions = function (buildId, callback) { - var hub = this.options.browserStackUrl + '/automate/builds/' + buildId + '/sessions.json?status=running'; - log.debug('[chimp][browserstack-session-manager]', 'requesting sessions from', hub); - request(hub, function (error, response, body) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][browserstack-session-manager]', 'received data', body); - callback(null, JSON.parse(body)); - } else { - log.error('[chimp][browserstack-session-manager]', 'received error', error); - callback(error); - } - }); -}; -/** - * Kills all sessions in the matching running build found on - * BrowserStack. - * - * If 'build' is specified in the desiredCapabilities, it will find a - * running build with the specified build name, else it will consider - * the first running build. When using multiremote, it's important to - * to specify a unique 'build' in desiredCapabilities so that all and - * only those sessions created by the current build are killed. - * - * @api public - */ - - -BrowserStackSessionManager.prototype.killCurrentSession = function (callback) { - var self = this; - var wdOptions = this.options; - var wdHubSession = 'http://' + wdOptions.host + ':' + wdOptions.port + '/wd/hub/session'; - - var killSession = function killSession(session) { - request.del(wdHubSession + '/' + session.automation_session.hashed_id, function (wdError, wdResponse) { - if (!wdError && wdResponse.statusCode === 200) { - var options = { - url: wdOptions.browserStackUrl + '/automate/sessions/' + session.automation_session.hashed_id + '.json', - method: 'PUT', - json: true, - body: { - status: 'completed' - } - }; - request(options, function (error, response) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][browserstack-session-manager]', 'stopped session'); - callback(); - } else { - log.error('[chimp][browserstack-session-manager]', 'received error', error); - callback(error); - } - }); - } else { - log.error('[chimp][browserstack-session-manager]', 'received error', wdError); - callback(wdError); - } - }); - }; - - var findBuild = function findBuild(builds) { - if (self.buildName) { - return _.find(builds, function (b) { - return b.automation_build.name === self.buildName; - }); - } else { - return builds[0]; - } - }; - - this._getBuilds(function (err, builds) { - if (builds && builds.length) { - var build = findBuild(builds); - log.debug('[chimp][browserstack-session-manager]', builds, build); - var buildId = build.automation_build.hashed_id; - } - - if (buildId !== '') { - self._getSessions(buildId, function (err, sessions) { - if (sessions && sessions.length) { - sessions.forEach(killSession); - } - }); - } - }); -}; - -module.exports = BrowserStackSessionManager; \ No newline at end of file diff --git a/dist/lib/chimp-helper.js b/dist/lib/chimp-helper.js deleted file mode 100644 index e38d67e..0000000 --- a/dist/lib/chimp-helper.js +++ /dev/null @@ -1,282 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _deepExtend = _interopRequireDefault(require("deep-extend")); - -var _environmentVariableParsers = require("./environment-variable-parsers"); - -var chai = require('chai'), - chaiAsPromised = require('chai-as-promised'), - log = require('./log'), - DDP = require('./ddp'), - request = require('request'), - Promise = require('bluebird'), - _ = require('underscore'), - wrapAsync = require('xolvio-sync-webdriverio').wrapAsync, - wrapAsyncObject = require('xolvio-sync-webdriverio').wrapAsyncObject, - SessionFactory = require('./session-factory'), - path = require('path'), - colors = require('colors'), - fs = require('fs-extra'), - exit = require('exit'), - booleanHelper = require('./boolean-helper'); - -var chimpHelper = { - loadAssertionLibrary: function loadAssertionLibrary() { - if (booleanHelper.isTruthy(process.env['chimp.chai'])) { - log.debug('[chimp][helper] Using the chai-expect assertion library'); - chai.use(chaiAsPromised); - chai.should(); // give users access to the chai instance - - global.chai = chai; - global.expect = chai.expect; - global.assert = chai.assert; - } else { - log.debug('[chimp][helper] Using the jasmine-expect assertion library'); - global.expect = require('xolvio-jasmine-expect').expect; - } - }, - setupGlobals: function setupGlobals() { - global.wrapAsync = wrapAsync; - global.wrapAsyncObject = wrapAsyncObject; // give users access the request module - - global.request = request; - - _.extend(global, wrapAsyncObject(global, ['request'], { - syncByDefault: booleanHelper.isTruthy(process.env['chimp.sync']) - })); // Give the user access to Promise functions. E.g. Promise.all. - - - global.Promise = Promise; - - if (booleanHelper.isTruthy(process.env['chimp.ddp0'])) { - // add .instances[] property onto the DDP object. this way - // global.server is usable, but so is server.instances[0] as an alias for when using multiple ddp servers - global.ddp = new DDP(process.env['chimp.ddp0']).connect(); // add on instances t - - global.ddp.instances = []; - - for (var key in process.env) { - if (key.indexOf('chimp.ddp') !== -1) { - var index = key.match(/chimp.ddp(.*)/)[1]; - - if (index) { - global.ddp.instances.push(new DDP(process.env['chimp.ddp' + index]).connect()); - } - } - } - } - }, - createGlobalAliases: function createGlobalAliases() { - global.driver = global.browser; - global.client = global.browser; - global.mirror = global.ddp; - global.server = global.ddp; - }, - setupBrowserAndDDP: function setupBrowserAndDDP() { - var setupBrowser = function setupBrowser() { - log.debug('[chimp][helper] getting browser'); - var webdriverioConfigOptions = JSON.parse(process.env['chimp.webdriverio']); - var webdriverioOptions = (0, _deepExtend["default"])(webdriverioConfigOptions, { - desiredCapabilities: { - browserName: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.browser']), - platform: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.platform']), - name: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.name']), - version: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.browserVersion']), - deviceName: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.deviceName']) - }, - user: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.user'] || process.env.SAUCE_USERNAME), - key: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.key'] || process.env.SAUCE_ACCESS_KEY), - host: (0, _environmentVariableParsers.parseNullableString)(process.env['chimp.host']), - port: (0, _environmentVariableParsers.parseNullableInteger)(process.env['chimp.port']), - logLevel: booleanHelper.isTruthy(process.env['chimp.debug']) ? 'verbose' : webdriverioConfigOptions.logLevel, - sync: (0, _environmentVariableParsers.parseBoolean)(process.env['chimp.sync']) - }); - global.sessionManager = new SessionFactory(Object.assign(_.pick(webdriverioOptions, 'host', 'port', 'user', 'key'), { - browser: webdriverioOptions.desiredCapabilities.browserName, - deviceName: webdriverioOptions.desiredCapabilities.deviceName - })); - - if (booleanHelper.isTruthy(process.env['chimp.watch'])) { - webdriverioOptions.desiredCapabilities.applicationCacheEnabled = false; - } - - log.debug('[chimp][helper] webdriverioOptions are ', JSON.stringify(webdriverioOptions)); - var remoteSession; - - if ((0, _environmentVariableParsers.parseNullableInteger)(process.env['CUCUMBER_BROWSERS'])) { - var options = _.clone(webdriverioOptions); - - options.multiBrowser = true; - var multiremoteWebdriverIoOptions = {}; - - var _browsersTotal = (0, _environmentVariableParsers.parseNullableInteger)(process.env['CUCUMBER_BROWSERS']); - - for (var _browserIndex = 0; _browserIndex < _browsersTotal; _browserIndex++) { - multiremoteWebdriverIoOptions['browser' + _browserIndex] = _.clone(options); - } - - remoteSession = wrapAsync(global.sessionManager.multiremote, global.sessionManager); - global.browser = remoteSession(multiremoteWebdriverIoOptions); - } else { - remoteSession = wrapAsync(global.sessionManager.remote, global.sessionManager); - global.browser = remoteSession(webdriverioOptions); - } - - global.browser.options = webdriverioOptions; - chaiAsPromised.transferPromiseness = global.browser.transferPromiseness; - }; - - var initSingleBrowser = function initSingleBrowser(browser) { - log.debug('[chimp][helper] init browser'); - log.debug('[chimp][helper] init browser callback'); - browser.screenshotsCount = 0; - browser.addCommand('capture', function (name, screenshotsPathPrefix) { - var screenshotsCountForFileName = "".concat(browser.screenshotsCount++, "_"); - var fileName = name.replace(/[ \\~#%&*{}/:<>?|"-]/g, '_'); - var fileExtension = '.png'; - var suggestedFileNameLength = screenshotsCountForFileName.length + fileName.length + fileExtension.length; - - if (suggestedFileNameLength > 255) { - var numberOfCharactersToLeave = fileName.length - (suggestedFileNameLength - 255); - fileName = fileName.substr(0, numberOfCharactersToLeave); - } - - var fullFileName = "".concat(screenshotsCountForFileName).concat(fileName).concat(fileExtension); - var screenshotsPath = process.env['chimp.screenshotsPath']; - - if (screenshotsPathPrefix) { - screenshotsPath = path.join(screenshotsPathPrefix, screenshotsPath); - } - - fs.mkdirsSync(screenshotsPath); - var ssPath = path.join(screenshotsPath, fullFileName); - log.debug('[chimp][helper] saving screenshot to', ssPath); - this.saveScreenshot(ssPath, false); - log.debug('[chimp][helper] saved screenshot to', ssPath); - }); - - if (process.env['chimp.browser'] === 'phantomjs') { - browser.setViewportSizeSync({ - width: process.env['chimp.phantom_w'] ? parseInt(process.env['chimp.phantom_w']) : 1280, - height: process.env['chimp.phantom_h'] ? parseInt(process.env['chimp.phantom_h']) : 1024 - }); - } - }; - - var initBrowser = function initBrowser() { - log.debug('[chimp][hooks] init browser'); - var browser = global.browser; - log.debug('[chimp][hooks] init browser callback'); - - if (browser.instances) { - browser.instances.forEach(function (singleBrowser) { - var desiredCapabilities = singleBrowser.initSync(); - singleBrowser.desiredCapabilities = desiredCapabilities; - initSingleBrowser(singleBrowser); - }); - } else { - var desiredCapabilities = browser.initSync(); - browser.desiredCapabilities = desiredCapabilities; - initSingleBrowser(browser); - } - }; - - var addServerExecute = function addServerExecute(ddpInstance) { - ddpInstance.execute = function (func) { - var args = Array.prototype.slice.call(arguments, 1); - var result; - var timeout = parseInt(process.env['chimp.serverExecuteTimeout']) || 10000; - setTimeout(function () { - if (!result) { - throw new Error('[chimp] server.execute timeout after ' + timeout + 'ms'); - } - }, timeout); - - try { - result = ddpInstance.call('xolvio/backdoor', func.toString(), args); - } catch (exception) { - if (exception.error === 404) { - throw new Error('[chimp] You need to install xolvio:backdoor in your meteor app before you can use server.execute()'); - } else { - throw exception; - } - } - - if (result.error) { - var error = new Error('Error in server.execute' + result.error.message); - error.stack += '\n' + result.error.stack.replace(/ {4}at/g, ' @'); - throw error; - } else { - return result.value; - } - }; - }; - - var setupDdp = function setupDdp() { - log.debug('[chimp][helper] setup DDP'); - - if (process.env['chimp.ddp0']) { - try { - log.debug('[chimp][helper] connecting via DDP to', process.env['chimp.ddp0']); - global.ddp.connectSync(); - addServerExecute(global.ddp); - - for (var i = 0; i < global.ddp.instances.length; i++) { - log.debug('[chimp][helper] connecting via DDP to ' + global.ddp.instances[i]._original.host + ':' + global.ddp.instances[i]._original.port); - global.ddp.instances[i].connectSync(); - addServerExecute(global.ddp.instances[i]); - } - - log.debug('[chimp][helper] connecting via DDP had no error'); - } catch (error) { - var errorMessage = error; - - if (_.isObject(error)) { - if (error.code === 'ECONNREFUSED') { - log.error('[chimp][helper] Cannot connect to Meteor. Please check if your application is up and running on ' + error.address + ' port ' + error.port); - } - - errorMessage = error.code; - } - - log.error('[chimp][helper] connecting via DDP error', errorMessage); - global.browser.endSync(); - process.exit(1); - } - } else { - var noDdp = function noDdp() { - expect('DDP Not Connected').to.equal('', 'You tried to use a DDP connection but it' + ' has not been configured. Be sure to pass --ddp='); - }; - - global.ddp0 = { - call: noDdp, - apply: noDdp, - execute: noDdp - }; - log.debug('[chimp][helper] DDP not required'); - } - }; - - try { - setupBrowser(); - initBrowser(); - - if (booleanHelper.isTruthy(process.env['chimp.ddp0'])) { - setupDdp(); - } - } catch (error) { - log.error('[chimp][helper] setupBrowserAndDDP had error'); - log.error(error); - log.error(error.stack); - exit(2); - } - }, - init: function init() { - this.setupGlobals(); - this.createGlobalAliases(); - } -}; -global.chimpHelper = chimpHelper; -module.exports = chimpHelper; \ No newline at end of file diff --git a/dist/lib/chimp-spec.js b/dist/lib/chimp-spec.js deleted file mode 100644 index 401c802..0000000 --- a/dist/lib/chimp-spec.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -var Chimp = require('./chimp'); - -describe('Chimp', function () { - before(function () { - var emptyFn = function emptyFn() {}; - - td.replace('async', {}); - td.replace('path', { - resolve: emptyFn, - join: emptyFn - }); - td.replace('chokidar', {}); - td.replace('underscore', {}); - td.replace('./log', {}); - td.replace('freeport', {}); - td.replace('xolvio-ddp', {}); - td.replace('hapi', {}); - td.replace('./ddp-watcher', {}); - td.replace('colors', {}); - td.replace('./boolean-helper', {}); - td.replace('./mocha/mocha.js', {}); - td.replace('./jasmine/jasmine.js', {}); - td.replace('./cucumberjs/cucumber.js', {}); - td.replace('./phantom.js', {}); - td.replace('./chromedriver.js', {}); - td.replace('./consoler.js', {}); - td.replace('./selenium.js', {}); - td.replace('./simian-reporter.js', {}); - }); - describe('constructor', function () { - beforeEach(function () { - this.chimp = new Chimp(); - }); - it('should create a new instance', function () { - expect(this.chimp).not.to.equal(null); - }); - it('should initialize a processes array', function () { - expect(this.chimp.processes).to.be["instanceof"](Array); - }); - it('should initialize an options object if no options are provided', function () { - expect(this.chimp.options).to.be.instanceOf(Object); - }); - it('should store the options object if provided', function () { - var myOptions = {}; - var chimp = new Chimp(myOptions); - expect(chimp.options).to.equal(myOptions); - }); - it('should store all the provided options on the environment hash prefixed with [chimp.]', function () { - var myOptions = { - a: 1, - b: 'aString' - }; - var chimp = new Chimp(myOptions); - expect(process.env['chimp.a']).to.equal(myOptions.a.toString()); - expect(process.env['chimp.b']).to.equal(myOptions.b); - }); - it('puts single ddp option on the environment hash as [chimp.ddp0] if only one provided', function () { - var myOptions = { - ddp: 'http://host:port' - }; - var chimp = new Chimp(myOptions); - expect(process.env['chimp.ddp0']).to.equal(myOptions.ddp.toString()); - expect(process.env['chimp.ddp1']).to.be.undefined; - }); - it('puts multiple ddp options on the environment hash as [chimp.ddpX] if multiple provided', function () { - var myOptions = { - ddp: ['http://host:port1', 'http://host:port2'] - }; - var chimp = new Chimp(myOptions); - expect(process.env['chimp.ddp0']).to.equal(myOptions.ddp[0].toString()); - expect(process.env['chimp.ddp1']).to.equal(myOptions.ddp[1].toString()); - }); - }); -}); \ No newline at end of file diff --git a/dist/lib/chimp.js b/dist/lib/chimp.js deleted file mode 100644 index 5270506..0000000 --- a/dist/lib/chimp.js +++ /dev/null @@ -1,706 +0,0 @@ -"use strict"; - -/** - * Externals - */ -var async = require('async'), - path = require('path'), - chokidar = require('chokidar'), - _ = require('underscore'), - log = require('./log'), - freeport = require('freeport'), - DDPClient = require('xolvio-ddp'), - fs = require('fs'), - Hapi = require('hapi'), - AutoupdateWatcher = require('./ddp-watcher'), - colors = require('colors'), - booleanHelper = require('./boolean-helper'), - Versions = require('../lib/versions'); - -colors.enabled = true; -var DEFAULT_COLOR = 'yellow'; -/** - * Internals - */ - -exports.Mocha = require('./mocha/mocha.js'); -exports.Jasmine = require('./jasmine/jasmine.js'); -exports.Cucumber = require('./cucumberjs/cucumber.js'); -exports.Phantom = require('./phantom.js'); -exports.Chromedriver = require('./chromedriver.js'); -exports.Consoler = require('./consoler.js'); -exports.Selenium = require('./selenium.js'); -exports.SimianReporter = require('./simian-reporter.js'); -/** - * Exposes the binary path - * - * @api public - */ - -Chimp.bin = path.resolve(__dirname, path.join('..', 'bin', 'chimp')); - -Chimp.install = function (callback) { - log.debug('[chimp]', 'Installing dependencies'); - new exports.Selenium({ - port: '1' - }).install(callback); -}; -/** - * Chimp Constructor - * - * Options: - * - `browser` browser to run tests in - * - * @param {Object} options - * @api public - */ - - -function Chimp(options) { - this.chokidar = chokidar; - this.options = options || {}; - this.processes = []; - this.isInterrupting = false; - this.exec = require('child_process').exec; - this.fs = fs; - this.testRunnerRunOrder = []; - this.watcher = undefined; // store all cli parameters in env hash - // Note: Environment variables are always strings. - - for (var option in options) { - if (option === 'ddp') { - handleDdpOption(options); - } else { - process.env['chimp.' + option] = _.isObject(options[option]) ? JSON.stringify(options[option]) : String(options[option]); - } - } - - this._handleChimpInterrupt(); -} - -function handleDdpOption(options) { - if (typeof options.ddp === 'string') { - process.env['chimp.ddp0'] = String(options.ddp); - return; - } - - if (Array.isArray(options.ddp)) { - options.ddp.forEach(function (val, index) { - process.env['chimp.ddp' + index] = String(val); - }); - } -} -/** - * Runs an npm install then calls selectMode - * - * @param {Function} callback - * @api public - */ - - -Chimp.prototype.init = function (callback) { - var self = this; - this.informUser(); - - try { - this._initSimianResultBranch(); - - this._initSimianBuildNumber(); - } catch (error) { - callback(error); - return; - } - - if (this.options.versions || this.options.debug) { - var versions = new Versions(this.options); - - if (this.options.debug) { - versions.show(function () { - self.selectMode(callback); - }); - } else { - versions.show(); - } - } else { - self.selectMode(callback); - } -}; - -Chimp.prototype.informUser = function () { - if (this.options.showXolvioMessages) { - log.info('\nMaster Chimp and become a testing Ninja! Check out our course: '.green + 'http://bit.ly/2btQaFu\n'.blue.underline); - } - - if (booleanHelper.isTruthy(this.options.criticalSteps)) { - this.options.e2eSteps = this.options.criticalSteps; - log.warn('[chimp] Please use e2eSteps instead of criticalSteps. criticalSteps is now deprecated.'.red); - } - - if (booleanHelper.isTruthy(this.options.criticalTag)) { - this.options.e2eTags = this.options.criticalTag; - log.warn('[chimp] Please use e2eTags instead of criticalTag. criticalTag is now deprecated.'.red); - } - - if (booleanHelper.isTruthy(this.options.mochaTags) || booleanHelper.isTruthy(this.options.mochaGrep) || booleanHelper.isTruthy(this.options.mochaTimeout) || booleanHelper.isTruthy(this.options.mochaReporter) || booleanHelper.isTruthy(this.options.mochaSlow)) { - log.warn('[chimp] mochaXYZ style configs are now deprecated. Please use a mochaConfig object.'.red); - } -}; - -Chimp.prototype._initSimianResultBranch = function () { - // Automatically set the result branch for the common CI tools - if (this.options.simianAccessToken && this.options.simianResultBranch === null) { - if (booleanHelper.isTruthy(process.env.CI_BRANCH)) { - // Codeship or custom - this.options.simianResultBranch = process.env.CI_BRANCH; - } else if (booleanHelper.isTruthy(process.env.CIRCLE_BRANCH)) { - // CircleCI - this.options.simianResultBranch = process.env.CIRCLE_BRANCH; - } else if (booleanHelper.isTruthy(process.env.TRAVIS_BRANCH)) { - // TravisCI - if (booleanHelper.isFalsey(process.env.TRAVIS_PULL_REQUEST)) { - this.options.simianResultBranch = process.env.TRAVIS_BRANCH; - } else { - // Ignore the builds that simulate the pull request merge, - // because the branch will be the target branch. - this.options.simianResultBranch = false; - } - } else { - throw new Error('You have not specified the branch that should be reported to Simian!' + ' Do this with the --simianResultBranch argument' + ' or the CI_BRANCH environment variable.'); - } - } -}; - -Chimp.prototype._initSimianBuildNumber = function _initSimianBuildNumber() { - // Automatically set the result branch for the common CI tools - if (this.options.simianAccessToken) { - if (process.env.CI_BUILD_NUMBER) { - // Codeship or custom - this.options.simianBuildNumber = process.env.CI_BUILD_NUMBER; - } else if (process.env.CIRCLE_BUILD_NUM) { - // CircleCI - this.options.simianBuildNumber = process.env.CIRCLE_BUILD_NUM; - } else if (process.env.TRAVIS_BUILD_NUMBER) { - // TravisCI - this.options.simianBuildNumber = process.env.TRAVIS_BUILD_NUMBER; - } - } -}; -/** - * Decides which mode to run and kicks it off - * - * @param {Function} callback - * @api public - */ - - -Chimp.prototype.selectMode = function (callback) { - if (booleanHelper.isTruthy(this.options.watch)) { - this.watch(); - } else if (booleanHelper.isTruthy(this.options.server)) { - this.server(); - } else { - this.run(callback); - } -}; -/** - * Watches the file system for changes and reruns when it detects them - * - * @api public - */ - - -Chimp.prototype.watch = function () { - var self = this; - var watchDirectories = []; - - if (self.options.watchSource) { - watchDirectories = self.options.watchSource.split(','); - } - - if (self.options.e2eSteps) { - watchDirectories.push(self.options.e2eSteps); - } - - if (self.options.domainSteps) { - watchDirectories.push(self.options.domainSteps); - } - - watchDirectories.push(self.options.path); - this.watcher = chokidar.watch(watchDirectories, { - ignored: /[\/\\](\.|node_modules)/, - ignoreInitial: true, - persistent: true, - usePolling: this.options.watchWithPolling - }); // set cucumber tags to be watch based - - if (booleanHelper.isTruthy(self.options.watchTags)) { - self.options.tags = self.options.watchTags; - } - - if (booleanHelper.isTruthy(self.options.ddp)) { - var autoUpdateWatcher = new AutoupdateWatcher(self.options); - autoUpdateWatcher.watch(function () { - log.debug('[chimp] Meteor autoupdate detected'); - self.rerun(); - }); - } // wait for initial file scan to complete - - - this.watcher.once('ready', function () { - var watched = []; - - if (_.isArray(self.options.watchTags)) { - _.each(self.options.watchTags, function (watchTag) { - watched.push(watchTag.split(',')); - }); - } else if (_.isString(self.options.watchTags)) { - watched.push(self.options.watchTags.split(',')); - } - - log.info("[chimp] Watching features with tagged with ".concat(watched.join()).white); // start watching - - self.watcher.on('all', self._getDebouncedFunction(function (event, path) { - // removing feature files should not rerun - if (event === 'unlink' && path.match(/\.feature$/)) { - return; - } - - log.debug('[chimp] file changed'); - self.rerun(); - }, 500)); - log.debug('[chimp] watcher ready, running for the first time'); - self.rerun(); - }); -}; - -Chimp.prototype._getDebouncedFunction = function (func, timeout) { - return _.debounce(func, timeout); -}; -/** - * Starts a chimp server on a freeport or on options.serverPort if provided - * - * @api public - */ - - -Chimp.prototype.server = function () { - var self = this; - - if (!this.options.serverPort) { - freeport(function (error, port) { - if (error) { - throw error; - } - - self._startServer(port); - }); - } else { - self._startServer(this.options.serverPort); - } -}; - -Chimp.prototype._startServer = function (port) { - var server = new Hapi.Server(); - server.connection({ - host: this.options.serverHost, - port: port, - routes: { - timeout: { - server: false, - socket: false - } - } - }); - - this._setupRoutes(server); - - server.start(); - log.info('[chimp] Chimp server is running on port', port, process.env['chimp.ddp']); - - if (booleanHelper.isTruthy(this.options.ddp)) { - this._handshakeOverDDP(); - } -}; - -Chimp.prototype._handshakeOverDDP = function () { - var ddp = new DDPClient({ - host: process.env['chimp.ddp'].match(/http:\/\/(.*):/)[1], - port: process.env['chimp.ddp'].match(/:([0-9]+)/)[1], - ssl: false, - autoReconnect: true, - autoReconnectTimer: 500, - maintainCollections: true, - ddpVersion: '1', - useSockJs: true - }); - ddp.connect(function (error) { - if (error) { - log.error('[chimp] Error handshaking via DDP'); - throw error; - } - }).then(function () { - log.debug('[chimp] Handshaking with DDP server'); - ddp.call('handshake').then(function () { - log.debug('[chimp] Handshake complete, closing DDP connection'); - ddp.close(); - }); - }); -}; - -Chimp.prototype._parseResult = function (res) { - // FIXME this is shitty, there's got to be a nicer way to deal with variable async chains - var cucumberResults = res[1][1] ? res[1][1] : res[1][0]; - - if (!cucumberResults) { - log.error('[chimp] Could not get Cucumber Results from run result:'); - log.error(res); - } - - log.debug('[chimp] Responding to /run request with:'); - log.debug(cucumberResults); - return cucumberResults; -}; - -Chimp.prototype._setupRoutes = function (server) { - var self = this; - server.route({ - method: 'GET', - path: '/run', - handler: function handler(request, reply) { - self.rerun(function (err, res) { - var cucumberResults = self._parseResult(res); - - reply(cucumberResults).header('Content-Type', 'application/json'); - }); - } - }); - server.route({ - method: 'GET', - path: '/run/{absolutePath*}', - handler: function handler(request, reply) { - /// XXX is there a more elegant way we can do this? - self.options._[2] = request.params.absolutePath; - self.rerun(function (err, res) { - var cucumberResults = self._parseResult(res); - - reply(cucumberResults).header('Content-Type', 'application/json'); - }); - } - }); - server.route({ - method: 'GET', - path: '/interrupt', - handler: function handler(request, reply) { - self.interrupt(function (err, res) { - reply('done').header('Content-Type', 'application/json'); - }); - } - }); - server.route({ - method: 'GET', - path: '/runAll', - handler: function handler(request, reply) { - self.options._tags = self.options.tags; - self.options.tags = '~@ignore'; - self.rerun(function (err, res) { - self.options.tags = self.options._tags; - - var cucumberResults = self._parseResult(res); - - reply(cucumberResults).header('Content-Type', 'application/json'); - }); - } - }); -}; -/** - * Starts servers and runs specs - * - * @api public - */ - - -Chimp.prototype.run = function (callback) { - log.info("\n[chimp] Running..."[DEFAULT_COLOR]); - var self = this; - - function getJsonCucumberResults(result) { - var startProcessesIndex = 1; - - if (!result || !result[startProcessesIndex]) { - return []; - } - - var jsonResult = '[]'; - - _.any(['domain', 'e2e', 'generic'], function (type) { - var _testRunner = _.findWhere(self.testRunnerRunOrder, { - name: 'cucumber', - type: type - }); - - if (_testRunner) { - jsonResult = result[startProcessesIndex][_testRunner.index]; - return true; - } - }); - - return JSON.parse(jsonResult); - } - - async.series([self.interrupt.bind(self), self._startProcesses.bind(self), self.interrupt.bind(self)], function (error, result) { - if (error) { - log.debug('[chimp] run complete with errors', error); - - if (booleanHelper.isFalsey(self.options.watch)) { - self.interrupt(function () {}); - } - } else { - log.debug('[chimp] run complete'); - } - - if (self.options.simianAccessToken && self.options.simianResultBranch !== false) { - var jsonCucumberResult = getJsonCucumberResults(result); - var simianReporter = new exports.SimianReporter(self.options); - simianReporter.report(jsonCucumberResult, function () { - callback(error, result); - }); - } else { - callback(error, result); - } - }); -}; -/** - * Interrupts any running specs in the reverse order. This allows cucumber to shut down first - * before webdriver servers, otherwise we can get test errors in the console - * - * @api public - */ - - -Chimp.prototype.interrupt = function (callback) { - log.debug('[chimp] interrupting'); - var self = this; - self.isInterrupting = true; - - if (!self.processes || self.processes.length === 0) { - self.isInterrupting = false; - log.debug('[chimp] no processes to interrupt'); - - if (callback) { - callback(); - } - - return; - } - - log.debug('[chimp]', self.processes.length, 'processes to interrupt'); - var reverseProcesses = []; - - while (self.processes.length !== 0) { - reverseProcesses.push(self.processes.pop()); - } - - var processes = _.collect(reverseProcesses, function (process) { - return process.interrupt.bind(process); - }); - - async.series(processes, function (error, r) { - self.isInterrupting = false; - log.debug('[chimp] Finished interrupting processes'); - - if (error) { - log.error('[chimp] with errors', error); - } - - if (callback) { - callback.apply(this, arguments); - } - }); -}; -/** - * Combines the interrupt and run methods and latches calls - * - * @api public - */ - - -Chimp.prototype.rerun = function (callback) { - log.debug('[chimp] rerunning'); - var self = this; - - if (self.isInterrupting) { - log.debug('[chimp] interrupt in progress, ignoring rerun'); - return; - } - - self.run(function (err, res) { - if (callback) { - callback(err, res); - } - - log.debug('[chimp] finished rerun'); - }); -}; -/** - * Starts processes in series - * - * @api private - */ - - -Chimp.prototype._startProcesses = function (callback) { - var self = this; - self.processes = self._createProcesses(); - - var processes = _.collect(self.processes, function (process) { - return process.start.bind(process); - }); // pushing at least one processes guarantees the series below runs - - - processes.push(function (callback) { - log.debug('[chimp] Finished running async processes'); - callback(); - }); - async.series(processes, function (err, res) { - if (err) { - self.isInterrupting = false; - log.debug('[chimp] Finished running async processes with errors'); - } - - callback(err, res); - }); -}; -/** - * Creates the correct sequence of servers needed prior to running cucumber - * - * @api private - */ - - -Chimp.prototype._createProcesses = function () { - var processes = []; - var self = this; - - var addTestRunnerToRunOrder = function addTestRunnerToRunOrder(name, type) { - self.testRunnerRunOrder.push({ - name: name, - type: type, - index: processes.length - 1 - }); - }; - - var userHasNotProvidedSeleniumHost = function userHasNotProvidedSeleniumHost() { - return booleanHelper.isFalsey(self.options.host); - }; - - var userHasProvidedBrowser = function userHasProvidedBrowser() { - return booleanHelper.isTruthy(self.options.browser); - }; - - if (!this.options.domainOnly) { - if (this.options.browser === 'phantomjs') { - process.env['chimp.host'] = this.options.host = 'localhost'; - var phantom = new exports.Phantom(this.options); - processes.push(phantom); - } else if (userHasProvidedBrowser() && userHasNotProvidedSeleniumHost()) { - process.env['chimp.host'] = this.options.host = 'localhost'; - var selenium = new exports.Selenium(this.options); - processes.push(selenium); - } else if (userHasNotProvidedSeleniumHost()) { - // rewrite the browser to be chrome since "chromedriver" is not a valid browser - process.env['chimp.browser'] = this.options.browser = 'chrome'; - process.env['chimp.host'] = this.options.host = 'localhost'; - var chromedriver = new exports.Chromedriver(this.options); - processes.push(chromedriver); - } - } - - if (booleanHelper.isTruthy(this.options.mocha)) { - var mocha = new exports.Mocha(this.options); - processes.push(mocha); - } else if (booleanHelper.isTruthy(this.options.jasmine)) { - var jasmine = new exports.Jasmine(this.options); - processes.push(jasmine); - } else { - if (booleanHelper.isTruthy(this.options.e2eSteps) || booleanHelper.isTruthy(this.options.domainSteps)) { - // domain scenarios - if (booleanHelper.isTruthy(this.options.domainSteps)) { - var options = JSON.parse(JSON.stringify(this.options)); - - if (options.r) { - options.r = _.isArray(options.r) ? options.r : [options.r]; - } else { - options.r = []; - } - - var message = '\n[chimp] domain scenarios...'; - options.r.push(options.domainSteps); - - if (booleanHelper.isTruthy(options.fullDomain)) { - delete options.tags; - } - - if (!this.options.domainOnly) { - processes.push(new exports.Consoler(message[DEFAULT_COLOR])); - } - - processes.push(new exports.Cucumber(options)); - addTestRunnerToRunOrder('cucumber', 'domain'); - processes.push(new exports.Consoler('')); - } - - if (booleanHelper.isTruthy(this.options.e2eSteps)) { - // e2e scenarios - var _options = JSON.parse(JSON.stringify(this.options)); - - if (_options.r) { - _options.r = _.isArray(_options.r) ? _options.r : [_options.r]; - } else { - _options.r = []; - } - - _options.tags = _options.tags.split(','); - - _options.tags.push(_options.e2eTags); - - _options.tags = _options.tags.join(); - - var _message = "\n[chimp] ".concat(_options.e2eTags, " scenarios ..."); - - _options.r.push(_options.e2eSteps); - - processes.push(new exports.Consoler(_message[DEFAULT_COLOR])); - processes.push(new exports.Cucumber(_options)); - addTestRunnerToRunOrder('cucumber', 'e2e'); - processes.push(new exports.Consoler('')); - } - } else { - var cucumber = new exports.Cucumber(this.options); - processes.push(cucumber); - addTestRunnerToRunOrder('cucumber', 'generic'); - } - } - - return processes; -}; -/** - * Uses process.kill wen interrupted by Meteor so that Selenium shuts down correctly for node 0.10.x - * - * @api private - */ - - -Chimp.prototype._handleChimpInterrupt = function () { - var self = this; - process.on('SIGINT', function () { - log.debug('[chimp] SIGINT detected, killing process'); - process.stdin.end(); - self.interrupt(); - - if (booleanHelper.isTruthy(self.options.watch)) { - self.watcher.close(); - } - }); -}; - -module.exports = Chimp; \ No newline at end of file diff --git a/dist/lib/chromedriver.js b/dist/lib/chromedriver.js deleted file mode 100644 index 3f879bf..0000000 --- a/dist/lib/chromedriver.js +++ /dev/null @@ -1,103 +0,0 @@ -"use strict"; - -var chromedriver = require('chromedriver'), - processHelper = require('./process-helper.js'), - fs = require('fs'), - log = require('./log'); -/** - * Chromedriver Constructor - * - * @param {Object} options - * @api public - */ - - -function Chromedriver(options) { - if (!options) { - throw new Error('options is required'); - } - - if (!options.port) { - throw new Error('options.port is required'); - } - - this.options = options; - this.child = null; -} -/** - * Start Chromedriver - * - * @param {Function} callback - * @api public - */ - - -Chromedriver.prototype.start = function (callback) { - var self = this; - var port = self.options.port; - - if (this.child) { - callback(); - return; - } - - var chromedriverPath = chromedriver.path; - - if (fs.existsSync(chromedriverPath)) { - this.child = processHelper.start({ - bin: chromedriverPath, - prefix: 'chromedriver', - args: ['--port=' + port, '--url-base=wd/hub'], - waitForMessage: /Starting ChromeDriver/, - errorMessage: /Error/ - }, callback); - } else { - callback('[chimp][chromedriver] Chromedriver executable not found.'); - } -}; -/** - * Stop Chromedriver - * - * @param {Function} callback - * @api public - */ - - -Chromedriver.prototype.stop = function (callback) { - var self = this; - - if (self.child) { - log.debug('[chimp][chromedriver] stopping process'); - var options = { - child: self.child, - prefix: 'chromedriver' - }; - processHelper.kill(options, function (err, res) { - self.child = null; - callback(err, res); - }); - } else { - log.debug('[chimp][chromedriver] no process to kill'); - callback(null); - } -}; -/** - * Interrupt Chromedriver - * - * @param {Function} callback - * @api public - */ - - -Chromedriver.prototype.interrupt = function (callback) { - log.debug('[chimp][chromedriver] interrupt called'); - - if (!this.options['watch'] || !!this.options['clean-chromedriver-server']) { - this.stop(callback); - } else { - log.debug('[chimp][chromedriver] interrupt is not killing chromedriver because ' + 'clean-chromedriver-server not set'); - callback(null); - } -}; - -module.exports = Chromedriver; \ No newline at end of file diff --git a/dist/lib/ci.js b/dist/lib/ci.js deleted file mode 100644 index 6b6b4f2..0000000 --- a/dist/lib/ci.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.isCI = isCI; - -var _environmentVariableParsers = require("./environment-variable-parsers"); - -function isCI() { - return (0, _environmentVariableParsers.parseBoolean)(process.env.CI); -} \ No newline at end of file diff --git a/dist/lib/consoler.js b/dist/lib/consoler.js deleted file mode 100644 index a0729dd..0000000 --- a/dist/lib/consoler.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; - -/** - * Consoler Constructor - * - * @param {Object} options - * @api public - */ -function Consoler(message, color) { - this.color = color || 'black'; - this.message = message; -} -/** - * Start Consoler - * - * @param {Function} callback - * @api public - */ - - -Consoler.prototype.start = function (callback) { - console.log(this.message); - callback(); -}; -/** - * Stop Consoler - * - * @param {Function} callback - * @api public - */ - - -Consoler.prototype.stop = function (callback) { - callback(); -}; -/** - * Interrupt Consoler - * - * @param {Function} callback - * @api public - */ - - -Consoler.prototype.interrupt = function (callback) { - callback(); -}; - -module.exports = Consoler; \ No newline at end of file diff --git a/dist/lib/cucumberjs/cucumber-wrapper.js b/dist/lib/cucumberjs/cucumber-wrapper.js deleted file mode 100644 index d7f4c36..0000000 --- a/dist/lib/cucumberjs/cucumber-wrapper.js +++ /dev/null @@ -1,109 +0,0 @@ -"use strict"; - -/* - * This file does some minor modifications on how Cucumber is started. - * - * Modifications to the original code from cucumber: - * - Adds the IPC listener - * - Modify the argv that are passed to the Cucumber CLI - * - Use exit instead of process.exit - */ -var Cucumber = require('cucumber'); - -var exit = require('exit'); // This is a modified version of cucumber/lib/cli - - -function Cli(argv) { - var Cucumber = require('cucumber'); - - var Command = require('commander').Command; - - var path = require('path'); - - function collect(val, memo) { - memo.push(val); - return memo; - } - - function getProgram() { - var program = new Command(path.basename(argv[1])); - program.usage('[options] [...]').version(Cucumber.VERSION, '-v, --version').option('-b, --backtrace', 'show full backtrace for errors').option('--compiler ', 'require files with the given EXTENSION after requiring MODULE (repeatable)', collect, []).option('-d, --dry-run', 'invoke formatters without executing steps').option('--fail-fast', 'abort the run on first failure').option('-f, --format ', 'specify the output format, optionally supply PATH to redirect formatter output (repeatable)', collect, ['pretty']).option('--name ', 'only execute the scenarios with name matching the expression (repeatable)', collect, []).option('--no-colors', 'disable colors in formatter output').option('--no-snippets', 'hide step definition snippets for pending steps').option('--no-source', 'hide source uris').option('-p, --profile ', 'specify the profile to use (repeatable)', collect, []).option('-r, --require ', 'require files before executing features (repeatable)', collect, []).option('--snippet-syntax ', 'specify a custom snippet syntax').option('-S, --strict', 'fail if there are any undefined or pending steps').option('-t, --tags ', 'only execute the features or scenarios with tags matching the expression (repeatable)', collect, []); - program.on('--help', function () { - console.log(' For more details please visit https://github.com/cucumber/cucumber-js#cli\n'); - }); - return program; - } - - function getConfiguration() { - var program = getProgram(); - program.parse(argv); - var profileArgs = Cucumber.Cli.ProfilesLoader.getArgs(program.profile); - - if (profileArgs.length > 0) { - var fullArgs = argv.slice(0, 2).concat(profileArgs).concat(argv.slice(2)); - program = getProgram(); - program.parse(fullArgs); - } - - var configuration = Cucumber.Cli.Configuration(program.opts(), program.args); - return configuration; - } - - var self = { - run: function run(callback) { - var configuration = getConfiguration(); - var runtime = Cucumber.Runtime(configuration); - var formatters = [createIpcFormatter()].concat(configuration.getFormatters()); - formatters.forEach(function (formatter) { - runtime.attachListener(formatter); - }); - - try { - runtime.start(callback); - } catch (e) { - console.log(e.stack || e); - callback(false); - } - } - }; - return self; -} - -function createIpcFormatter() { - // add a json formatter that sends results over IPC - var ipcFormatter = new Cucumber.Listener.JsonFormatter(); - var finish = ipcFormatter.finish; - - ipcFormatter.finish = function sendResultToChimp(callback) { - var _this = this; - - finish.call(this, function (error, result) { - var results = _this.getLogs(); - - process.send(results, function () { - callback(error, result); - }); - }); - }; - - return ipcFormatter; -} // This is a modified version of cucumber/bin/cucumber - - -var argv = process.argv.slice(1); -argv = argv.slice(argv.indexOf('node')); -var cli = Cli(argv); -cli.run(function (succeeded) { - var code = succeeded ? 0 : 2; - - function exitNow() { - exit(code); - } - - if (process.stdout.write('')) { - exitNow(); - } else { - // write() returned false, kernel buffer is not empty yet... - process.stdout.on('drain', exitNow); - } -}); \ No newline at end of file diff --git a/dist/lib/cucumberjs/cucumber.js b/dist/lib/cucumberjs/cucumber.js deleted file mode 100644 index aeac311..0000000 --- a/dist/lib/cucumberjs/cucumber.js +++ /dev/null @@ -1,318 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); - -var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); - -var path = require('path'); - -var cp = require('child-process-debug'); - -var processHelper = require('./../process-helper.js'); - -var log = require('./../log'); - -var _ = require('underscore'); - -var booleanHelper = require('../boolean-helper'); - -var fs = require('fs-extra'); -/** - * Run Cucumber specs - * - * @param {Function} callback - * @api public - */ - - -var Cucumber = -/*#__PURE__*/ -function () { - function Cucumber(options) { - (0, _classCallCheck2["default"])(this, Cucumber); - this.options = options; - this.cucumberChild = null; - } - - (0, _createClass2["default"])(Cucumber, [{ - key: "start", - value: function start(callback) { - var _this = this; - - var args = this._getExecOptions(this.options); - - if (!fs.existsSync(this.options.path)) { - var infoMessage = "[chimp][cucumber] Directory ".concat(this.options.path, " does not exist. Not running"); - - if (booleanHelper.isTruthy(this.options['fail-when-no-tests-run'])) { - callback(infoMessage); - } else { - log.info(infoMessage); - callback(); - } - - return; - } - - log.debug('[chimp][cucumber] Running with', args); - var opts = { - env: process.env, - silent: true - }; - var port; - - if (booleanHelper.isTruthy(this.options.debugCucumber)) { - port = parseInt(this.options.debugCucumber, 10); - - if (port > 1) { - opts.execArgv = ['--debug=' + port]; - } else { - opts.execArgv = ['--debug']; - } - } - - if (booleanHelper.isTruthy(this.options.debugBrkCucumber)) { - port = parseInt(this.options.debugBrkCucumber, 10); - - if (port > 1) { - opts.execArgv = ['--debug-brk=' + port]; - } else { - opts.execArgv = ['--debug-brk']; - } - } - - this.cucumberChild = cp.fork(path.join(__dirname, 'cucumber-wrapper.js'), args, opts); - - if (booleanHelper.isTruthy(this.options.conditionOutput)) { - this.cucumberChild.stdout.on('data', function (data) { - _this._conditionMessage(data.toString()); - }); - } else { - this.cucumberChild.stdout.pipe(process.stdout); - } - - this.cucumberChild.stderr.pipe(process.stderr); - process.stdin.pipe(this.cucumberChild.stdin); - var jsonResults = null; - this.cucumberChild.on('message', function (res) { - log.debug('[chimp][cucumber] Received message from cucumber child. Result:', res); - jsonResults = res; - }); - this.cucumberChild.on('close', function (code) { - log.debug('[chimp][cucumber] Closed with code', code); - - if (!_this.cucumberChild.stopping) { - log.debug('[chimp][cucumber] Cucumber not in a stopping state'); - - if (_this.options.jsonOutput && jsonResults && JSON.parse(jsonResults).length) { - var dir = path.dirname(_this.options.jsonOutput); - log.debug('[chimp][cucumber] Ensuring directory exists', dir); - fs.mkdirsSync(dir); - log.debug('[chimp][cucumber] Writing json results to', _this.options.jsonOutput); - fs.writeFileSync(_this.options.jsonOutput, jsonResults); - log.debug('[chimp][cucumber] Finished writing results'); - } - - var failWhenNoTestsRun = booleanHelper.isTruthy(_this.options['fail-when-no-tests-run']); - var noTestsFound = jsonResults === null || JSON.parse(jsonResults).length === 0; - callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Cucumber steps failed' : null, jsonResults); - } - }); - } - }, { - key: "interrupt", - value: function interrupt(callback) { - var _this2 = this; - - log.debug('[chimp][cucumber] interrupting cucumber'); - - if (!this.cucumberChild) { - log.debug('[chimp][cucumber] no child to interrupt'); - return callback(); - } - - this.cucumberChild.stopping = true; - var options = { - child: this.cucumberChild, - prefix: 'cucumber' - }; - processHelper.kill(options, function (err, res) { - _this2.cucumberChild = null; - - if (callback) { - callback(err, res); - } - }); - } - }, { - key: "_getRecommendedFilename", - value: function _getRecommendedFilename(line) { - var stepType = line.match(/this\.(Given|When|Then)/)[1]; - var recommendedFilename = stepType + ' ' + line.match(/\^(.*)\$/)[1]; - recommendedFilename = recommendedFilename.replace(/".*"/g, '#'); - recommendedFilename = recommendedFilename.replace(/\(.*\)/g, '#'); - recommendedFilename = recommendedFilename.replace(/\\/g, ''); - recommendedFilename = recommendedFilename.replace(/\$/g, ''); - recommendedFilename = recommendedFilename.replace(/ /g, this.options.recommendedFilenameSeparator || ' '); - return recommendedFilename; - } - }, { - key: "_conditionOutput", - value: function _conditionOutput(message) { - if (message.indexOf('callback.pending()') === -1) { - process.stdout.write(message); - return; - } - - try { - var defaultText = 'Write code here that turns the phrase above into concrete actions'; - var replacementText = 'Write the automation code here'; - var tab = ''; - var self = this; - - _.each(message.split('\n'), function (eachLine) { - if (booleanHelper.isTruthy(self.options.singleSnippetPerFile) && eachLine.match(/this\./)) { - process.stdout.write('// Recommended filename: '.gray + (self._getRecommendedFilename(eachLine) + '.js\n').cyan); - process.stdout.write('module.exports = function() {\n'.yellow); - tab = ' '; - } - - var line = eachLine; - line = line.replace(defaultText, replacementText); - line = line.replace('callback.pending()', 'pending()'); - line = line.replace(', callback', ''); - line = line.replace('callback', ''); - process.stdout.write(tab + line + '\n'); - - if (booleanHelper.isTruthy(self.options.singleSnippetPerFile) && line.match(/}\);/)) { - process.stdout.write('};\n'.yellow); - tab = ''; - } - }); - } catch (e) { - log.debug('[chimp][cucumber] Error conditioning message', e); - process.stdout.write(message); - } - } - }, { - key: "_conditionMessage", - value: function _conditionMessage(message) { - if (this.options.debug) { - log.debug(message); - return; - } // output any strings that don't contain a stack trace - - - if (message.indexOf(' at') === -1) { - this._conditionOutput(message); - - return; - } - - var msg = ''; - var basePath = path.resolve('.', this.options.path); - var basePathParent = path.resolve(basePath, '..'); - var TAB = ' '; - - try { - _.each(message.split('\n'), function (line) { - var trimmedLine = line.trim(); - var relativePathLine = line.replace(basePathParent + path.sep, ''); // filter out some known unnecessary lines - // console.error('[' + line + ']'); - - if (trimmedLine.indexOf('node_modules') !== -1) { - return; - } // for stack trace lines - - - if (trimmedLine.indexOf('at') === 0) { - msg += relativePathLine.yellow + '\n'; - } else { - // or other lines that start with a tab (cucumber repeats errors at the end) - if (line.indexOf(TAB) !== -1) { - msg += relativePathLine.yellow + '\n'; - } else { - msg += relativePathLine.magenta + '\n'; - } - } - }); - - process.stdout.write(msg); - } catch (e) { - log.debug('[chimp][cucumber] Error conditioning console out', e); - process.stdout.write(message); - } - } - }, { - key: "_getExecOptions", - value: function _getExecOptions(options) { - var execOptions = ['node', path.resolve(__dirname, path.join('..', '..', '..', 'node_modules', '.bin', 'cucumber.js'))]; // XXX a feature may be defined at the start or end - // XXX do other options also get passed with this command? - - var features = options._.splice(2).toString() || options.features || options.path; - - if (features.indexOf(',') !== -1) { - features = features.split(','); - - _.each(features, function (feature) { - execOptions.push(feature); - }); - } else { - execOptions.push(features); - } - - execOptions.push('-r'); - execOptions.push(path.resolve(__dirname, path.join('../chimp-helper.js'))); - execOptions.push('-r'); - execOptions.push(path.resolve(__dirname, path.join('world.js'))); - - if (!options.domainOnly) { - execOptions.push('-r'); - execOptions.push(path.resolve(__dirname, path.join('hooks.js'))); - } - - if (!options.r && !options.require) { - execOptions.push('-r'); - execOptions.push(options.path); - } // See: https://github.com/cucumber/cucumber-js/blob/v0.9.2/lib/cucumber/cli.js - - - var allowedCucumberJsOptions = { - "long": ['version', 'backtrace', 'compiler', 'dry-run', 'fail-fast', 'format', 'no-colors', 'no-snippets', 'no-source', 'profile', 'require', 'snippet-syntax', 'strict', 'tags', 'help', 'name'], - "short": ['v', 'b', 'd', 'f', 'p', 'r', 'S', 't'] - }; - - _.forEach(options, function (eachOptionValues, optionName) { - var optionValues = _.isArray(eachOptionValues) ? eachOptionValues : [eachOptionValues]; - - if (_.contains(allowedCucumberJsOptions["long"], optionName)) { - _.forEach(optionValues, function (optionValue) { - execOptions.push('--' + optionName); - - if (['dry-run', 'fail-fast', 'no-colors', 'no-snippets', 'no-source', 'strict', 'backtrace'].indexOf(optionName) === -1) { - execOptions.push(optionValue.toString()); - } - }); - } else if (_.contains(allowedCucumberJsOptions["short"], optionName)) { - _.forEach(optionValues, function (optionValue) { - execOptions.push('-' + optionName); - - if (['d', 'S', 'b'].indexOf(optionName) === -1) { - execOptions.push(optionValue.toString()); - } - }); - } else if (_.last(optionValues) === false && _.contains(allowedCucumberJsOptions["long"], 'no-' + optionName)) { - execOptions.push('--no-' + optionName); - } - }); - - log.debug('[chimp][cucumber] Cucumber exec options are: ', execOptions); - return execOptions; - } - }]); - return Cucumber; -}(); - -module.exports = Cucumber; \ No newline at end of file diff --git a/dist/lib/cucumberjs/hooks.js b/dist/lib/cucumberjs/hooks.js deleted file mode 100644 index abf4005..0000000 --- a/dist/lib/cucumberjs/hooks.js +++ /dev/null @@ -1,124 +0,0 @@ -"use strict"; - -var log = require('../log'); - -var exit = require('exit'); - -var _ = require('underscore'); - -var booleanHelper = require('../boolean-helper'); - -var screenshotHelper = require('../screenshot-helper'); - -module.exports = function hooks() { - var screenshots = {}; - this.setDefaultTimeout(60 * 1000); - this.registerHandler('BeforeFeatures', function () { - log.debug('[chimp][hooks] Starting BeforeFeatures'); - global.chimpHelper.setupBrowserAndDDP(); - global.chimpHelper.createGlobalAliases(); - log.debug('[chimp][hooks] Finished BeforeFeatures'); // noinspection JSUnresolvedVariable - - if (global.UserDefinedBeforeFeatures) { - log.debug('[chimp][hooks] User-defined BeforeFeatures found, calling'); // noinspection JSUnresolvedFunction - - global.UserDefinedBeforeFeatures(); // eslint-disable-line new-cap - } else { - log.debug('[chimp][hooks] User-defined BeforeFeatures not found, finishing up'); - } - }); - /** - * Capture screenshots either for erroneous / all steps - */ - - var lastStep; - this.StepResult(function (stepResult) { - // eslint-disable-line new-cap - lastStep = stepResult.getStep(); - - if (screenshotHelper.shouldTakeScreenshot(stepResult.getStatus())) { - log.debug('[chimp][hooks] capturing screenshot'); - - if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToReport'])) { - var screenshotId = lastStep.getUri() + ':' + lastStep.getLine(); // noinspection JSUnresolvedFunction - - screenshots[screenshotId] = { - keyword: lastStep.getKeyword(), - name: lastStep.getName(), - uri: lastStep.getUri(), - line: lastStep.getLine(), - png: global.browser.screenshot().value - }; - } - - if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { - var affix = stepResult.getStatus() !== 'passed' ? ' (failed)' : ''; // noinspection JSUnresolvedFunction - - var fileName = lastStep.getKeyword() + ' ' + lastStep.getName() + affix; - screenshotHelper.saveScreenshotsToDisk(fileName); - } - } - }); - /** - * Stores captures screenshots in the report - */ - - this.After(function (scenario) { - // eslint-disable-line new-cap - _.each(screenshots, function (element) { - var decodedImage = new Buffer(element.png, 'base64'); - scenario.attach(decodedImage, 'image/png'); - }); - }); - /** - * After features have run we close the browser and optionally notify - * SauceLabs - */ - - this.registerHandler('AfterFeatures', function () { - log.debug('[chimp][hooks] Starting AfterFeatures'); - - if (process.env['chimp.browser'] !== 'phantomjs') { - log.debug('[chimp][hooks] Ending browser session'); - global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); - log.debug('[chimp][hooks] Ended browser sessions'); - } - - log.debug('[chimp][hooks] Finished AfterFeatures'); - }); - process.on('unhandledRejection', function (reason, promise) { - log.error('[chimp] Detected an unhandledRejection:'.red); - - try { - if (reason.type === 'CommandError' && reason.message === 'Promise never resolved with an truthy value') { - reason.type += 'WebdriverIO CommandError (Promise never resolved with an truthy value)'; - reason.message = 'This usually happens when WebdriverIO assertions fail or timeout.'; - var hint = 'HINT: Check the step AFTER [' + lastStep.getKeyword() + lastStep.getName() + ']'; - var uri = lastStep.getUri(); - uri = uri.substring(process.cwd().length, uri.length); - hint += ' (' + uri + ': >' + lastStep.getLine() + ')'; - log.error('[chimp][hooks] Reason:'.red); - log.error('[chimp][hooks]'.red, reason.type.red); - log.error('[chimp][hooks]'.red, reason.message.red); - log.error(hint.yellow); - reason.message += '\n' + hint; - } else { - log.error('[chimp][hooks]'.red, reason.stack); - } - } catch (e) { - log.debug('[chimp][hooks] Could not provide error hint'); - } - - log.debug('[chimp][hooks] Promise:', JSON.parse(JSON.stringify(promise))); - log.debug('[chimp][hooks] Forcibly exiting Cucumber'); - process.send(JSON.stringify(reason)); - exit(2); - }); - process.on('SIGINT', function () { - log.debug('[chimp][hooks] Received SIGINT process event, ending browser session'); - global.browser.endAsync().then(function () { - log.debug('[chimp][hooks] ended browser session'); - exit(); - }); - }); -}; \ No newline at end of file diff --git a/dist/lib/cucumberjs/world.js b/dist/lib/cucumberjs/world.js deleted file mode 100644 index 812356b..0000000 --- a/dist/lib/cucumberjs/world.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -var _ = require('underscore'); - -module.exports = function () { - chimpHelper.init(); - chimpHelper.loadAssertionLibrary(); - var UserWorld = this.World; - - this.World = function World() { - this.browser = global.browser; - this.driver = global.browser; - this.client = global.browser; - this.request = global.request; - this.ddp = global.ddp; - this.mirror = global.ddp; - this.server = global.ddp; - this.chimpWidgets = global.chimpWidgets; - - if (UserWorld) { - // The user can modify the world - var userWorldInstance = UserWorld.apply(this, _.toArray(arguments)); - - if (userWorldInstance) { - _.extend(this, userWorldInstance); - } - } - - return this; - }; -}; \ No newline at end of file diff --git a/dist/lib/ddp-watcher.js b/dist/lib/ddp-watcher.js deleted file mode 100644 index c9de154..0000000 --- a/dist/lib/ddp-watcher.js +++ /dev/null @@ -1,163 +0,0 @@ -"use strict"; - -// taken from https://github.com/timbotnik/meteor-autoupdate-watcher -var DDPClient = require('xolvio-ddp'), - _ = require('underscore'), - URL = require('url'), - log = require('./log'); - -var AutoupdateWatcher = function AutoupdateWatcher(options) { - this.options = options; - this._url = this._getUrl(options.ddp); - this._currentVersions = {}; - this._lastRerun = 0; - this._autoupdateCollection = {}; - this._ddpClient = null; -}; - -AutoupdateWatcher.prototype._getUrl = function (ddpHost) { - if (ddpHost instanceof Array) { - ddpHost = ddpHost[0]; - } - - if (ddpHost.indexOf('http://') === -1 && ddpHost.indexOf('https://') === -1) { - throw new Error('[chimp][ddp] DDP url must contain the protocol'); - } - - return URL.parse(ddpHost); -}; - -AutoupdateWatcher.prototype._triggerRerun = function () { - var self = this; - var now = new Date().getTime(); - - if (now - self._lastRerun > 1000) { - // debounce this since we always see multiple version records change around the same time - // actually rerun here... - self._lastRerun = now; - - self._trigger(); - } -}; - -AutoupdateWatcher.prototype._didUpdateVersion = function (doc) { - var self = this; - var versionType; - var versionKey; - - if (doc._id.match(/version/) === null) { - versionType = 'version-server'; - versionKey = '_id'; - } else { - versionType = doc._id; - versionKey = 'version'; - } - - var prevVersion = self._currentVersions[versionType]; - var newVersion = doc[versionKey]; - var isUpdated = prevVersion && prevVersion !== newVersion; - - if (isUpdated) { - log.debug('[chimp][ddp-watcher] New ' + versionType + ': ' + newVersion); - } - - self._currentVersions[versionType] = newVersion; - return isUpdated; -}; - -AutoupdateWatcher.prototype._checkForUpdate = function () { - var self = this; - var observedAutoupdate = false; - - _.each(self._autoupdateCollection, function (doc) { - if (!observedAutoupdate && self._didUpdateVersion(doc)) { - observedAutoupdate = true; - } - }); - - if (observedAutoupdate) { - self._triggerRerun(); - } -}; - -AutoupdateWatcher.prototype.watch = function (trigger) { - var self = this; - self._trigger = trigger; - self._ddpClient = new DDPClient({ - // All properties optional, defaults shown - host: this._url.hostname, - port: this._url.port, - ssl: this._url.protocol === 'https:', - path: this._url.pathname !== '/' ? this._url.pathname + '/websocket' : undefined, - autoReconnect: true, - autoReconnectTimer: 500, - maintainCollections: true, - ddpVersion: '1', - useSockJs: this._url.pathname === '/' - }); - /* - * Observe the autoupdate collection. - */ - - var observer = self._ddpClient.observe('meteor_autoupdate_clientVersions'); - - observer.added = function (id) { - log.debug('[chimp][ddp-watcher] ADDED to ' + observer.name + ': ' + id); - }; - - observer.changed = function (id, oldFields, clearedFields, newFields) { - log.debug('[chimp][ddp-watcher] CHANGED in ' + observer.name + ': ' + id); - log.debug('[chimp][ddp-watcher] CHANGED old field values: ', oldFields); - log.debug('[chimp][ddp-watcher] CHANGED cleared fields: ', clearedFields); - log.debug('[chimp][ddp-watcher] CHANGED new fields: ', newFields); - - if (self._didUpdateVersion(self._autoupdateCollection[id])) { - self._triggerRerun(); - } - }; - - observer.removed = function (id, oldValue) { - log.debug('[chimp][ddp-watcher] REMOVED in ' + observer.name + ': ' + id); - log.debug('[chimp][ddp-watcher] REMOVED previous value: ', oldValue); - }; - - self._observer = observer; - /* - * Connect to the Meteor Server - */ - - self._ddpClient.connect(function (error, wasReconnect) { - // If autoReconnect is true, this callback will be invoked each time - // a server connection is re-established - if (error) { - log.error('[chimp][ddp-watcher] DDP connection error!', error); - self._isConnected = false; - return; - } - - self._isConnected = true; - - if (wasReconnect) { - log.debug('[chimp][ddp-watcher] Reconnected'); - } else { - log.debug('[chimp][ddp-watcher] Connected'); - } // force a reset of 'maintained' collections - - - self._ddpClient.collections = {}; - /* - * Subscribe to the Meteor Autoupdate Collection - */ - - self._subscriptionHandle = self._ddpClient.subscribe('meteor_autoupdate_clientVersions', [], function () { - // callback when the subscription is ready - self._autoupdateCollection = self._ddpClient.collections.meteor_autoupdate_clientVersions; - log.debug('[chimp][ddp-watcher] meteor_autoupdate_clientVersions ready:'); - log.debug('[chimp][ddp-watcher] ' + self._autoupdateCollection); - - self._checkForUpdate(); - }); - }); -}; - -module.exports = AutoupdateWatcher; \ No newline at end of file diff --git a/dist/lib/ddp.js b/dist/lib/ddp.js deleted file mode 100644 index 897c285..0000000 --- a/dist/lib/ddp.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; - -var log = require('./log'), - URL = require('url'), - DDPClient = require('xolvio-ddp'), - booleanHelper = require('./boolean-helper'), - wrapAsyncObject = require('xolvio-sync-webdriverio').wrapAsyncObject; -/** - * DDP Constructor - * - * @api public - */ - - -function DDP(url) { - log.debug('[chimp][ddp] creating DDP wrapper'); - process.env.ROOT_URL = process.env.ROOT_URL || process.env['chimp.ddp0']; - - if (!url) { - this.url = this._getUrl(process.env['chimp.ddp0']); - } else { - this.url = this._getUrl(url); - } -} - -DDP.prototype.connect = function () { - var options = this._getOptions(); - - log.debug('[chimp][ddp] Connecting to DDP server', options); - return wrapAsyncObject(new DDPClient(options), ['connect', 'call', 'apply', 'callWithRandomSeed', 'subscribe'], { - syncByDefault: booleanHelper.isTruthy(process.env['chimp.sync']) - }); -}; - -DDP.prototype._getUrl = function (ddpHost) { - if (ddpHost.indexOf('http://') === -1 && ddpHost.indexOf('https://') === -1) { - throw new Error('[chimp][ddp] DDP url must contain the protocol'); - } - - return URL.parse(ddpHost); -}; - -DDP.prototype._getOptions = function () { - return { - host: this.url.hostname, - port: this.url.port, - ssl: this.url.protocol === 'https:', - path: this.url.pathname !== '/' ? this.url.pathname + '/websocket' : undefined, - // TODO extract all options - autoReconnect: true, - autoReconnectTimer: 500, - maintainCollections: true, - ddpVersion: '1', - useSockJs: this.url.pathname === '/' - }; -}; - -module.exports = DDP; \ No newline at end of file diff --git a/dist/lib/environment-variable-parsers.js b/dist/lib/environment-variable-parsers.js deleted file mode 100644 index 6cb7f5d..0000000 --- a/dist/lib/environment-variable-parsers.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.parseString = parseString; -exports.parseInteger = parseInteger; -exports.parseNumber = parseNumber; -exports.parseBoolean = parseBoolean; -exports.parseNullable = parseNullable; -exports.parseNullableString = parseNullableString; -exports.parseNullableInteger = parseNullableInteger; -exports.parseNullableNumber = parseNullableNumber; -exports.parseNullableBoolean = parseNullableBoolean; - -var _booleanHelper = require("./boolean-helper"); - -function parseString(value) { - return value; -} - -function parseInteger(value) { - return parseInt(value, 10); -} - -function parseNumber(value) { - return Number(value); -} - -function parseBoolean(value) { - return (0, _booleanHelper.isTruthy)(value); -} - -function parseNullable(value, convert) { - return value === 'null' ? null : convert(value); -} - -function parseNullableString(value) { - return parseNullable(value, parseString); -} - -function parseNullableInteger(value) { - return parseNullable(value, parseInteger); -} - -function parseNullableNumber(value) { - return parseNullable(value, parseNumber); -} - -function parseNullableBoolean(value) { - return parseNullable(value, parseBoolean); -} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-fiberized-api.js b/dist/lib/jasmine/jasmine-fiberized-api.js deleted file mode 100644 index 9b1d512..0000000 --- a/dist/lib/jasmine/jasmine-fiberized-api.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = fiberizeJasmineApi; - -var _underscore = _interopRequireDefault(require("underscore")); - -var _fiberize = require("../utils/fiberize"); - -function fiberizeJasmineApi(context) { - ['describe', 'xdescribe', 'fdescribe'].forEach(function (method) { - var original = context[method]; - context[method] = _underscore["default"].wrap(original, function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - - if (_underscore["default"].isFunction(_underscore["default"].last(args))) { - args.push((0, _fiberize.fiberizeSync)(args.pop())); - } - - return fn.apply(this, args); - }); - }); - ['it', 'xit', 'fit', 'beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach(function (method) { - var original = context[method]; - context[method] = _underscore["default"].wrap(original, function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - - if (_underscore["default"].isFunction(_underscore["default"].last(args))) { - args.push((0, _fiberize.fiberize)(args.pop())); - } - - return fn.apply(this, args); - }); - }); -} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-helpers.js b/dist/lib/jasmine/jasmine-helpers.js deleted file mode 100644 index 08bc97f..0000000 --- a/dist/lib/jasmine/jasmine-helpers.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _chimpHelper = _interopRequireDefault(require("../chimp-helper")); - -var _log = _interopRequireDefault(require("../log")); - -beforeAll(function chimpSetup() { - jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000; - - _chimpHelper["default"].init(); - - _chimpHelper["default"].setupBrowserAndDDP(); -}); -afterAll(function chimpTeardown() { - if (process.env['chimp.browser'] !== 'phantomjs') { - _log["default"].debug('[chimp][jasmine-helpers] Ending browser session'); - - global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); - - _log["default"].debug('[chimp][jasmine-helpers] Ended browser sessions'); - } -}); \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine-wrapper.js b/dist/lib/jasmine/jasmine-wrapper.js deleted file mode 100644 index d1c8237..0000000 --- a/dist/lib/jasmine/jasmine-wrapper.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _path = _interopRequireDefault(require("path")); - -var _fibers = _interopRequireDefault(require("fibers")); - -var _underscore = _interopRequireDefault(require("underscore")); - -var _environmentVariableParsers = require("../environment-variable-parsers"); - -var _escapeRegExp = _interopRequireDefault(require("../utils/escape-reg-exp")); - -var _jasmineFiberizedApi = _interopRequireDefault(require("./jasmine-fiberized-api")); - -var _screenshotHelper = _interopRequireDefault(require("../screenshot-helper")); - -var _booleanHelper = _interopRequireDefault(require("../boolean-helper")); - -require('../babel-register'); - -new _fibers["default"](function runJasmineInFiber() { - var projectDir = process.env.PWD; - var testsDir = process.env['chimp.path']; - process.chdir(testsDir); - - var Jasmine = require('jasmine'); - - var jasmine = new Jasmine(); // Capability to add multiple spec filters - - var specFilters = []; - - jasmine.env.specFilter = function shouldRunSpec(spec) { - return _underscore["default"].every(specFilters, function (specFilter) { - return specFilter(spec); - }); - }; - - jasmine.jasmine.addSpecFilter = function addSpecFilter(filterFn) { - specFilters.push(filterFn); - }; - - if ((0, _environmentVariableParsers.parseBoolean)(process.env['chimp.watch'])) { - // Only run specs with a watch tag in watch mode - var watchedSpecRegExp = new RegExp((0, _environmentVariableParsers.parseString)(process.env['chimp.watchTags']).split(',').map(_escapeRegExp["default"]).join('|')); - jasmine.jasmine.addSpecFilter(function (spec) { - return watchedSpecRegExp.test(spec.getFullName()); - }); - } // Capability to capture screenshots - - - jasmine.jasmine.getEnv().addReporter({ - specDone: function specDone(result) { - if (_screenshotHelper["default"].shouldTakeScreenshot(result.status)) { - if (_booleanHelper["default"].isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { - var affix = result.status !== 'passed' ? ' (failed)' : ''; - var fileName = result.fullName + affix; - - _screenshotHelper["default"].saveScreenshotsToDisk(fileName, projectDir); - } - } - } - }); - (0, _jasmineFiberizedApi["default"])(global); - jasmine.loadConfig(getJasmineConfig()); - jasmine.configureDefaultReporter(JSON.parse(process.env['chimp.jasmineReporterConfig'])); - jasmine.execute(); -}).run(); - -function getJasmineConfig() { - var jasmineConfig = JSON.parse(process.env['chimp.jasmineConfig']); - - if (jasmineConfig.specDir) { - if (!jasmineConfig.spec_dir) { - jasmineConfig.spec_dir = jasmineConfig.specDir; - } - - delete jasmineConfig.specDir; - } - - if (jasmineConfig.specFiles) { - if (!jasmineConfig.spec_files) { - jasmineConfig.spec_files = jasmineConfig.specFiles; - } - - delete jasmineConfig.specFiles; - } - - if (!jasmineConfig.helpers) { - jasmineConfig.helpers = []; - } - - jasmineConfig.helpers.unshift(_path["default"].relative(jasmineConfig.spec_dir, _path["default"].resolve(__dirname, 'jasmine-helpers.js'))); - return jasmineConfig; -} \ No newline at end of file diff --git a/dist/lib/jasmine/jasmine.js b/dist/lib/jasmine/jasmine.js deleted file mode 100644 index c21afd2..0000000 --- a/dist/lib/jasmine/jasmine.js +++ /dev/null @@ -1,127 +0,0 @@ -"use strict"; - -var path = require('path'), - cp = require('child-process-debug'), - processHelper = require('./../process-helper.js'), - booleanHelper = require('../boolean-helper'), - log = require('./../log'), - _ = require('underscore'), - colors = require('colors'), - glob = require('glob'), - fs = require('fs-extra'); -/** - * Mocha Constructor - * - * @param {Object} options - * @api public - */ - - -function Jasmine(options) { - this.options = options; - this.child = null; -} -/** - * Run Mocha specs - * - * @param {Function} callback - * @api public - */ - - -Jasmine.prototype.start = function (callback) { - var self = this; - - if (glob.sync(self.options.path).length === 0) { - var infoMessage = "[chimp][jasmine] Directory ".concat(self.options.path, " does not exist. Not running"); - - if (booleanHelper.isTruthy(this.options['fail-when-no-tests-run'])) { - callback(infoMessage); - } else { - log.info(infoMessage); - callback(); - } - - return; - } - - log.debug('[chimp][jasmine] Running...'); - var opts = { - env: process.env, - silent: true - }; - var port; - - if (this.options.debugJasmine) { - port = parseInt(this.options.debugJasmine); - - if (port > 1) { - opts.execArgv = ['--debug=' + port]; - } else { - opts.execArgv = ['--debug']; - } - } - - if (this.options.debugBrkMocha) { - port = parseInt(this.options.debugBrkMocha); - - if (port > 1) { - opts.execArgv = ['--debug-brk=' + port]; - } else { - opts.execArgv = ['--debug-brk']; - } - } - - self.child = cp.fork(path.join(__dirname, 'jasmine-wrapper.js'), [], opts); - self.child.stdout.pipe(process.stdout); - self.child.stderr.pipe(process.stderr); - process.stdin.pipe(self.child.stdin); - var noTestsFound = false; - self.child.stdout.on('data', function (data) { - var colorCodesRegExp = new RegExp("\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]", 'g'); - var dataFromStdout = data.toString().replace(colorCodesRegExp, '').trim(); - - if (/^No specs found/.test(dataFromStdout)) { - noTestsFound = true; - } - }); - var result = null; - self.child.on('message', function (res) { - log.debug('[chimp][jasmine] Received message from Jasmine child. Result:', res); - result = res; - }); - self.child.on('close', function (code) { - log.debug('[chimp][jasmine] Closed with code', code); - var failWhenNoTestsRun = booleanHelper.isTruthy(self.options['fail-when-no-tests-run']); - - if (!self.child.stopping) { - log.debug('[chimp][jasmine] Jasmine not in a stopping state'); - callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Jasmine failed' : null, result); - } - }); -}; - -Jasmine.prototype.interrupt = function (callback) { - log.debug('[chimp][jasmine] interrupting jasmine'); - var self = this; - - if (!self.child) { - log.debug('[chimp][jasmine] no child to interrupt'); - return callback(); - } - - self.child.stopping = true; - var options = { - child: self.child, - prefix: 'jasmine' - }; - processHelper.kill(options, function (err, res) { - self.child = null; - - if (callback) { - callback(err, res); - } - }); -}; - -module.exports = Jasmine; \ No newline at end of file diff --git a/dist/lib/log.js b/dist/lib/log.js deleted file mode 100644 index e97c0bb..0000000 --- a/dist/lib/log.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -var log = require('loglevel'), - minimist = require('minimist'); - -var argv = minimist(process.argv, { - 'default': { - 'debug': false, - 'log': 'info' - }, - 'boolean': true -}) || []; -var debug = process.env['chimp.debug'] === 'true' ? true : process.env['chimp.debug'] === 'false' ? false : process.env['chimp.debug'] || process.env.DEBUG === 'true' || process.env.DEBUG === '1' || argv.debug; - -if (debug) { - log.setLevel('debug'); -} else { - log.setLevel(argv.log); -} - -module.exports = log; \ No newline at end of file diff --git a/dist/lib/mocha/mocha-fiberized-ui.js b/dist/lib/mocha/mocha-fiberized-ui.js deleted file mode 100644 index da4564b..0000000 --- a/dist/lib/mocha/mocha-fiberized-ui.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -var _fiberize = require("../utils/fiberize"); - -// taken from https://github.com/tzeskimo/mocha-fibers/blob/master/lib/mocha-fibers.js -// A copy of bdd interface, but beforeEach, afterEach, before, after, -// and it methods all run within fibers. -var Mocha = require('mocha'), - bdd = Mocha.interfaces.bdd, - _ = require('underscore'), - util = require('util'); - -// A copy of bdd interface, but wrapping everything in fibers -module.exports = Mocha.interfaces['fiberized-bdd-ui'] = function (suite) { - bdd(suite); - suite.on('pre-require', function (context) { - // Wrap test related methods in fiber - ['beforeEach', 'afterEach', 'after', 'before', 'it'].forEach(function (method) { - var original = context[method]; - context[method] = _.wrap(original, function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - - if (_.isFunction(_.last(args))) { - args.push((0, _fiberize.fiberize)(args.pop())); - } - - return fn.apply(this, args); - }); - - _.extend(context[method], _(original).pick('only', 'skip')); - }); - }); -}; \ No newline at end of file diff --git a/dist/lib/mocha/mocha-helper.js b/dist/lib/mocha/mocha-helper.js deleted file mode 100644 index 6fa0945..0000000 --- a/dist/lib/mocha/mocha-helper.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; - -var chimpHelper = require('../chimp-helper'); - -var exit = require('exit'); - -var log = require('../log'); - -var booleanHelper = require('../boolean-helper'); - -var screenshotHelper = require('../screenshot-helper'); - -before(function () { - process.env['chimp.chai'] = true; - chimpHelper.loadAssertionLibrary(); - chimpHelper.init(); - chimpHelper.setupBrowserAndDDP(); -}); -after(function () { - if (process.env['chimp.browser'] !== 'phantomjs') { - log.debug('[chimp][mocha-helper] Ending browser session'); - global.wrapAsync(global.sessionManager.killCurrentSession, global.sessionManager)(); - log.debug('[chimp][mocha-helper] Ended browser sessions'); - } -}); -afterEach(function () { - if (screenshotHelper.shouldTakeScreenshot(this.currentTest.state)) { - if (booleanHelper.isTruthy(process.env['chimp.saveScreenshotsToDisk'])) { - var affix = this.currentTest.state !== 'passed' ? ' (failed)' : ''; - var fileName = this.currentTest.fullTitle() + affix; - screenshotHelper.saveScreenshotsToDisk(fileName); - } - } -}); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper-instance.js b/dist/lib/mocha/mocha-wrapper-instance.js deleted file mode 100644 index 103d454..0000000 --- a/dist/lib/mocha/mocha-wrapper-instance.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict"; - -var _mochaWrapper = require("./mocha-wrapper"); - -var mochaWrapper = new _mochaWrapper.MochaWrapper(); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper-spec.js b/dist/lib/mocha/mocha-wrapper-spec.js deleted file mode 100644 index 8678c1c..0000000 --- a/dist/lib/mocha/mocha-wrapper-spec.js +++ /dev/null @@ -1,124 +0,0 @@ -"use strict"; - -var testDir = './tests/'; -var testDirFiles = ['fileA.js', 'fileB.js']; -var filesGlobValue = './lib/**/*.spec.js'; -var filesGlobFiles = ['./lib/fileA.spec.js', './lib/someDir/fileB.spec.js']; -var emptyTestsDirPath = ''; -describe('mocha-wrapper', function () { - beforeEach(function () { - td.replace('./mocha-fiberized-ui', {}); - td.replace('exit', td["function"]('exit')); - td.replace('../babel-register', td.object({})); - - var emptyFn = function emptyFn() {}; - - this.mocha = td.replace('mocha'); - this.path = td.replace('path', td.object({ - join: emptyFn, - resolve: emptyFn - })); - this.glob = td.replace('glob', td.object({ - sync: emptyFn - })); - process.env.mochaConfig = JSON.stringify({ - tags: '' - }); - process.argv = []; - }); - afterEach(function () { - td.reset(); - }); - describe('add files', function () { - it('adds files inside testDir', function () { - process.argv = []; - process.env['chimp.path'] = testDir; // mock --path tests dir files - - td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.join(testDir, '**')).thenReturn(testDir); - td.when(this.glob.sync(testDir)).thenReturn(testDirFiles); - td.when(this.mocha.run(td.matchers.anything())).thenReturn(null); - - var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; - - var mochaWrapper = new MochaWrapper(); - td.verify(this.mocha.addFile('fileA.js')); - td.verify(this.mocha.addFile('fileB.js')); - td.verify(this.mocha.addFile('mocha-helper.js')); - td.verify(this.mocha.addFile(), { - times: 3, - ignoreExtraArgs: true - }); // verify only called three times - }); - it('adds files specified by --files options when --path is empty dir', function () { - process.argv = []; - process.env['chimp.path'] = emptyTestsDirPath; - process.env['chimp.files'] = filesGlobValue; // mock empty --path tests dir files - - td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.join(emptyTestsDirPath, '**')).thenReturn(emptyTestsDirPath); - td.when(this.glob.sync(emptyTestsDirPath)).thenReturn([]); // mock --files flag files - - td.when(this.glob.sync(filesGlobValue)).thenReturn(filesGlobFiles); - - var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; - - var mochaWrapper = new MochaWrapper(); - td.verify(this.mocha.addFile('./lib/fileA.spec.js')); - td.verify(this.mocha.addFile('./lib/someDir/fileB.spec.js')); - td.verify(this.mocha.addFile('mocha-helper.js')); - td.verify(this.mocha.addFile(), { - times: 3, - ignoreExtraArgs: true - }); - }); - it('adds files specified by --files option and files in --path when both contain files', function () { - process.argv = []; - process.env['chimp.path'] = testDir; - process.env['chimp.files'] = filesGlobValue; // mock mocha-helper - - td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); // mock --files flag files - - td.when(this.glob.sync(filesGlobValue)).thenReturn(filesGlobFiles); // mock --path test dir files - - td.when(this.path.join(testDir, '**')).thenReturn(testDir); - td.when(this.glob.sync(testDir)).thenReturn(testDirFiles); - td.when(this.mocha.run(td.matchers.anything())).thenReturn(null); - - var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; - - var mochaWrapper = new MochaWrapper(); - td.verify(this.mocha.addFile('fileA.js')); - td.verify(this.mocha.addFile('fileB.js')); - td.verify(this.mocha.addFile('./lib/fileA.spec.js')); - td.verify(this.mocha.addFile('./lib/someDir/fileB.spec.js')); - td.verify(this.mocha.addFile('mocha-helper.js')); - td.verify(this.mocha.addFile(), { - times: 5, - ignoreExtraArgs: true - }); - }); - it('adds files specified on cli directly', function () { - process.argv = ['/usr/local/bin/node', 'chimp', '--mocha', 'test/fileA.js', 'test/fileB.js', 'test/fileC.js', 'fileD.js']; // mock mocha-helper - - td.when(this.path.join('mocha-helper.js')).thenReturn('mocha-helper.js'); - td.when(this.path.resolve(__dirname, 'mocha-helper.js')).thenReturn('mocha-helper.js'); - - var MochaWrapper = require('./mocha-wrapper.js').MochaWrapper; - - var mochaWrapper = new MochaWrapper(); - td.verify(this.mocha.addFile('test/fileA.js')); - td.verify(this.mocha.addFile('test/fileB.js')); - td.verify(this.mocha.addFile('test/fileC.js')); - td.verify(this.mocha.addFile('fileD.js')); - td.verify(this.mocha.addFile('mocha-helper.js')); - td.verify(this.mocha.addFile(), { - times: 5, - ignoreExtraArgs: true - }); - }); - }); -}); \ No newline at end of file diff --git a/dist/lib/mocha/mocha-wrapper.js b/dist/lib/mocha/mocha-wrapper.js deleted file mode 100644 index e39bca8..0000000 --- a/dist/lib/mocha/mocha-wrapper.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.MochaWrapper = void 0; - -var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); - -var _environmentVariableParsers = require("../environment-variable-parsers"); - -var _escapeRegExp = _interopRequireDefault(require("../utils/escape-reg-exp")); - -require('../babel-register'); - -var Mocha = require('mocha'), - fs = require('fs'), - path = require('path'), - exit = require('exit'), - glob = require('glob'), - ui = require('./mocha-fiberized-ui'), - _ = require('underscore'); - -var MochaWrapper = function MochaWrapper() { - (0, _classCallCheck2["default"])(this, MochaWrapper); - var mochaConfig = JSON.parse(process.env.mochaConfig); - var mochaCommandLineOptions = process.env['chimp.mochaCommandLineOptions'] ? JSON.parse(process.env['chimp.mochaCommandLineOptions']) : false; - - if (mochaCommandLineOptions && _.isObject(mochaCommandLineOptions)) { - _.extend(mochaConfig, mochaCommandLineOptions); - } - - mochaConfig.ui = 'fiberized-bdd-ui'; - - if (!mochaConfig.grep && (0, _environmentVariableParsers.parseBoolean)(process.env['chimp.watch'])) { - mochaConfig.grep = new RegExp((0, _environmentVariableParsers.parseString)(process.env['chimp.watchTags']).split(',').map(_escapeRegExp["default"]).join('|')); - } else if (!mochaConfig.grep) { - mochaConfig.grep = new RegExp((0, _environmentVariableParsers.parseString)(mochaConfig.tags).split(',').map(_escapeRegExp["default"]).join('|')); - } - - var mocha = new Mocha(mochaConfig); - mocha.addFile(path.join(path.resolve(__dirname, path.join('mocha-helper.js')))); - - if (process.argv.length > 3) { - process.argv.splice(3).forEach(function (spec) { - mocha.addFile(spec); - }); - } else { - // Add each .js file in the tests dir to the mocha instance - var testDir = process.env['chimp.path']; - glob.sync(path.join(testDir, '**')).filter(function (file) { - // Only keep the .js files - return file.substr(-3) === '.js'; - }).forEach(function (file) { - mocha.addFile(file); - }); - - if (process.env['chimp.files']) { - // Add each file specified by the "files" option to the mocha instance - glob.sync(process.env['chimp.files']).forEach(function (file) { - mocha.addFile(file); - }); - } - } - - try { - // Run the tests. - mocha.run(function (failures) { - exit(failures); - }); - } catch (e) { - throw e; - } -}; - -exports.MochaWrapper = MochaWrapper; \ No newline at end of file diff --git a/dist/lib/mocha/mocha.js b/dist/lib/mocha/mocha.js deleted file mode 100644 index 86961c1..0000000 --- a/dist/lib/mocha/mocha.js +++ /dev/null @@ -1,156 +0,0 @@ -"use strict"; - -var path = require('path'), - cp = require('child-process-debug'), - processHelper = require('./../process-helper.js'), - booleanHelper = require('../boolean-helper'), - log = require('./../log'), - _ = require('underscore'), - colors = require('colors'), - glob = require('glob'), - fs = require('fs-extra'); -/** - * Mocha Constructor - * - * @param {Object} options - * @api public - */ - - -function Mocha(options) { - this.options = options; - this.child = null; -} -/** - * Run Mocha specs - * - * @param {Function} callback - * @api public - */ - - -Mocha.prototype.start = function (callback) { - var self = this; - - if (glob.sync(self.options.path).length === 0) { - var infoMessage = "[chimp][mocha] Directory ".concat(self.options.path, " does not exist. Not running"); - - if (booleanHelper.isTruthy(self.options['fail-when-no-tests-run'])) { - callback(infoMessage); - } else { - log.info(infoMessage); - callback(); - } - - return; - } - - log.debug('[chimp][mocha] Running...'); - var opts = { - env: process.env, - silent: true - }; - var port; - - if (this.options.debugMocha) { - port = parseInt(this.options.debugMocha); - - if (port > 1) { - opts.execArgv = ['--debug=' + port]; - } else { - opts.execArgv = ['--debug']; - } - } - - if (this.options.debugBrkMocha) { - port = parseInt(this.options.debugBrkMocha); - - if (port > 1) { - opts.execArgv = ['--debug-brk=' + port]; - } else { - opts.execArgv = ['--debug-brk']; - } - } - - if (this.options.inspectMocha) { - port = parseInt(this.options.inspectMocha); - - if (port > 1) { - opts.execArgv = ['--inspect=' + port]; - } else { - opts.execArgv = ['--inspect']; - } - } - - if (this.options.inspectBrkMocha) { - port = parseInt(this.options.inspectBrkMocha); - - if (port > 1) { - opts.execArgv = ['--inspect-brk=' + port]; - } else { - opts.execArgv = ['--inspect-brk']; - } - } - - var _specs = []; - - if (this.options._ && this.options._.length > 2) { - _specs = this.options._.slice(2); - } - - opts.env = _.extend(process.env, { - mochaConfig: JSON.stringify(this.options.mochaConfig) - }); - self.child = cp.fork(path.join(__dirname, 'mocha-wrapper-instance.js'), _specs, opts); - self.child.stdout.pipe(process.stdout); - self.child.stderr.pipe(process.stderr); - process.stdin.pipe(self.child.stdin); - var noTestsFound = false; - self.child.stdout.on('data', function (data) { - var colorCodesRegExp = new RegExp("\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]", 'g'); - var dataFromStdout = data.toString().replace(colorCodesRegExp, '').trim(); - - if (/^0 passing/.test(dataFromStdout)) { - noTestsFound = true; - } - }); - var result = null; - self.child.on('message', function (res) { - log.debug('[chimp][mocha] Received message from Mocha child. Result:', res); - result = res; - }); - self.child.on('close', function (code) { - log.debug('[chimp][mocha] Closed with code', code); - var failWhenNoTestsRun = booleanHelper.isTruthy(self.options['fail-when-no-tests-run']); - - if (!self.child.stopping) { - log.debug('[chimp][mocha] Mocha not in a stopping state'); - callback(code !== 0 || code === 0 && noTestsFound && failWhenNoTestsRun ? 'Mocha failed' : null, result); - } - }); -}; - -Mocha.prototype.interrupt = function (callback) { - log.debug('[chimp][mocha] interrupting mocha'); - var self = this; - - if (!self.child) { - log.debug('[chimp][mocha] no child to interrupt'); - return callback(); - } - - self.child.stopping = true; - var options = { - child: self.child, - prefix: 'mocha' - }; - processHelper.kill(options, function (err, res) { - self.child = null; - - if (callback) { - callback(err, res); - } - }); -}; - -module.exports = Mocha; \ No newline at end of file diff --git a/dist/lib/options-loader.js b/dist/lib/options-loader.js deleted file mode 100644 index 15d2057..0000000 --- a/dist/lib/options-loader.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _deepExtend = _interopRequireDefault(require("deep-extend")); - -var path = require('path'); - -var fs = require('fs'); - -var log = require('./log'); - -module.exports = { - getOptions: function getOptions() { - var userOptionsFile; - - var processArgv = this._getProcessArgv(); - - if (processArgv[2] && processArgv[2].match(/.*chimp.*\.js$/)) { - userOptionsFile = path.resolve(process.cwd(), processArgv[2]); - processArgv.splice(2, 1); - - if (!fs.existsSync(userOptionsFile)) { - log.error(('[chimp] Could not find ' + processArgv[2]).red); - - this._exit(1); - } - } else { - userOptionsFile = path.resolve(process.cwd(), 'chimp.js'); - } - - var userOptions = {}; - - if (fs.existsSync(userOptionsFile)) { - userOptions = this._requireFile(userOptionsFile); - log.debug('[chimp] loaded', userOptionsFile); - } - - var defaultOptions = this._requireFile(this._getDefaultConfigFilePath()); - - var options = (0, _deepExtend["default"])(defaultOptions, userOptions); - log.debug('[chimp] Chimp options are', options); - return options; - }, - _requireFile: function _requireFile(file) { - return require(file); - }, - _getProcessArgv: function _getProcessArgv() { - return process.argv; - }, - _exit: function _exit(code) { - process.exit(code); - }, - _getDefaultConfigFilePath: function _getDefaultConfigFilePath() { - return path.resolve(__dirname, '..', 'bin', 'default.js'); - } -}; \ No newline at end of file diff --git a/dist/lib/phantom.js b/dist/lib/phantom.js deleted file mode 100644 index a896b41..0000000 --- a/dist/lib/phantom.js +++ /dev/null @@ -1,90 +0,0 @@ -"use strict"; - -var phantomjs = require('phantomjs-prebuilt'), - processHelper = require('./process-helper.js'), - log = require('./log'); -/** - * Phantom Constructor - * - * @param {Object} options - * @api public - */ - - -function Phantom(options) { - if (!options) { - throw new Error('options is required'); - } - - if (!options.port) { - throw new Error('options.port is required'); - } - - this.options = options; - this.child = null; -} -/** - * Start Phantom - * - * @param {Function} callback - * @api public - */ - - -Phantom.prototype.start = function (callback) { - var self = this; - var port = self.options.port; - var ignoreSSLErrors = self.options.phantom_ignoreSSLErrors || 'false'; - - if (this.child) { - callback(); - return; - } - - this.child = processHelper.start({ - bin: process.env['chimp.phantom_path'] || phantomjs.path, - prefix: 'phantom', - args: ['--webdriver', port, '--ignore-ssl-errors', ignoreSSLErrors], - waitForMessage: /GhostDriver - Main - running on port/, - errorMessage: /Error/ - }, callback); -}; -/** - * Stop Phantom - * - * @param {Function} callback - * @api public - */ - - -Phantom.prototype.stop = function (callback) { - var self = this; - - if (self.child) { - log.debug('[chimp][phantom] stopping process'); - var options = { - child: self.child, - prefix: 'phantom' - }; - processHelper.kill(options, function (err, res) { - self.child = null; - callback(err, res); - }); - } else { - log.debug('[chimp][phantom] no process to kill'); - callback(null); - } -}; -/** - * Interrupt Phantom - * - * @param {Function} callback - * @api public - */ - - -Phantom.prototype.interrupt = function (callback) { - this.stop(callback); -}; - -module.exports = Phantom; \ No newline at end of file diff --git a/dist/lib/process-helper.js b/dist/lib/process-helper.js deleted file mode 100644 index bdc20c6..0000000 --- a/dist/lib/process-helper.js +++ /dev/null @@ -1,102 +0,0 @@ -"use strict"; - -var cp = require('child_process'), - log = require('./log'); - -module.exports = { - start: function start(options, callback) { - var child = this.spawn(options); - - if (options.waitForMessage) { - this.waitForMessage(options, child, callback); - } else { - callback(); - } - - return child; - }, - spawn: function spawn(options) { - log.debug('[chimp][' + options.prefix + ']', 'starting process'); - var child = cp.spawn(options.bin, options.args); - this.logOutputs(options.prefix, child); - return child; - }, - logOutputs: function logOutputs(prefix, child) { - child.stdout.on('data', function (data) { - log.debug('[chimp][' + prefix + '.stdout]', data.toString()); - }); - child.stderr.on('data', function (data) { - log.debug('[chimp][' + prefix + '.stderr]', data.toString()); - }); - }, - waitForMessage: function waitForMessage(options, child, callback) { - child.stderr.on('data', onDataStdErr); - child.stdout.on('data', onDataStdOut); - - function onDataStdErr(data) { - onData(data, function () { - child.stderr.removeListener('data', onDataStdErr); - }); - } - - function onDataStdOut(data) { - onData(data, function () { - child.stdout.removeListener('data', onDataStdOut); - }); - } - - function onData(data, removeListener) { - if (data.toString().match(options.waitForMessage)) { - removeListener(); - log.debug('[chimp][' + options.prefix + ']', 'started successfully'); - return callback(); - } - - if (data.toString().match(options.errorMessage)) { - log.error('[chimp][' + options.prefix + ']', 'failed to start'); - log.error(data.toString()); - callback(data.toString()); - } - } - }, - kill: function kill(options, callback) { - log.debug('[chimp][' + options.prefix + ']', 'kill called on ' + options.prefix + ' process with pid', options.child.pid); - options.signal = options.signal || 'SIGTERM'; - - try { - log.debug('[chimp][' + options.prefix + ']', 'checking if process exists'); - process.kill(options.child.pid, 0); - log.debug('[chimp][' + options.prefix + ']', options.prefix + ' process exists, killing it with', options.signal); - process.kill(options.child.pid, options.signal); - } catch (e) { - log.debug('[chimp][' + options.prefix + ']', options.prefix + ' process does not exists, ignoring'); - options.child = null; - return callback(); - } - - var delay = 300, - totalRetries = 10, - retries = totalRetries * (1000 / delay), - attempt = 0; - var waitForProcessToDie = setInterval(function () { - try { - if (retries-- < 0) { - throw new Error('Process took too long to die'); - } - - log.debug('[chimp][' + options.prefix + ']', 'waiting for process to die (' + attempt++ + '/' + totalRetries + ')'); - process.kill(options.child.pid, 0); - } catch (e) { - clearInterval(waitForProcessToDie); - - if (e.code === 'ESRCH') { - log.debug('[chimp][' + options.prefix + ']', 'process is dead'); - options.child = null; - callback(); - } else { - callback(e); - } - } - }, delay); - } -}; \ No newline at end of file diff --git a/dist/lib/saucelabs-manager.js b/dist/lib/saucelabs-manager.js deleted file mode 100644 index d69a248..0000000 --- a/dist/lib/saucelabs-manager.js +++ /dev/null @@ -1,109 +0,0 @@ -"use strict"; - -var request = require('request'), - log = require('./log'); -/** - * SessionManager Constructor - * - * @param {Object} options - * @api public - */ - - -function SauceLabsSessionManager(options) { - log.debug('[chimp][saucelabs-session-manager] options are', options); - var host = options.host.replace('ondemand.', ''); - var sauceLabsBaseUrl = 'https://' + options.user + ':' + options.key + '@' + host + '/rest/v1/' + options.user; - options.sauceLabsUrl = sauceLabsBaseUrl; - this.options = options; - this.maxRetries = 30; - this.retryDelay = 3000; - this.retry = 0; - log.debug('[chimp][saucelabs-session-manager] created a new SessionManager', options); -} - -SauceLabsSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); -/** - * Wraps the webdriver remote method and allows reuse options - * - * @api public - */ - -SauceLabsSessionManager.prototype.remote = function (webdriverOptions, callback) { - var self = this; - log.debug('[chimp][saucelabs-session-manager] creating webdriver remote '); - var browser = this.webdriver.remote(webdriverOptions); - callback(null, browser); - return; -}; -/** - * Gets a list of sessions from the SauceLabs API based on Build ID - * - * @api private - */ - - -SauceLabsSessionManager.prototype._getJobs = function (callback) { - var hub = this.options.sauceLabsUrl + '/jobs?full=:get_full_info&limit=10'; //default is 100 which seems like too much - - log.debug('[chimp][saucelabs-session-manager]', 'requesting sessions from', hub); - request(hub, function (error, response, body) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][saucelabs-session-manager]', 'received data', body); - callback(null, JSON.parse(body)); - } else { - log.error('[chimp][saucelabs-session-manager]', 'received error', error); - callback(error); - } - }); -}; -/** - * Kills the 1st session found running on SauceLabs - * - * @api public - */ - - -SauceLabsSessionManager.prototype.killCurrentSession = function (callback) { - this._getJobs(function (err, jobs) { - if (jobs && jobs.length) { - var job = jobs[0]; // This will stop the session, causing a 'User terminated' error. - // If we don't manually stop the session, we get a timed-out error. - - var options = { - url: this.options.sauceLabsUrl + '/jobs/' + job.id + '/stop', - method: 'PUT' - }; - request(options, function (error, response) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][saucelabs-session-manager]', 'stopped session'); - callback(); - } else { - log.error('[chimp][saucelabs-session-manager]', 'received error', error); - callback(error); - } - }); // This will set the session to passing or else it will show as Errored out - // even though we stop it. - - options = { - url: this.options.sauceLabsUrl + '/jobs/' + job.id, - method: 'PUT', - json: true, - body: { - passed: true - } - }; - request(options, function (error, response) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][saucelabs-session-manager]', 'updated session to passing state'); - callback(); - } else { - log.error('[chimp][saucelabs-session-manager]', 'received error', error); - callback(error); - } - }); - } - }.bind(this)); -}; - -module.exports = SauceLabsSessionManager; \ No newline at end of file diff --git a/dist/lib/screenshot-helper.js b/dist/lib/screenshot-helper.js deleted file mode 100644 index f1b3ad4..0000000 --- a/dist/lib/screenshot-helper.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -var booleanHelper = require('./boolean-helper'); - -var screenshotHelper = { - shouldTakeScreenshot: function shouldTakeScreenshot(status) { - return booleanHelper.isTruthy(process.env['chimp.captureAllStepScreenshots']) || status !== 'passed' && booleanHelper.isTruthy(process.env['chimp.screenshotsOnError']); - }, - saveScreenshotsToDisk: function saveScreenshotsToDisk(fileName, projectDir) { - if (global.browser.instances) { - global.browser.instances.forEach(function (instance, index) { - instance.captureSync(fileName + '_browser_' + index, projectDir); - }); - } else { - global.browser.captureSync(fileName, projectDir); - } - } -}; -module.exports = screenshotHelper; \ No newline at end of file diff --git a/dist/lib/selenium.js b/dist/lib/selenium.js deleted file mode 100644 index d528fc4..0000000 --- a/dist/lib/selenium.js +++ /dev/null @@ -1,192 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); - -var _ = require('underscore'), - processHelper = require('./process-helper.js'), - selenium = require('selenium-standalone'), - booleanHelper = require('./boolean-helper'), - log = require('./log'); -/** - * Selenium Constructor - * - * @param {Object} options - * @api public - */ - - -function Selenium(options) { - if (!options) { - throw new Error('options is required'); - } - - if (booleanHelper.isFalsey(options.port)) { - throw new Error('options.port is required'); - } - - this.options = _.clone(options); - this.seleniumStandaloneOptions = options.seleniumStandaloneOptions; - - if (!this.options['clean-selenium-server']) { - // poor-man's singleton is enough for our needs - if ((0, _typeof2["default"])(Selenium.instance) === 'object') { - log.debug('[chimp][selenium]', 'Selenium object already exists, not creating a new one'); - return Selenium.instance; - } - - log.debug('[chimp][selenium]', 'Selenium object created'); - Selenium.instance = this; - } - - this.options.port = String(options.port); - this.child = null; -} -/** - * Installs Selenium and drivers. - * - * @param {Function} callback - * @api public - */ - - -Selenium.prototype.install = function (callback) { - var ProgressBar = require('progress'); - - var bar; - var firstProgress = true; - - if (this.options.offline) { - log.debug('[chimp][selenium]', 'Offline mode enabled, Chimp will not attempt to install Selenium & Drivers'); - callback(); - return; - } - - log.debug('[chimp][selenium]', 'Installing Selenium + drivers if needed'); - this.seleniumStandaloneOptions.progressCb = progressCb; - selenium.install(this.seleniumStandaloneOptions, function (e, r) { - if (e && e.message.match(/Error: getaddrinfo ENOTFOUND/)) { - log.debug('[chimp][selenium]', e.message); - log.info('[chimp][selenium] Detected a connection error in selenium-standalone. Are you offline?'); - log.info('[chimp][selenium] Consider using the --offline option to explicitly skip installing Selenium & drivers.'); - log.info('[chimp][selenium] Attempting to continue...'); - callback(null, r); - } else { - callback(e, r); - } - }); - - function progressCb(total, progress, chunk) { - if (firstProgress) { - firstProgress = false; - } - - bar = bar || new ProgressBar('selenium-standalone installation [:bar] :percent :etas', { - total: total, - complete: '=', - incomplete: ' ', - width: 20 - }); - bar.tick(chunk); - } -}; -/** - * Start Selenium process. - * - * It also installs Selenium if necessary. - * - * @param {Function} callback - * @api public - */ - - -Selenium.prototype.start = function (callback) { - var self = this; - var port = self.options.port; - log.debug('[chimp][selenium]', 'Start'); - - if (self.child) { - log.debug('[chimp][selenium]', 'Already running, doing nothing'); - callback(null); - return; - } - - self.install(function (error) { - if (error) { - log.error('[selenium]', error); - callback(error); - return; - } - - if (!self.seleniumStandaloneOptions.seleniumArgs) { - self.seleniumStandaloneOptions.seleniumArgs = []; - } - - self.seleniumStandaloneOptions.seleniumArgs.push('-port', port); - - if (process.env['chimp.log'] === 'verbose' || process.env['chimp.log'] === 'debug') { - self.options.seleniumDebug = true; - } - - if (self.options.seleniumDebug) { - self.seleniumStandaloneOptions.seleniumArgs.push('-debug'); - } - - log.debug('\n[chimp][selenium] hub can be seen at http://localhost:' + port + '/wd/hub'); - selenium.start(self.seleniumStandaloneOptions, function (error, seleniumChild) { - self.child = seleniumChild; - - if (error) { - callback(error); - return; - } - - if (self.options.seleniumDebug) { - processHelper.logOutputs('selenium', self.child); - } - - process.on('exit', function () { - log.debug('[chimp][selenium] process exit event detected. Stopping process'); - self.stop(function () { - log.debug('[chimp][selenium] process exit event stop complete'); - }); - }); - callback(null); - }); - }); -}; - -Selenium.prototype.stop = function (callback) { - var self = this; - - if (self.child) { - log.debug('[chimp][selenium] killing active session'); - var options = { - child: self.child, - prefix: 'selenium', - signal: 'SIGINT' - }; - log.debug('[chimp][selenium] stopping process'); - processHelper.kill(options, function (err, res) { - self.child = null; - callback(err, res); - }); - } else { - log.debug('[chimp][selenium] no process to kill'); - callback(null); - } -}; - -Selenium.prototype.interrupt = function (callback) { - log.debug('[chimp][selenium] interrupt called'); - - if (!this.options['watch'] || !!this.options['clean-selenium-server']) { - this.stop(callback); - } else { - log.debug('[chimp][selenium] interrupt is not killing selenium because ' + 'clean-selenium-server not set'); - callback(null); - } -}; - -module.exports = Selenium; \ No newline at end of file diff --git a/dist/lib/session-factory.js b/dist/lib/session-factory.js deleted file mode 100644 index 1bde110..0000000 --- a/dist/lib/session-factory.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; - -var request = require('request'), - log = require('./log'); - -var SessionManager = require('./session-manager.js'); - -var BsManager = require('./browserstack-manager.js'); - -var SlManager = require('./saucelabs-manager.js'); - -var TbManager = require('./testingbot-manager.js'); -/** - * Wraps creation of different Session Managers depending on host value. - * - * @param {Object} options - * @api public - */ - - -function SessionManagerFactory(options) { - log.debug('[chimp][session-manager-factory] options are', options); - - if (!options) { - throw new Error('options is required'); - } - - if (!options.port) { - throw new Error('options.port is required'); - } - - if (!options.browser && !options.deviceName) { - throw new Error('[chimp][session-manager-factory] options.browser or options.deviceName is required'); - } - - if (options.host && (options.host.indexOf('browserstack') > -1 || options.host.indexOf('saucelabs') > -1 || options.host.indexOf('testingbot') > -1)) { - if (!options.user || !options.key) { - throw new Error('[chimp][session-manager-factory] options.user and options.key are required'); - } - - if (options.host.indexOf('browserstack') > -1) { - return new BsManager(options); - } else if (options.host.indexOf('saucelabs') > -1) { - return new SlManager(options); - } else if (options.host.indexOf('testingbot') > -1) { - return new TbManager(options); - } - } else { - return new SessionManager(options); - } -} - -module.exports = SessionManagerFactory; \ No newline at end of file diff --git a/dist/lib/session-manager.js b/dist/lib/session-manager.js deleted file mode 100644 index a19e709..0000000 --- a/dist/lib/session-manager.js +++ /dev/null @@ -1,266 +0,0 @@ -"use strict"; - -var requestretry = require('requestretry'), - request = require('request'), - log = require('./log'), - booleanHelper = require('./boolean-helper'), - parseBoolean = require('./environment-variable-parsers').parseBoolean; -/** - * SessionManager Constructor - * - * @param {Object} options - * @api public - */ - - -function SessionManager(options) { - if (!options) { - throw new Error('options is required'); - } - - if (!options.port) { - throw new Error('options.port is required'); - } - - if (!options.browser && !options.deviceName) { - throw new Error('[chimp][session-manager] options.browser or options.deviceName is required'); - } - - this.options = options; - this.maxRetries = 30; - this.retryDelay = 3000; - this.retry = 0; - log.debug('[chimp][session-manager] created a new SessionManager'); -} - -SessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); -/** - * Wraps the webdriver remote method and allows reuse options - * - * @api public - */ - -SessionManager.prototype._configureRemote = function (webdriverOptions, remote, callback) { - var self = this; - log.debug('[chimp][session-manager] creating webdriver remote '); - var browser = remote(webdriverOptions); - - function decideReuse() { - if (self.options.browser === 'phantomjs') { - log.debug('[chimp][session-manager] browser is phantomjs, not reusing a session'); - callback(null, browser); - return; - } - - if (booleanHelper.isTruthy(process.env['chimp.noSessionReuse'])) { - log.debug('[chimp][session-manager] noSessionReuse is true, not reusing a session'); - callback(null, browser); - return; - } - - if (booleanHelper.isFalsey(process.env['chimp.watch']) && booleanHelper.isFalsey(process.env['chimp.server'])) { - log.debug('[chimp][session-manager] watch mode is false, not reusing a session'); - callback(null, browser); - return; - } - - self._getWebdriverSessions(function (err, sessions) { - if (err) { - callback(err); - return; - } - - if (sessions.length !== 0) { - log.debug('[chimp][session-manager] Found an open selenium sessions, reusing session', sessions[0].id); - browser._original.requestHandler.sessionID = sessions[0].id; - } else { - log.debug('[chimp][session-manager] Did not find any open selenium sessions, not reusing a session'); - } - - browser = self._monkeyPatchBrowserSessionManagement(browser, sessions); - callback(null, browser); - }); - } - - this._waitForConnection(browser, decideReuse); -}; - -SessionManager.prototype.multiremote = function (webdriverOptions, callback) { - this._configureRemote(webdriverOptions, this.webdriver.multiremote, callback); -}; - -SessionManager.prototype.remote = function (webdriverOptions, callback) { - this._configureRemote(webdriverOptions, this.webdriver.remote, callback); -}; - -SessionManager.prototype._waitForConnection = function (browser, callback) { - log.debug('[chimp][session-manager] checking connection to selenium server'); - var self = this; - browser.statusAsync().then(function () { - log.debug('[chimp][session-manager] Connection to the to selenium server verified'); - callback(); - }, function (err) { - if (err && /ECONNREFUSED/.test(err.message)) { - if (++self.retry === self.maxRetries) { - callback('[chimp][session-manager] timed out retrying to connect to selenium server'); - } - - log.debug('[chimp][session-manager] could not connect to the server, retrying', '(' + self.retry + '/' + self.maxRetries + ')'); - setTimeout(function () { - self._waitForConnection(browser, callback); - }, self.retryDelay); - } else { - log.debug('[chimp][session-manager] Connection to the to selenium server verified'); - callback(); - } - }); -}; - -SessionManager.prototype._monkeyPatchBrowserSessionManagement = function (browser, sessions) { - log.debug('[chimp][session-manager]', 'monkey patching the browser object'); - - var callbacker = function callbacker() { - var cb = arguments[arguments.length - 1]; - - if (cb && typeof cb === 'function') { - cb(); - } - - return { - then: function then(c) { - c(); - } - }; - }; - - var initWrapperFactory = function initWrapperFactory(init) { - return function () { - if (sessions.length !== 0) { - log.debug('[chimp][session-manager]', 'browser already initialized'); - return callbacker.apply(this, arguments); - } else { - log.debug('[chimp][session-manager]', 'initializing browser'); - return init.apply(this, arguments); - } - }; - }; - - var updateBrowserObject = function updateBrowserObject(browserObject) { - browserObject._initAsync = browserObject.initAsync; - browserObject.initAsync = initWrapperFactory(browserObject.initAsync); - browserObject._initSync = browserObject.initSync; - browserObject.initSync = initWrapperFactory(browserObject.initSync); - browserObject._init = browserObject.init; - - if (browserObject._init === browserObject._initSync) { - browserObject.init = browserObject.initSync; - } else if (browserObject._init === browserObject._initAsync) { - browserObject.init = browserObject.initAsync; - } else { - throw new Error('browserObject.init has already been overwritten by something else.'); - } - - browserObject.end = callbacker.bind(browserObject); - browserObject.endSync = browserObject.end; - browserObject.endAsync = browserObject.end; - browserObject.endAll = callbacker.bind(browserObject); - browserObject.endAllSync = browserObject.endAll; - browserObject.endAllAsync = browserObject.endAll; - return browserObject; - }; - - if (browser.instances) { - browser.instances.forEach(function (singleBrowser) { - singleBrowser = updateBrowserObject(singleBrowser); - }); - } else { - browser = updateBrowserObject(browser); - } - - return browser; -}; -/** - * Gets a list of sessions from the localhost selenium server - * - * @api private - */ - - -SessionManager.prototype._getWebdriverSessions = function (callback) { - var wdHubSessions = 'http://' + this.options.host + ':' + this.options.port + '/wd/hub/sessions'; - log.debug('[chimp][session-manager]', 'requesting sessions from', wdHubSessions); - requestretry({ - url: wdHubSessions, - maxAttempts: 10, - retryDelay: 500, - retryStrategy: requestretry.RetryStrategies.HTTPOrNetworkError - }, function (error, response, body) { - if (!error) { - if (response.statusCode === 200) { - log.debug('[chimp][session-manager]', 'received data', body); - callback(null, JSON.parse(body).value); - } else { - log.error('[chimp][session-manager]', 'received error', "".concat(response.statusMessage, " [").concat(response.statusCode, "]")); - - if (response.body) { - log.debug('[chimp][session-manager]', 'response', response.body); - } - - callback(error); - } - } else { - log.error('[chimp][session-manager]', 'received error', error, 'response', response); - callback(error); - } - }); -}; -/** - * Kills the 1st session found running on selenium server - * - * @api public - */ - - -SessionManager.prototype.killCurrentSession = function (callback) { - if (this.options.browser === 'phantomjs') { - log.debug('[chimp][session-manager] browser is phantomjs, not killing session'); - callback(); - return; - } - - if (booleanHelper.isTruthy(process.env['chimp.noSessionReuse'])) { - log.debug('[chimp][session-manager] noSessionReuse is true, , not killing session'); - callback(); - return; - } - - if ((parseBoolean(process.env['chimp.watch']) || parseBoolean(process.env['chimp.server'])) && !parseBoolean(process.env['forceSessionKill'])) { - log.debug('[chimp][session-manager] watch / server mode are true, not killing session'); - callback(); - return; - } - - var wdHubSession = 'http://' + this.options.host + ':' + this.options.port + '/wd/hub/session'; - - this._getWebdriverSessions(function (err, sessions) { - if (sessions && sessions.length) { - sessions.forEach(function (session) { - var sessionId = session.id; - log.debug('[chimp][session-manager]', 'deleting wd session', sessionId); - request.del(wdHubSession + '/' + sessionId, function (error, response, body) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][session-manager]', 'received data', body); - callback(); - } else { - log.error('[chimp][session-manager]', 'received error', error); - callback(error); - } - }); - }); - } else { - callback(null); - } - }); -}; - -module.exports = SessionManager; \ No newline at end of file diff --git a/dist/lib/simian-reporter.js b/dist/lib/simian-reporter.js deleted file mode 100644 index 6dda8c6..0000000 --- a/dist/lib/simian-reporter.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _request = _interopRequireDefault(require("request")); - -var _log = _interopRequireDefault(require("./log")); - -/** - * SimianReporter Constructor - * - * @param {Object} options - * @api public - */ -function SimianReporter(options) { - this.options = options; // FIXME: We need a way to isolate instance in jest tests, until then this allows asserions - - SimianReporter.instance = this; -} - -SimianReporter.prototype.report = function report(jsonCucumberResult, callback) { - var query = { - accessToken: this.options.simianAccessToken - }; - - if (this.options.simianRepositoryId) { - query.repositoryId = this.options.simianRepositoryId; - } - - var url = require('url').format({ - protocol: 'http', - host: this.options.simianResultEndPoint, - query: query - }); - - var data = { - type: 'cucumber', - branch: this.options.simianResultBranch, - result: jsonCucumberResult - }; - - if (this.options.simianBuildNumber) { - data.buildNumber = parseInt(this.options.simianBuildNumber, 10); - } - - _request["default"].post({ - url: url, - json: true, - body: data - }, function (error, response, body) { - if (!error && response.statusCode === 200) { - _log["default"].debug('[chimp][simian-reporter]', 'received data', body); - } else { - if (body) { - _log["default"].error('[chimp][simian-reporter] Error from Simian:', body.error); - } else { - _log["default"].error('[chimp][simian-reporter]', 'Error while sending result to Simian:', error); - } - } - - callback(error); - }); -}; - -module.exports = SimianReporter; \ No newline at end of file diff --git a/dist/lib/testingbot-manager.js b/dist/lib/testingbot-manager.js deleted file mode 100644 index 6d4d9ef..0000000 --- a/dist/lib/testingbot-manager.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; - -var request = require('request'), - log = require('./log'); -/** - * SessionManager Constructor - * - * @param {Object} options - * @api public - */ - - -function TestingBotSessionManager(options) { - log.debug('[chimp][testingbot-session-manager] options are', options); - var testingbotBaseUrl = 'https://' + options.user + ':' + options.key + '@api.testingbot.com/v1/'; - options.testingbotBaseUrl = testingbotBaseUrl; - this.options = options; - this.maxRetries = 30; - this.retryDelay = 3000; - this.retry = 0; - log.debug('[chimp][testingbot-session-manager] created a new SessionManager', options); -} - -TestingBotSessionManager.prototype.webdriver = require('xolvio-sync-webdriverio'); -/** - * Wraps the webdriver remote method and allows reuse options - * - * @api public - */ - -TestingBotSessionManager.prototype.remote = function (webdriverOptions, callback) { - var self = this; - log.debug('[chimp][testingbot-session-manager] creating webdriver remote '); - var browser = this.webdriver.remote(webdriverOptions); - callback(null, browser); - return; -}; -/** - * Gets a list of sessions from the TestingBot API based on Build ID - * - * @api private - */ - - -TestingBotSessionManager.prototype._getJobs = function (callback) { - var hub = this.options.testingbotBaseUrl + '/tests?count=10'; //default is 100 which seems like too much - - log.debug('[chimp][testingbot-session-manager]', 'requesting sessions from', hub); - request(hub, function (error, response, body) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][testingbot-session-manager]', 'received data', body); - callback(null, JSON.parse(body)); - } else { - log.error('[chimp][testingbot-session-manager]', 'received error', error); - callback(error); - } - }); -}; -/** - * Kills the 1st session found running on TestingBot - * - * @api public - */ - - -TestingBotSessionManager.prototype.killCurrentSession = function (callback) { - this._getJobs(function (err, jobs) { - if (jobs && jobs.length) { - var job = jobs[0]; // This will stop the session, causing a 'User terminated' error. - // If we don't manually stop the session, we get a timed-out error. - - var options = { - url: this.options.testingbotBaseUrl + '/tests/' + job.id + '/stop', - method: 'PUT' - }; - request(options, function (error, response) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][testingbot-session-manager]', 'stopped session'); - callback(); - } else { - log.error('[chimp][testingbot-session-manager]', 'received error', error); - callback(error); - } - }); // This will set the session to passing or else it will show as Errored out - // even though we stop it. - - options = { - url: this.options.testingbotBaseUrl + '/tests/' + job.id, - method: 'PUT', - json: true, - body: { - 'test[passed]': true - } - }; - request(options, function (error, response) { - if (!error && response.statusCode === 200) { - log.debug('[chimp][testingbot-session-manager]', 'updated session to passing state'); - callback(); - } else { - log.error('[chimp][testingbot-session-manager]', 'received error', error); - callback(error); - } - }); - } - }.bind(this)); -}; - -module.exports = TestingBotSessionManager; \ No newline at end of file diff --git a/dist/lib/utils/escape-reg-exp.js b/dist/lib/utils/escape-reg-exp.js deleted file mode 100644 index db9027c..0000000 --- a/dist/lib/utils/escape-reg-exp.js +++ /dev/null @@ -1,10 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = escapeRegExp; - -function escapeRegExp(string) { - return string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); -} \ No newline at end of file diff --git a/dist/lib/utils/fiberize.js b/dist/lib/utils/fiberize.js deleted file mode 100644 index 8b80bf5..0000000 --- a/dist/lib/utils/fiberize.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.fiberize = fiberize; -exports.fiberizeSync = fiberizeSync; - -var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); - -var _fibers = _interopRequireDefault(require("fibers")); - -// Wrap a function in a fiber. -// Correctly handles expected presence of done callback -function fiberize(fn) { - return function (done) { - var self = this; - (0, _fibers["default"])(function () { - if (fn.length === 1) { - fn.call(self, done); - } else { - var res = fn.call(self); - - if ((0, _typeof2["default"])(res) === 'object' && res !== null && typeof res.then === 'function') { - res.then(function () { - return done(); - })["catch"](done); - } else { - done(); - } - } - }).run(); - }; -} - -function fiberizeSync(fn) { - return function () { - var self = this; - (0, _fibers["default"])(function () { - fn.call(self); - }).run(); - }; -} \ No newline at end of file diff --git a/dist/lib/versions.js b/dist/lib/versions.js deleted file mode 100644 index 4ac405b..0000000 --- a/dist/lib/versions.js +++ /dev/null @@ -1,229 +0,0 @@ -"use strict"; - -var _ = require('underscore'), - fs = require('fs'), - os = require('os'), - log = require('./log'), - async = require('async'), - request = require('request'), - spawnSync = require('child_process').spawnSync, - selenium = require('selenium-standalone'), - chromedriver = require('chromedriver'), - booleanHelper = require('./boolean-helper'), - processHelper = require('./process-helper.js'); - -function Versions(options) { - var _this = this; - - this.options = options; - this.appDir = '../..'; - this.chromeDriverExec = chromedriver.path; - - this.show = function (callback) { - console.log('Chimp version: ', _this.getChimpVersion()); - console.log('ChromeDriver version: ', _this.getChromeDriverVersion()); - console.log('Java version: ', _this.getJavaVersion()); - console.log('Selenium version: ', _this.getSeleniumVersion()); - console.log('Selenium drivers version: ', _this.getSeleniumDriversVersion()); - console.log('OS version: ', _this.getOsVersion()); - console.log('Node version: ', _this.getNodeVersion()); - - _this.getCurrentBrowserVersion(function (browserVersion) { - var currentBrowser = _this.options.browser || 'chrome'; - console.log('Browser version: ', currentBrowser, browserVersion); - - if (callback) { - callback(); - } - }); - }; - - this.getChimpVersion = function () { - var packageJson = require("".concat(_this.appDir, "/package.json")); - - return packageJson.version; - }; - - this.getChromeDriverVersion = function () { - if (booleanHelper.isFalsey(_this.options.host)) { - if (booleanHelper.isTruthy(_this.options.browser)) { - return 'Unknown. Chromedriver not used directly.'; - } else { - return _this._spawnSync("".concat(_this.chromeDriverExec, " -v")); - } - } else { - return 'Unknown. Selenium host provided.'; - } - }; - - this.getJavaVersion = function () { - return _this._spawnSync('java -version'); - }; - - this.getSeleniumVersion = function () { - if (_this.options.seleniumStandaloneOptions) { - return _this.options.seleniumStandaloneOptions.version; - } - - return "Unknown."; - }; - - this.getSeleniumDriversVersion = function () { - if (_this.options.seleniumStandaloneOptions) { - var driversVersion = []; - var drivers = _this.options.seleniumStandaloneOptions.drivers; - - _.each(_.keys(drivers), function (driverName) { - driversVersion.push("".concat(driverName, ": ").concat(drivers[driverName].version)); - }); - - return driversVersion.toString().replace(/,/g, ', '); - } - - return "Unknown."; - }; - - this.getOsVersion = function () { - return "".concat(os.type(), " ").concat(os.release()); - }; - - this.getNodeVersion = function () { - return process.version; - }; - - this.getCurrentBrowserVersion = function (callback) { - if (booleanHelper.isTruthy(_this.options.browser)) { - var seleniumOptions = _.clone(_this.options.seleniumStandaloneOptions); - - seleniumOptions.port = 1; - async.series([function (cb) { - selenium.install(seleniumOptions, function (err, seleniumInstallPaths) { - cb(err, seleniumInstallPaths); - }); - }], function (err, seleniumInstallPaths) { - var selectedBrowserDriver = seleniumInstallPaths[0][_this.options.browser]; - - if (selectedBrowserDriver) { - var startBrowserOptions = { - path: selectedBrowserDriver.installPath, - port: _this.options.port - }; - - _this._startBrowserDriver(startBrowserOptions, function () { - _this._getBrowserVersion(startBrowserOptions, function (err, browserVersion) { - _this._stopBrowserDriver(function (err) { - if (err) { - log.warn(err); - } - - callback(browserVersion); - }); - }); - }); - } else { - callback("Driver for selected browser(".concat(_this.options.browser, ") not found.")); - } - }); - } else { - if (fs.existsSync(_this.chromeDriverExec)) { - var startBrowserOptions = { - path: _this.chromeDriverExec, - port: _this.options.port - }; - - _this._startBrowserDriver(startBrowserOptions, function () { - _this._getBrowserVersion(startBrowserOptions, function (err, browserVersion) { - _this._stopBrowserDriver(function (err) { - if (err) { - log.warn(err); - } - - callback(browserVersion); - }); - }); - }); - } else { - callback("Driver for selected browser not found."); - } - } - }; // ------------------------------------------------------------------------------------- - - - this._startBrowserDriver = function (options, callback) { - var waitMessage = new RegExp("".concat(options.port)); - _this.child = processHelper.start({ - bin: options.path, - prefix: 'browserdriver', - args: ['--port=' + options.port], - waitForMessage: waitMessage, - errorMessage: /Error/ - }, callback); - }; - - this._getBrowserVersion = function (options, callback) { - var url = "http://localhost:".concat(options.port, "/session"); - var data = { - "desiredCapabilities": {} - }; - request.post({ - url: url, - json: true, - body: data - }, function (error, response, body) { - var data = {}; - - if (!error && response.statusCode === 200) { - data.sessionId = body.sessionId; - data.browserVersion = body.value.version; - request["delete"]("".concat(url, "/").concat(data.sessionId), function () { - callback(null, data.browserVersion); - }); - } else { - error = 'Error connecting to browser driver.'; - callback(error); - } - }); - }; - - this._stopBrowserDriver = function (callback) { - if (_this.child) { - var _options = { - child: _this.child, - prefix: 'browserdriver' - }; - processHelper.kill(_options, function (err, res) { - _this.child = null; - callback(err, res); - }); - } else { - callback(null); - } - }; - - this._spawnSync = function (commandToRun) { - var endLine = new RegExp("".concat(os.EOL), 'g'); - var commandOptions = commandToRun.split(' '); - var command = commandOptions.shift(); - var commandResult = spawnSync(command, commandOptions); - - if (commandResult.status !== 0 && commandResult.error) { - if (commandResult.error.code === 'ENOENT') { - return 'No such file or directory'; - } else { - return "Error ".concat(commandResult.error.code); - } - } else { - var commandToReturn = ''; - - _.each(commandResult.output, function (output) { - if (output && output.length) { - commandToReturn += output.toString().trim(); - } - }); - - return commandToReturn.replace(endLine, ', '); - } - }; -} - -module.exports = Versions; \ No newline at end of file From affbdd5d287c7fb0f65f4fd490a0c490ba09cc41 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 09:17:37 -0400 Subject: [PATCH 08/29] #140 Now the dist directory should get created when this repo is downloaded from Git --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 5c1f9e9..8e2c249 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "scripts": { "watch": "npm-watch", + "install": "node ./scripts/prepublish.js", "prepublish": "node ./scripts/prepublish.js", "lint": "eslint ./src", "lintfix": "eslint ./src --fix", From eaf14c54f3fe27ea03e1e2824de6d19085489931 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 13:14:25 -0400 Subject: [PATCH 09/29] Revert "#140 Now the dist directory should get created when this repo is downloaded from Git" This reverts commit affbdd5d --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 8e2c249..5c1f9e9 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ }, "scripts": { "watch": "npm-watch", - "install": "node ./scripts/prepublish.js", "prepublish": "node ./scripts/prepublish.js", "lint": "eslint ./src", "lintfix": "eslint ./src --fix", From 4f434a0f5e52a411af0067f6e7478bba944cd656 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 13:15:12 -0400 Subject: [PATCH 10/29] Making the Chimp Debug log show up correctly. --- src/lib/babel-register.js | 2 +- src/lib/options-loader.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/babel-register.js b/src/lib/babel-register.js index 6471289..e1d1e55 100644 --- a/src/lib/babel-register.js +++ b/src/lib/babel-register.js @@ -1,5 +1,5 @@ require('@babel/register')({ - 'presets': ['@babel/env'] + presets: ['@babel/env'], }); require('@babel/polyfill'); diff --git a/src/lib/options-loader.js b/src/lib/options-loader.js index c0740a2..8d27e2f 100644 --- a/src/lib/options-loader.js +++ b/src/lib/options-loader.js @@ -25,6 +25,12 @@ module.exports = { } const defaultOptions = this._requireFile(this._getDefaultConfigFilePath()); const options = merge(defaultOptions, userOptions); + + // Turn up the log level if chimp debug is set set to true. + if (options.debug === true || options.debug === 'true') { + log.setLevel('debug'); + } + log.debug('[chimp] Chimp options are', options); return options; }, From 997a8bd00aaa970e0ac9d2168f8bcd48c8eb884e Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 13:20:30 -0400 Subject: [PATCH 11/29] Trying to deploy to npm because this package can't be used through npm. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c1f9e9..11fb026 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "chimpy", + "name": "cherry-chimpy-beta", "version": "0.54.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ From 5180c14d6c4bcc14301a05fc5c8068757534c988 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 13:52:30 -0400 Subject: [PATCH 12/29] Trying to deploy on my own. --- HISTORY.md | 6 ++++++ package.json | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index eb95915..42df44c 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,12 @@ +# 0.55.0 +* Published everything in TheBrainFamily/Chimpy 0.54.0 +* Fixed a bug around Chimp exiting incorrectly on hook failure +* Upgraded Chromedriver to 74 + # 0.54.0 * Somehow the retry didn't show up in npm package, moved things around a bit. (Łukasz Gandecki) * Removed the extra wait when running chimpy directly (Łukasz Gandecki) + # 0.53.0 * Added the retry feature (Łukasz Gandecki) diff --git a/package.json b/package.json index 11fb026..2ff6f10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy-beta", - "version": "0.54.0", + "version": "0.55.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From 8560409f2ee619e9b05f075da630d33e486d52e1 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Thu, 16 May 2019 13:56:42 -0400 Subject: [PATCH 13/29] Changing the package name to not include beta. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2ff6f10..e6dbd01 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "cherry-chimpy-beta", + "name": "cherry-chimpy", "version": "0.55.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ From c5a7640a7874f0c02a9a40a3061b3ae714ed395d Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Fri, 17 May 2019 14:07:58 -0400 Subject: [PATCH 14/29] Added 0.54.1 for Chromedriver 73 --- HISTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index 42df44c..2fe13e2 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -3,6 +3,9 @@ * Fixed a bug around Chimp exiting incorrectly on hook failure * Upgraded Chromedriver to 74 +# 0.54.1 +* Upgraded Chromedriver to 73 + # 0.54.0 * Somehow the retry didn't show up in npm package, moved things around a bit. (Łukasz Gandecki) * Removed the extra wait when running chimpy directly (Łukasz Gandecki) From 7fa236761b73301734d3224a745d75e99a684e22 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Fri, 17 May 2019 18:34:29 +0000 Subject: [PATCH 15/29] Because apparently we need Chrome 73 in our docker container --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e6dbd01..c72b913 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.55.0", + "version": "0.54.1", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "^74.0.0", + "chromedriver": "^73.0.0", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From 73f2fa7563eada4023755bc10d58120c1e8b84fc Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Fri, 17 May 2019 18:37:27 +0000 Subject: [PATCH 16/29] Changing it back for future Chrome 74 usage. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c72b913..e6dbd01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.54.1", + "version": "0.55.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "^73.0.0", + "chromedriver": "^74.0.0", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From 04dfd13aa2ed9eecaa4dbe060553fb3a0b34017c Mon Sep 17 00:00:00 2001 From: KonstantinosGiannelo Date: Wed, 12 Jun 2019 16:05:55 +0300 Subject: [PATCH 17/29] Created version 0.56.0 with ChromeDriver 75.0.3770.8. --- package-lock.json | 176 +++++++++++++++++++++++++++++++++++++++------- package.json | 4 +- 2 files changed, 151 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a5c9fd..9444ac4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "chimpy", - "version": "0.54.0", + "name": "cherry-chimpy", + "version": "0.55.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1899,6 +1899,31 @@ } } }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "12.0.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz", + "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==" + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -2735,11 +2760,11 @@ } }, "chromedriver": { - "version": "73.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-73.0.0.tgz", - "integrity": "sha512-RnZOTgAa3prPmA1QDHtrsEhppDGiosND5O/0ukWwGuU+EglCBHvYl1x3Mh/YypMIkmydRyq50XPrNYZadsM6rQ==", + "version": "75.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-75.0.0.tgz", + "integrity": "sha512-bUThqrWQn41agNxV58vT0uxUqDryhNKEcMiJ6Iu0KF8pDDH0vzlnlre9BRz+dO95cwoBAilgwQUx9ig91zIC/Q==", "requires": { - "del": "^3.0.0", + "del": "^4.1.1", "extract-zip": "^1.6.7", "mkdirp": "^0.5.1", "request": "^2.88.0", @@ -2800,16 +2825,17 @@ } }, "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "requires": { + "@types/glob": "^7.1.1", "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" } }, "extend": { @@ -2838,6 +2864,19 @@ "mime-types": "^2.1.12" } }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -2881,6 +2920,27 @@ "sshpk": "^1.7.0" } }, + "is-path-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", + "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", @@ -2905,9 +2965,9 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "qs": { "version": "6.5.2", @@ -2941,6 +3001,14 @@ "uuid": "^3.3.2" } }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3334,6 +3402,21 @@ "meteor-promise": "^0.8.0", "stack-chain": "^1.3.5", "stacktrace-js": "^1.3.0" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "d": { @@ -5692,6 +5775,17 @@ "hoek": "2.x.x", "joi": "6.x.x", "wreck": "5.x.x" + }, + "dependencies": { + "wreck": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-5.6.1.tgz", + "integrity": "sha1-r/ADBAATiJ11YZtccYcN0qjdBpo=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + } } }, "heavy": { @@ -5702,6 +5796,19 @@ "boom": "2.x.x", "hoek": "2.x.x", "joi": "5.x.x" + }, + "dependencies": { + "joi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-5.1.0.tgz", + "integrity": "sha1-FSrQfbjunGQBmX/1/SwSiWBwv1g=", + "requires": { + "hoek": "^2.2.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + } + } } }, "hoek": { @@ -6338,12 +6445,14 @@ "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true }, "is-path-in-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, "requires": { "is-path-inside": "^1.0.0" } @@ -6352,6 +6461,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, "requires": { "path-is-inside": "^1.0.1" } @@ -6486,6 +6596,11 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -7217,6 +7332,11 @@ } } }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -7622,9 +7742,9 @@ } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" }, "package-json": { "version": "4.0.1", @@ -7866,9 +7986,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", + "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==" }, "punycode": { "version": "1.4.1", @@ -8270,6 +8390,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, "requires": { "glob": "^7.0.5" }, @@ -8277,6 +8398,7 @@ "glob": { "version": "7.1.1", "resolved": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9009,9 +9131,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, diff --git a/package.json b/package.json index e6dbd01..a72d1e0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.55.0", + "version": "0.56.0", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "^74.0.0", + "chromedriver": "75.0.3770.8", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From f930bc981d8514e6dcd43e5cdfb0e0ada60ee205 Mon Sep 17 00:00:00 2001 From: KonstantinosGiannelo Date: Wed, 12 Jun 2019 17:17:46 +0300 Subject: [PATCH 18/29] Fixed the version for ChromeDriver. --- package-lock.json | 54 +++++++++-------------------------------------- package.json | 2 +- 2 files changed, 11 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9444ac4..38e3bbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.55.0", + "version": "0.56.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4953,10 +4953,10 @@ "bundled": true, "optional": 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": { @@ -5130,8 +5130,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -5183,8 +5183,8 @@ "bundled": 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": { @@ -5306,7 +5306,7 @@ "bundled": true, "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -5775,17 +5775,6 @@ "hoek": "2.x.x", "joi": "6.x.x", "wreck": "5.x.x" - }, - "dependencies": { - "wreck": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-5.6.1.tgz", - "integrity": "sha1-r/ADBAATiJ11YZtccYcN0qjdBpo=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - } } }, "heavy": { @@ -5796,19 +5785,6 @@ "boom": "2.x.x", "hoek": "2.x.x", "joi": "5.x.x" - }, - "dependencies": { - "joi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-5.1.0.tgz", - "integrity": "sha1-FSrQfbjunGQBmX/1/SwSiWBwv1g=", - "requires": { - "hoek": "^2.2.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" - } - } } }, "hoek": { @@ -6596,11 +6572,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -7332,11 +7303,6 @@ } } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", diff --git a/package.json b/package.json index a72d1e0..ae5b602 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "75.0.3770.8", + "chromedriver": "75.0.0", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From 169d502487b78474ddc4b26ba4a76a5d9ea5dbfd Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Mon, 12 Aug 2019 14:36:26 +0000 Subject: [PATCH 19/29] Upgrading to Chrome 76 --- HISTORY.md | 16 ++- README.md | 14 +- package-lock.json | 325 +++++++++++++--------------------------------- package.json | 4 +- 4 files changed, 109 insertions(+), 250 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 2fe13e2..e20b847 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,16 @@ -# 0.55.0 -* Published everything in TheBrainFamily/Chimpy 0.54.0 -* Fixed a bug around Chimp exiting incorrectly on hook failure +# 0.57.1 +* Upgraded Chromedriver to 76 +* Updated the README doc + +# 0.57.0 +* Upgraded Chromedriver to 75.0.0 + +# 0.56.0 +* Upgraded Chromedriver to 75.0.3770.8 + +# 0.55.0 +* Published everything in TheBrainFamily/Chimpy 0.54.0 +* Fixed a bug around Chimp exiting incorrectly on hook failure * Upgraded Chromedriver to 74 # 0.54.1 diff --git a/README.md b/README.md index 564c7f7..e2f6539 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,5 @@ -# IMPORTANT ANNOUNCEMENT - July 22nd, 2018 +This is a fork of [*Chimpy*](https://github.com/TheBrainFamily/chimpy), which will be developed and maintained by [TheBrain team](http://team.thebrain.pro). Unfortunately Chimpy does not use the latest ChromeDriver and we needed it. It also includes a couple of patches. -The Chimp that you know and love is now being split into two separate projects, both of which are intended to help you deliver higher quality faster. +See the [History](https://github.com/CherryCircle/chimpy/blob/master/HISTORY.md) to figure out which version contains the correct ChromeDriver you are looking for. -The first is [*Chimpy*](https://github.com/TheBrainFamily/chimpy), which will be developed and maintained by [TheBrain team](http://team.thebrain.pro). This project will continue evolving and supporting the current thinking behind Chimp 1.x. - -The second is [*Chimp 2.0*](https://github.com/xolvio/chimp), which will be developed and maintained by [Xolv.io](http://xolv.io). This project will be built from scratch based on the learnings made while using Chimp 1.x in the field. - -For more details about this decision, [please see the full announcement here.](https://medium.com/@sam_hatoum/the-future-of-chimp-js-e911f8e9aaa6) - ---- - -Access the [documentation site here.](https://thebrainfamily.github.io/chimpy) +Access the [original documentation here.](https://thebrainfamily.github.io/chimpy) diff --git a/package-lock.json b/package-lock.json index 38e3bbc..d177160 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,15 +44,13 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "optional": true + "dev": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -71,7 +69,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -245,7 +242,6 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -258,7 +254,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -291,8 +286,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -313,14 +307,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -335,20 +327,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -465,8 +454,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -478,7 +466,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -493,7 +480,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -501,14 +487,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -527,7 +511,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -608,8 +591,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -621,7 +603,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -707,8 +688,7 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -744,7 +724,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -764,7 +743,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -808,14 +786,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -891,8 +867,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "optional": true + "dev": true }, "is-glob": { "version": "4.0.0", @@ -909,7 +884,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -919,7 +893,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -930,15 +903,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true + "dev": true }, "lodash": { "version": "4.17.11", @@ -1920,9 +1891,9 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "12.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.8.tgz", - "integrity": "sha512-b8bbUOTwzIY3V5vDTY1fIJ+ePKDUBqt2hC2woVGotdQQhG/2Sh62HOKHrT7ab+VerXAcPyAiTEipPu/FsreUtg==" + "version": "12.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", + "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==" }, "abab": { "version": "1.0.4", @@ -2129,8 +2100,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "optional": true + "dev": true }, "array-union": { "version": "1.0.2", @@ -2185,8 +2155,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "optional": true + "dev": true }, "async": { "version": "0.9.2", @@ -2377,7 +2346,6 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "optional": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -2393,7 +2361,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -2403,7 +2370,6 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -2413,7 +2379,6 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -2423,7 +2388,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2434,15 +2398,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true + "dev": true } } }, @@ -2623,7 +2585,6 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "optional": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -2640,8 +2601,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -2760,9 +2720,9 @@ } }, "chromedriver": { - "version": "75.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-75.0.0.tgz", - "integrity": "sha512-bUThqrWQn41agNxV58vT0uxUqDryhNKEcMiJ6Iu0KF8pDDH0vzlnlre9BRz+dO95cwoBAilgwQUx9ig91zIC/Q==", + "version": "76.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-76.0.0.tgz", + "integrity": "sha512-jGyqs0N+lMo9iaNQxGKNPiLJWb2L9s2rwbRr1jJeQ37n6JQ1+5YMGviv/Fx5Z08vBWYbAvrKEzFsuYf8ppl+lw==", "requires": { "del": "^4.1.1", "extract-zip": "^1.6.7", @@ -2772,9 +2732,9 @@ }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -2864,19 +2824,6 @@ "mime-types": "^2.1.12" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", @@ -2921,9 +2868,9 @@ } }, "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, "is-path-in-cwd": { "version": "2.1.0", @@ -3007,12 +2954,27 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, "tough-cookie": { "version": "2.4.3", @@ -3041,7 +3003,6 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "optional": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -3054,7 +3015,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3063,8 +3023,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -3118,7 +3077,6 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "optional": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -3164,8 +3122,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true, - "optional": true + "dev": true }, "compress-commons": { "version": "1.2.0", @@ -3222,8 +3179,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "optional": true + "dev": true }, "core-js": { "version": "2.5.1", @@ -3473,8 +3429,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "optional": true + "dev": true }, "deep-extend": { "version": "0.4.2", @@ -3505,7 +3460,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "optional": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -3516,7 +3470,6 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -3526,7 +3479,6 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -3536,7 +3488,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -3547,15 +3498,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true + "dev": true } } }, @@ -4320,7 +4269,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, - "optional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -4331,7 +4279,6 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "optional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -4586,7 +4533,6 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "optional": true, "requires": { "map-cache": "^0.2.2" } @@ -4653,8 +4599,7 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "optional": true + "bundled": true }, "aproba": { "version": "1.1.1", @@ -4711,7 +4656,6 @@ "block-stream": { "version": "0.0.9", "bundled": true, - "optional": true, "requires": { "inherits": "2.0.3" } @@ -4735,8 +4679,7 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "caseless": { "version": "0.12.0", @@ -4750,8 +4693,7 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "combined-stream": { "version": "1.0.5", @@ -4768,13 +4710,11 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "cryptiles": { "version": "2.0.5", @@ -4837,8 +4777,7 @@ }, "extsprintf": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "forever-agent": { "version": "0.6.1", @@ -4857,13 +4796,11 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "fstream": { "version": "1.0.11", "bundled": true, - "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -4914,7 +4851,6 @@ "glob": { "version": "7.1.2", "bundled": true, - "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4926,8 +4862,7 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true, - "optional": true + "bundled": true }, "har-schema": { "version": "1.0.5", @@ -4961,8 +4896,7 @@ }, "hoek": { "version": "2.16.3", - "bundled": true, - "optional": true + "bundled": true }, "http-signature": { "version": "1.1.1", @@ -4977,7 +4911,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4985,8 +4918,7 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true + "bundled": true }, "ini": { "version": "1.3.4", @@ -4996,7 +4928,6 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "optional": true, "requires": { "number-is-nan": "1.0.1" } @@ -5008,8 +4939,7 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "isstream": { "version": "0.1.2", @@ -5086,7 +5016,6 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "optional": true, "requires": { "brace-expansion": "1.1.7" } @@ -5099,7 +5028,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5163,7 +5091,6 @@ "once": { "version": "1.4.0", "bundled": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5189,8 +5116,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, - "optional": true + "bundled": true }, "performance-now": { "version": "0.2.0", @@ -5199,8 +5125,7 @@ }, "process-nextick-args": { "version": "1.0.7", - "bundled": true, - "optional": true + "bundled": true }, "punycode": { "version": "1.4.1", @@ -5233,7 +5158,6 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "optional": true, "requires": { "buffer-shims": "~1.0.0", "core-util-is": "~1.0.0", @@ -5276,15 +5200,13 @@ "rimraf": { "version": "2.6.1", "bundled": true, - "optional": true, "requires": { "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.0.1", - "bundled": true, - "optional": true + "bundled": true }, "semver": { "version": "5.3.0", @@ -5335,7 +5257,6 @@ "string-width": { "version": "1.0.2", "bundled": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5345,7 +5266,6 @@ "string_decoder": { "version": "1.0.1", "bundled": true, - "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -5358,7 +5278,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5371,7 +5290,6 @@ "tar": { "version": "2.2.1", "bundled": true, - "optional": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", @@ -5421,8 +5339,7 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "uuid": { "version": "3.0.1", @@ -5447,8 +5364,7 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true } } }, @@ -5493,8 +5409,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "optional": true + "dev": true }, "getpass": { "version": "0.1.7", @@ -6041,7 +5956,6 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, - "optional": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -6052,8 +5966,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -6062,7 +5975,6 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, - "optional": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -6073,7 +5985,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -6083,7 +5994,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -6095,7 +6005,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, - "optional": true, "requires": { "is-buffer": "^1.1.5" } @@ -6261,7 +6170,6 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" } @@ -6305,7 +6213,6 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" } @@ -6321,7 +6228,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "optional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -6332,8 +6238,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "optional": true + "dev": true } } }, @@ -6453,7 +6358,6 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "optional": true, "requires": { "isobject": "^3.0.1" }, @@ -6462,8 +6366,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -7121,8 +7024,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "optional": true + "dev": true }, "map-stream": { "version": "0.1.0", @@ -7135,7 +7037,6 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, - "optional": true, "requires": { "object-visit": "^1.0.0" } @@ -7207,7 +7108,6 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, - "optional": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -7218,7 +7118,6 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "optional": true, "requires": { "is-plain-object": "^2.0.4" } @@ -7545,7 +7444,6 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, - "optional": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -7557,7 +7455,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -7574,7 +7471,6 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, - "optional": true, "requires": { "isobject": "^3.0.0" }, @@ -7583,8 +7479,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -7612,7 +7507,6 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, - "optional": true, "requires": { "isobject": "^3.0.1" }, @@ -7621,8 +7515,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -7762,8 +7655,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "optional": true + "dev": true }, "path-dirname": { "version": "1.0.2", @@ -7952,9 +7844,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.32", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", - "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" }, "punycode": { "version": "1.4.1", @@ -8168,7 +8060,6 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "optional": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -8344,8 +8235,7 @@ "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "optional": true + "dev": true }, "rgb2hex": { "version": "0.1.0", @@ -8405,7 +8295,6 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, - "optional": true, "requires": { "ret": "~0.1.10" } @@ -8573,7 +8462,6 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, - "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8586,7 +8474,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -8648,7 +8535,6 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, - "optional": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -8664,15 +8550,13 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "optional": true + "dev": true }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -8682,7 +8566,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -8692,7 +8575,6 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, - "optional": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -8705,8 +8587,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true, - "optional": true + "dev": true } } }, @@ -8715,7 +8596,6 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, - "optional": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -8727,7 +8607,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^1.0.0" } @@ -8737,7 +8616,6 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -8747,7 +8625,6 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^6.0.0" } @@ -8757,7 +8634,6 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -8768,15 +8644,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true, - "optional": true + "dev": true } } }, @@ -8785,7 +8659,6 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, - "optional": true, "requires": { "kind-of": "^3.2.0" } @@ -8854,7 +8727,6 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, - "optional": true, "requires": { "extend-shallow": "^3.0.0" } @@ -8943,7 +8815,6 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, - "optional": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -8954,7 +8825,6 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "optional": true, "requires": { "is-descriptor": "^0.1.0" } @@ -9249,7 +9119,6 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" } @@ -9259,7 +9128,6 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, - "optional": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -9272,7 +9140,6 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, - "optional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -9283,7 +9150,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { "kind-of": "^3.0.2" } @@ -9435,7 +9301,6 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, - "optional": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -9448,7 +9313,6 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { "is-extendable": "^0.1.0" } @@ -9458,7 +9322,6 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, - "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -9482,7 +9345,6 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, - "optional": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -9493,7 +9355,6 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, - "optional": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -9505,7 +9366,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, - "optional": true, "requires": { "isarray": "1.0.0" } @@ -9516,15 +9376,13 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "optional": true + "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "optional": true + "dev": true } } }, @@ -9611,8 +9469,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "optional": true + "dev": true }, "util-deprecate": { "version": "1.0.2", diff --git a/package.json b/package.json index ae5b602..ed4370a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.56.0", + "version": "0.57.1", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", @@ -82,7 +82,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "~1.6.0", - "chromedriver": "75.0.0", + "chromedriver": "^76.0.0", "colors": "1.1.2", "commander": "^2.9.0", "cucumber": "xolvio/cucumber-js#v1.3.0-chimp.6", From 829802922854c0288801b8e33b22b3cff653e7b4 Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Mon, 12 Aug 2019 14:36:38 +0000 Subject: [PATCH 20/29] Upgrading to Chrome 76 --- package-lock.json | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d177160..9359b83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "0.56.0", + "version": "0.57.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -307,12 +307,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -327,17 +329,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -454,7 +459,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -466,6 +472,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -480,6 +487,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -487,12 +495,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -511,6 +521,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -591,7 +602,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -603,6 +615,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -724,6 +737,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", From 4c49c57724af5419a91ad0bfe2ca7f64d5237dcc Mon Sep 17 00:00:00 2001 From: Ryan Shillington Date: Mon, 12 Aug 2019 14:45:17 +0000 Subject: [PATCH 21/29] Fixing a typo in the README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2f6539..1b80be3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -This is a fork of [*Chimpy*](https://github.com/TheBrainFamily/chimpy), which will be developed and maintained by [TheBrain team](http://team.thebrain.pro). Unfortunately Chimpy does not use the latest ChromeDriver and we needed it. It also includes a couple of patches. +This is a fork of [*Chimpy*](https://github.com/TheBrainFamily/chimpy), which is developed and maintained by [TheBrain team](http://team.thebrain.pro). Unfortunately Chimpy does not use the latest ChromeDriver and we needed it. It also includes a couple of patches. See the [History](https://github.com/CherryCircle/chimpy/blob/master/HISTORY.md) to figure out which version contains the correct ChromeDriver you are looking for. From a244b884f5b6e084663cad715ba8d1227b2d7b16 Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Wed, 11 Sep 2019 17:32:35 +0300 Subject: [PATCH 22/29] Upgraded to chromedriver version 77. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35196b8..6c7fbbc 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "^2.1.6", - "chromedriver": "^76.0.0", + "chromedriver": "^77.0.0", "colors": "1.1.2", "commander": "^2.20.0", "cucumber": "TheBrainFamily/cucumber-js#v1.3.0-chimp.7", From 0fad8748a61f03702f07ad64c3722ac29cd0824b Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Wed, 11 Sep 2019 17:50:45 +0300 Subject: [PATCH 23/29] Upgraded The cherry-chimpy version to 1.2.2 --- HISTORY.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 34a3e71..2360cc3 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,6 @@ +# 1.2.2 +* Upgraded Chromedriver to 77 + # 1.2.1 * Upgraded Chromedriver to 76 * Included everything in TheBrainFamily/Chimpy 1.2.0 diff --git a/package.json b/package.json index 6c7fbbc..7bce8da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "1.2.1", + "version": "1.2.2", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From 6e1aaf30aaa7963a301243ebecde495f0934b0bb Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Wed, 11 Sep 2019 19:18:10 +0300 Subject: [PATCH 24/29] Switched to our own cherry-chromedriver npm package --- HISTORY.md | 3 + package-lock.json | 11083 -------------------------------------------- package.json | 2 +- 3 files changed, 4 insertions(+), 11084 deletions(-) delete mode 100644 package-lock.json diff --git a/HISTORY.md b/HISTORY.md index 2360cc3..7e9e829 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,6 @@ +# 1.2.3 +* Switched to using our own cherry-chromedriver npm package + # 1.2.2 * Upgraded Chromedriver to 77 diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a8ede93..0000000 --- a/package-lock.json +++ /dev/null @@ -1,11083 +0,0 @@ -{ - "name": "cherry-chimpy", - "version": "1.2.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/cli": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.1.2.tgz", - "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", - "requires": { - "chokidar": "^2.0.3", - "commander": "^2.8.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.10", - "mkdirp": "^0.5.1", - "output-file-sync": "^2.0.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "optional": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "optional": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "optional": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "optional": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "optional": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "optional": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" - }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true - } - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "optional": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "optional": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "optional": true - }, - "output-file-sync": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", - "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", - "requires": { - "graceful-fs": "^4.1.11", - "is-plain-obj": "^1.1.0", - "mkdirp": "^0.5.1" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - } - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "requires": { - "@babel/types": "^7.4.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" - }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "requires": { - "lodash": "^4.17.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" - } - }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", - "requires": { - "regexp-tree": "^0.1.6" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", - "requires": { - "regenerator-transform": "^0.14.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" - } - }, - "@babel/polyfill": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", - "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "core-js": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", - "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - } - } - }, - "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "@babel/register": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.4.4.tgz", - "integrity": "sha512-sn51H88GRa00+ZoMqCVgOphmswG4b7mhf9VOB0LUBAieykq2GnRFerlN+JQkO/ntT7wz4jaHNSRPg9IdMPEUkA==", - "requires": { - "core-js": "^3.0.0", - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.11", - "mkdirp": "^0.5.1", - "pirates": "^4.0.0", - "source-map-support": "^0.5.9" - }, - "dependencies": { - "core-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.2.tgz", - "integrity": "sha512-3poRGjbu56leCtZCZCzCgQ7GcKOflDFnjWIepaPFUsM0IXUBrne10sl3aa2Bkcz3+FjRdIxBe9dAMhIJmEnQNA==" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } - } - }, - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - } - } - }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" - } - }, - "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - } - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" - }, - "@types/node": { - "version": "12.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", - "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==" - }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "dev": true - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", - "dev": true - }, - "acorn-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", - "dev": true, - "requires": { - "acorn": "^2.1.0" - }, - "dependencies": { - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "^3.0.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "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-jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", - "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", - "dev": true, - "requires": { - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.2.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-istanbul": { - "version": "4.1.6", - "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", - "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", - "dev": true, - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.10.1", - "test-exclude": "^4.2.1" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-preset-jest": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", - "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^23.2.0", - "babel-plugin-syntax-object-rest-spread": "^6.13.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "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-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "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" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", - "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=" - }, - "bl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", - "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.x.x" - } - }, - "boxen": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.1.tgz", - "integrity": "sha1-DxHn/jRO25OXl3/BPt5/ZNlWSB0=", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" - }, - "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", - "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.3.0.tgz", - "integrity": "sha512-XykNc84nIOC32vZ9euOKbmGAP69JUkXDtBQfLq88c8/6J/gZi/t14A+l/p/9EM2TcT5xNC1MKPCrvO3LVUpVPw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "caniuse-lite": { - "version": "1.0.30000971", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", - "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==" - }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", - "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" - }, - "dependencies": { - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - } - } - }, - "chai-as-promised": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", - "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "child-process-debug": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/child-process-debug/-/child-process-debug-0.0.7.tgz", - "integrity": "sha1-VOEfuBw7b5Spa2MfrKk+0a9/itA=" - }, - "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "optional": true - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" - } - } - }, - "chromedriver": { - "version": "76.0.0", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-76.0.0.tgz", - "integrity": "sha512-jGyqs0N+lMo9iaNQxGKNPiLJWb2L9s2rwbRr1jJeQ37n6JQ1+5YMGviv/Fx5Z08vBWYbAvrKEzFsuYf8ppl+lw==", - "requires": { - "del": "^4.1.1", - "extract-zip": "^1.6.7", - "mkdirp": "^0.5.1", - "request": "^2.88.0", - "tcp-port-used": "^1.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - } - }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - } - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "requires": { - "color-name": "^1.1.1" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" - }, - "core-js-compat": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.2.tgz", - "integrity": "sha512-X0Ch5f6itrHxhg5HSJucX6nNLNAGr+jq+biBh6nPGc3YAWz2a8p/ZIZY8cUkDzSRNG54omAuu3hoEF8qZbu/6Q==", - "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.2", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==" - } - } - }, - "core-js-pure": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.2.tgz", - "integrity": "sha512-5ckIdBF26B3ldK9PM177y2ZcATP2oweam9RskHSoqfZCrJ2As6wVg8zJ1zTriFsZf6clj/N1ThDFRGaomMsh9w==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cover": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/cover/-/cover-0.2.9.tgz", - "integrity": "sha1-JiAp37MXFNSAQ/7ZHt5lhZOVXdQ=", - "dev": true, - "requires": { - "cli-table": "0.0.x", - "underscore": "1.2.x", - "underscore.string": "2.0.x", - "which": "1.0.x" - }, - "dependencies": { - "cli-table": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.0.2.tgz", - "integrity": "sha1-mChn4WQ1Mlxmwgih5xuVM26jCTs=", - "dev": true, - "requires": { - "colors": "0.3.0" - } - }, - "colors": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.3.0.tgz", - "integrity": "sha1-wkfWTTTbDKTcjkPz7NbamNCvlOc=", - "dev": true - }, - "underscore": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz", - "integrity": "sha1-6NpiQaoG9k3yRzuyWQuMF8hMPH4=", - "dev": true - }, - "underscore.string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.0.0.tgz", - "integrity": "sha1-dHCFilSguzVg0DfaVtzGe1GB4Ro=", - "dev": true - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - } - } - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.x.x" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-parse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", - "requires": { - "css": "^2.0.0" - } - }, - "css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=" - }, - "cssom": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", - "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=" - }, - "cucumber": { - "version": "github:TheBrainFamily/cucumber-js#43fe9e4bc9a4481a01666ebc7c89b9a88c6e31a3", - "from": "github:TheBrainFamily/cucumber-js#v1.3.0-chimp.7", - "requires": { - "camel-case": "^3.0.0", - "cli-table": "^0.3.1", - "co": "^4.6.0", - "colors": "^1.1.2", - "commander": "^2.9.0", - "duration": "^0.2.0", - "fibers": "^3.1.0", - "figures": "1.7.0", - "gherkin": "4.0.0", - "glob": "^7.0.0", - "is-generator": "^1.0.2", - "lodash": "^4.0.0", - "meteor-promise": "^0.8.0", - "stack-chain": "^1.3.5", - "stacktrace-js": "^1.3.0" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - }, - "dependencies": { - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - } - } - }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "ddp-ejson": { - "version": "0.8.1-3", - "resolved": "https://registry.npmjs.org/ddp-ejson/-/ddp-ejson-0.8.1-3.tgz", - "integrity": "sha1-6dZ0Zqt4m9dOfZcHSjbiQGkO7sI=", - "requires": { - "ddp-underscore-patched": "0.8.1-2" - } - }, - "ddp-underscore-patched": { - "version": "0.8.1-2", - "resolved": "https://registry.npmjs.org/ddp-underscore-patched/-/ddp-underscore-patched-0.8.1-2.tgz", - "integrity": "sha1-ZaQU6fIuxagqoWOG40NmtI/Ozx0=" - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "deepmerge": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", - "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==" - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "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": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "dev": true - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duration": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", - "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", - "requires": { - "d": "1", - "es5-ext": "~0.10.46" - }, - "dependencies": { - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ejs": { - "version": "2.5.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", - "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" - }, - "electron-to-chromium": { - "version": "1.3.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz", - "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - }, - "dependencies": { - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - } - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", - "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", - "requires": { - "stackframe": "^0.3.1" - } - }, - "es-abstract": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.2.tgz", - "integrity": "sha512-dvhwFL3yjQxNNsOWx6exMlaDrRHCRGMQlnx5lsXDCZ/J7G/frgIIl94zhZSp/galVAYp7VzPi1OrAHta89/yGQ==", - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, - "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" - } - }, - "es5-ext": { - "version": "0.10.30", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", - "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", - "requires": { - "es6-iterator": "2", - "es6-symbol": "~3.1" - } - }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-symbol": "^3.1" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "es6-promise": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", - "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, - "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "espree": "^3.4.0", - "esquery": "^1.0.0", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "glob": "^7.0.3", - "globals": "^9.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" - }, - "dependencies": { - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "^1.3.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - } - } - }, - "eslint-config-airbnb": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz", - "integrity": "sha1-aI0V08J2wMdTrlOMkqRDl9dq5G4=", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^10.0.0" - } - }, - "eslint-config-airbnb-base": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz", - "integrity": "sha1-8X1OUpksHUXRt3E++81ezQ5+BQY=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "eslint-plugin-babel": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", - "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", - "dev": true - }, - "eslint-plugin-import": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", - "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", - "has": "^1.0.3", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "read-pkg-up": "^2.0.0", - "resolve": "^1.10.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz", - "integrity": "sha1-TjXLcbin23AqxBXIBuuOjZ6mxl0=", - "dev": true, - "requires": { - "damerau-levenshtein": "^1.0.0", - "jsx-ast-utils": "^1.0.0", - "object-assign": "^4.0.1" - } - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "dev": true, - "requires": { - "array.prototype.find": "^2.0.1", - "doctrine": "^1.2.2", - "has": "^1.0.1", - "jsx-ast-utils": "^1.3.4", - "object.assign": "^4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - } - } - }, - "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", - "dev": true, - "requires": { - "acorn": "^5.1.1", - "acorn-jsx": "^3.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, - "requires": { - "estraverse": "^4.1.0", - "object-assign": "^4.0.1" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - }, - "dependencies": { - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - } - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, - "requires": { - "merge": "^1.2.0" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extract-zip": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz", - "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=", - "requires": { - "concat-stream": "1.6.0", - "debug": "2.2.0", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "faye-websocket": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.4.tgz", - "integrity": "sha1-iFk0x57/sECVSeDAo4Ae0XpAza0=", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "~1.2.0" - } - }, - "fg-lodash": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", - "integrity": "sha1-mINSU39CfaavIiEpu2OsyknmL6M=", - "requires": { - "lodash": "^2.4.1", - "underscore.string": "~2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" - } - } - }, - "fibers": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.1.1.tgz", - "integrity": "sha512-dl3Ukt08rHVQfY8xGD0ODwyjwrRALtaghuqGH2jByYX1wpY+nAnRQjJ6Dbqq0DnVgNVQ9yibObzbF4IlPyiwPw==", - "requires": { - "detect-libc": "^1.0.3" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "freeport": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz", - "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true, - "optional": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true, - "optional": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "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": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "requires": { - "globule": "^1.0.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gherkin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", - "integrity": "sha1-edzgTRIj6kO0hip2vlzo+JwSwyw=" - }, - "git-release-notes": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/git-release-notes/-/git-release-notes-0.0.2.tgz", - "integrity": "sha1-Oa0tY2WzUMrJSxFUQxClXOJ2TxI=", - "dev": true, - "requires": { - "ejs": "0.8.x", - "optimist": "0.3" - }, - "dependencies": { - "ejs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz", - "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg=", - "dev": true - }, - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "dev": true, - "requires": { - "wordwrap": "~0.0.2" - } - } - } - }, - "glob": { - "version": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", - "from": "github:lucetius/node-glob#chimp", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - } - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "hapi": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz", - "integrity": "sha1-h+N6Bum0meiXkOLcERqpZotuYX8=", - "requires": { - "accept": "1.x.x", - "ammo": "1.x.x", - "boom": "^2.5.x", - "call": "2.x.x", - "catbox": "^4.2.x", - "catbox-memory": "1.x.x", - "cryptiles": "2.x.x", - "h2o2": "4.x.x", - "heavy": "3.x.x", - "hoek": "^2.14.x", - "inert": "2.x.x", - "iron": "2.x.x", - "items": "1.x.x", - "joi": "6.x.x", - "kilt": "^1.1.x", - "mimos": "2.x.x", - "peekaboo": "1.x.x", - "qs": "4.x.x", - "shot": "1.x.x", - "statehood": "2.x.x", - "subtext": "1.x.x", - "topo": "1.x.x", - "vision": "2.x.x" - }, - "dependencies": { - "accept": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/accept/-/accept-1.0.0.tgz", - "integrity": "sha1-g++IOWi4WkDFARYEKCoiD/AeYq0=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - }, - "ammo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ammo/-/ammo-1.0.0.tgz", - "integrity": "sha1-4FlIG/aAhzj66G1GT3L6DBLWeoU=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - }, - "boom": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.7.2.tgz", - "integrity": "sha1-2tYo2Jf3/S4yzIIZfxMweXHPg1Q=", - "requires": { - "hoek": "2.x.x" - } - }, - "call": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/call/-/call-2.0.1.tgz", - "integrity": "sha1-SbQnCZQ96JoyJYqpEbWHUeI3eg4=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - }, - "catbox": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/catbox/-/catbox-4.3.0.tgz", - "integrity": "sha1-IiN3vWfxKRrA4l0AAC0GWp3385o=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x", - "joi": "6.x.x" - } - }, - "catbox-memory": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.1.tgz", - "integrity": "sha1-QqUvgLye+nJmAeltQBYDNhJIGig=", - "requires": { - "hoek": "2.x.x" - } - }, - "cryptiles": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz", - "integrity": "sha1-CeoXdbnhx95+YKmdQqtvCM4aEoU=", - "requires": { - "boom": "2.x.x" - } - }, - "h2o2": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/h2o2/-/h2o2-4.0.1.tgz", - "integrity": "sha1-eg4rztHZcXjsVs48ykjgxW3un40=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x", - "joi": "6.x.x", - "wreck": "5.x.x" - } - }, - "heavy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz", - "integrity": "sha1-/QEIdiExYy+IVIontVQSws9SKwA=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x", - "joi": "5.x.x" - } - }, - "hoek": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.14.0.tgz", - "integrity": "sha1-gSEWkfUqWoNa5J7b8eickANHaqQ=" - }, - "inert": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/inert/-/inert-2.1.5.tgz", - "integrity": "sha1-eybZTEHGLAPsHU726LRe1WuDSFk=", - "requires": { - "ammo": "1.x.x", - "boom": "2.x.x", - "hoek": "2.x.x", - "items": "1.x.x", - "joi": "6.x.x", - "lru-cache": "2.6.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz", - "integrity": "sha1-JnUZDM0bBwHsL2UqTQ09QA12wN0=" - } - } - }, - "iron": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/iron/-/iron-2.1.2.tgz", - "integrity": "sha1-WR2RiiVAdTxEbY5DfNzwz6gBEU8=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x" - } - }, - "items": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/items/-/items-1.1.0.tgz", - "integrity": "sha1-rZ1VhAsimGDLPRYLMidMLUvZ4mI=" - }, - "joi": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.4.1.tgz", - "integrity": "sha1-9Q9CRTVgBo5jg9oVrC0w3Xzra24=", - "requires": { - "hoek": "^2.2.x", - "isemail": "1.x.x", - "moment": "2.x.x", - "topo": "1.x.x" - }, - "dependencies": { - "isemail": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.1.1.tgz", - "integrity": "sha1-4Mj23D9HCX53dzlcaJYnGqJWw7U=" - }, - "moment": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.10.3.tgz", - "integrity": "sha1-CruZ8wf2UhgwjGk17+KcV7Ggon8=" - } - } - }, - "kilt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz", - "integrity": "sha1-d7SmFjyn+lshN6iMFzNCFuwj1ds=", - "requires": { - "hoek": "2.x.x" - } - }, - "mimos": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz", - "integrity": "sha1-wyQXF+dblZkr54esfdbbGptTmx4=", - "requires": { - "hoek": "2.x.x", - "mime-db": "1.x.x" - }, - "dependencies": { - "mime-db": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.14.0.tgz", - "integrity": "sha1-1WHxC27mbbUflK5leilRp0IX7YM=" - } - } - }, - "peekaboo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/peekaboo/-/peekaboo-1.0.0.tgz", - "integrity": "sha1-wNspJq1lTSygH3ymUKtFkadk/EI=" - }, - "qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", - "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" - }, - "shot": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/shot/-/shot-1.5.3.tgz", - "integrity": "sha1-SGEHREO8VHLCNRthpGtOrsAH9Xo=", - "requires": { - "hoek": "2.x.x" - } - }, - "statehood": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz", - "integrity": "sha1-AfFwtmxeklqvZ5qdMiulkYb8AAk=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "iron": "2.x.x", - "items": "1.x.x", - "joi": "6.x.x" - } - }, - "subtext": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/subtext/-/subtext-1.1.1.tgz", - "integrity": "sha1-DJGCWuZdUXhVWT2DHjPvdaKEFWs=", - "requires": { - "boom": "2.x.x", - "content": "1.x.x", - "hoek": "2.x.x", - "pez": "1.x.x", - "qs": "4.x.x", - "wreck": "6.x.x" - }, - "dependencies": { - "content": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content/-/content-1.0.1.tgz", - "integrity": "sha1-gD60s7eJVGD9jGnGhMd1RmmvG6E=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - }, - "pez": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pez/-/pez-1.0.0.tgz", - "integrity": "sha1-hEMYpc5wku7d/6KV4YB5rHefoBg=", - "requires": { - "b64": "2.x.x", - "boom": "2.x.x", - "content": "1.x.x", - "hoek": "2.x.x", - "nigel": "1.x.x" - }, - "dependencies": { - "b64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/b64/-/b64-2.0.0.tgz", - "integrity": "sha1-tZlbJPR+v9nxMQF6bntdZHVvtvM=", - "requires": { - "hoek": "2.x.x" - } - }, - "nigel": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz", - "integrity": "sha1-RjmJr4gSePuqHTzJOCPb0XtDYKE=", - "requires": { - "hoek": "2.x.x", - "vise": "1.x.x" - }, - "dependencies": { - "vise": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vise/-/vise-1.0.0.tgz", - "integrity": "sha1-KDRb5N5aNB4V/SgW/Z6j5zA+jfM=", - "requires": { - "hoek": "2.x.x" - } - } - } - } - } - } - } - }, - "topo": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.0.2.tgz", - "integrity": "sha1-QhV8N8HeTTeIPM3R1skChHqGDbk=", - "requires": { - "hoek": "2.x.x" - } - }, - "vision": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vision/-/vision-2.0.1.tgz", - "integrity": "sha1-0BIlW6buQm0GlqNOHfMy/sVeZzw=", - "requires": { - "boom": "2.x.x", - "hoek": "^2.9.x", - "items": "^1.1.x", - "joi": "6.x.x" - } - }, - "wreck": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.0.0.tgz", - "integrity": "sha1-T0CGaWHl14rOBPMqa38x8/PFFjg=", - "requires": { - "boom": "2.x.x", - "hoek": "2.x.x" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", - "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - } - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "^1.0.2" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hasha": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", - "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", - "requires": { - "is-stream": "^1.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "requires": { - "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.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-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-generator": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", - "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", - "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", - "requires": { - "deep-is": "^0.1.3", - "ip-regex": "^2.1.0", - "is-url": "^1.2.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - } - } - }, - "jasmine": { - "version": "2.99.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", - "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", - "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.99.0" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "jasmine-core": { - "version": "2.99.1", - "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=" - } - } - }, - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=" - }, - "jest-cli": { - "version": "github:Sanjo/jest#7c710947eadaae4f2963c3a8c482fb33d48921ca", - "from": "github:Sanjo/jest#7c71094", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cover": "^0.2.9", - "diff": "^2.1.1", - "graceful-fs": "^4.1.2", - "istanbul": "^0.4.2", - "jsdom": "^7.2.0", - "json-stable-stringify": "^1.0.0", - "mkdirp": "^0.5.1", - "node-haste": "^1.2.8", - "object-assign": "^4.0.1", - "optimist": "^0.6.1", - "resolve": "^1.1.6", - "sane": "^1.2.0", - "which": "^1.1.1", - "worker-farm": "^1.3.1" - } - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", - "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", - "dev": true, - "requires": { - "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": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", - "dev": true - } - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", - "dev": true - }, - "kew": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", - "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true, - "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "optional": true - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", - "dev": true, - "requires": { - "lodash.assign": "^3.0.0", - "lodash.restparam": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "loglevel": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.4.1.tgz", - "integrity": "sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=" - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "^3.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", - "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "meteor-promise": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.8.7.tgz", - "integrity": "sha512-wAu9XI3+35H1YyhTnnk5QXCfdrho5n/0Ltj65DhsUwtFCuktV7hre92FjtJgBbs+RHj5/iZ8Zcbml40EGLcFTQ==" - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mocha": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", - "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.3.1", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", - "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-haste": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/node-haste/-/node-haste-1.2.8.tgz", - "integrity": "sha1-0vEOk9dWfCaJrIP8BNtNdsqnDzw=", - "dev": true, - "requires": { - "esprima-fb": "4001.1001.0-dev-harmony-fb" - }, - "dependencies": { - "esprima-fb": { - "version": "4001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-4001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-9Qn2FuZtEcLFOWomHGGe3MtxKAo=", - "dev": true - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-releases": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz", - "integrity": "sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==", - "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - } - } - }, - "nodemon": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.12.0.tgz", - "integrity": "sha1-5ThUindzQKGfhVxPCHt+Uoqj/to=", - "dev": true, - "requires": { - "chokidar": "^1.7.0", - "debug": "^2.6.8", - "es6-promise": "^3.3.1", - "ignore-by-default": "^1.0.1", - "lodash.defaults": "^3.1.2", - "minimatch": "^3.0.4", - "ps-tree": "^1.1.0", - "touch": "^3.1.0", - "undefsafe": "0.0.3", - "update-notifier": "^2.2.0" - }, - "dependencies": { - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "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" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "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": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-install-package": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", - "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npm-watch": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.1.9.tgz", - "integrity": "sha1-MJkQcs6M7g1ywMdaxkjBSgObmQI=", - "dev": true, - "requires": { - "nodemon": "^1.3.8", - "through2": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "object.assign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", - "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.0", - "object-keys": "^1.0.10" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "once": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz", - "integrity": "sha1-FRr4a/wfCMS58H0GqyUP/L61ZYE=" - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "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": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - } - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "phantomjs-prebuilt": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.15.tgz", - "integrity": "sha1-IPhugtM0nFBZF1J3RbekEeCLOQM=", - "requires": { - "es6-promise": "~4.0.3", - "extract-zip": "~1.6.5", - "fs-extra": "~1.0.0", - "hasha": "~2.2.0", - "kew": "~0.7.0", - "progress": "~1.1.8", - "request": "~2.81.0", - "request-progress": "~2.0.1", - "which": "~1.2.10" - }, - "dependencies": { - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "requires": { - "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" - } - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", - "dev": true, - "requires": { - "event-stream": "~3.3.0" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "quibble": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.4.1.tgz", - "integrity": "sha1-YQfPOfWEIzsyIHJJZe1rtuQtTZs=", - "dev": true, - "requires": { - "lodash": "^4.17.2" - } - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "mute-stream": "0.0.5" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" - }, - "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", - "requires": { - "private": "^0.1.6" - } - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==" - }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==" - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", - "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", - "requires": { - "throttleit": "^1.0.0" - } - }, - "requestretry": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.5.0.tgz", - "integrity": "sha1-7RV7ulNSbt6z7DKo5wSkmYvs5ic=", - "requires": { - "fg-lodash": "0.0.2", - "request": "^2.62.x" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } - }, - "resolve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", - "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "rgb2hex": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.9.tgz", - "integrity": "sha512-32iuQzhOjyT+cv9aAFRBJ19JgHwzQwbjUhH3Fj2sWW2EEGAW8fpFrDFP5ndoKDxJaLO06x1hE3kyuIFrUQtybQ==" - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "^7.0.5" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "^2.1.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "*" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-1.7.0.tgz", - "integrity": "sha1-s1ebzLRclM8gNVzIESSZDf00bjA=", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "exec-sh": "^0.2.0", - "fb-watchman": "^2.0.0", - "minimatch": "^3.0.2", - "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.10.0" - } - }, - "saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "requires": { - "https-proxy-agent": "^2.2.1" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "selenium-standalone": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.16.0.tgz", - "integrity": "sha512-tl7HFH2FOxJD1is7Pzzsl0pY4vuePSdSWiJdPn+6ETBkpeJDiuzou8hBjvWYWpD+eIVcOrmy3L0R3GzkdHLzDw==", - "requires": { - "async": "^2.6.2", - "commander": "^2.19.0", - "cross-spawn": "^6.0.5", - "debug": "^4.1.1", - "lodash": "^4.17.11", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "progress": "2.0.3", - "request": "2.88.0", - "tar-stream": "2.0.0", - "urijs": "^1.19.1", - "which": "^1.3.1", - "yauzl": "^2.10.0" - }, - "dependencies": { - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "~1.2.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } - }, - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.x.x" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "^1.0.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz", - "integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==", - "requires": { - "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", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" - }, - "stack-generator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", - "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", - "requires": { - "stackframe": "^1.0.2" - }, - "dependencies": { - "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" - } - } - }, - "stackframe": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", - "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=" - }, - "stacktrace-gps": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz", - "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", - "requires": { - "source-map": "0.5.6", - "stackframe": "~0.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - } - } - }, - "stacktrace-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", - "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", - "requires": { - "error-stack-parser": "^1.3.6", - "stack-generator": "^1.0.7", - "stacktrace-gps": "^2.4.3" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-2.4.0.tgz", - "integrity": "sha1-xi0RAj6yH+LZsIe+A5om3zsioJ0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0", - "is-regexp": "^1.0.0" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", - "slice-ansi": "0.0.4", - "string-width": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz", - "integrity": "sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==", - "requires": { - "bl": "^2.2.0", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "tcp-port-used": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz", - "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==", - "requires": { - "debug": "4.1.0", - "is2": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "test-exclude": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", - "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^2.3.11", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "testdouble": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-1.11.2.tgz", - "integrity": "sha1-i2ouQYrR2pmR5HkgPjdSjf2B1Vc=", - "dev": true, - "requires": { - "lodash": "^4.15.0", - "quibble": "^0.4.0", - "stringify-object": "^2.4.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "requires": { - "punycode": "^1.4.1" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", - "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "uglify-js": { - "version": "3.5.15", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.15.tgz", - "integrity": "sha512-fe7aYFotptIddkwcm6YuA0HmknBZ52ZzOsUxZEdhhkSsz7RfjHDX2QDxwKTiv4JQ5t5NhfmpgAK+J7LiDhKSqg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "undefsafe": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", - "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "optional": true - }, - "update-notifier": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", - "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", - "dev": true, - "requires": { - "boxen": "^1.0.0", - "chalk": "^1.0.0", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "urijs": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", - "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==" - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "~1.0.0", - "spdx-expression-parse": "~1.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "watch": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", - "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", - "dev": true - }, - "wdio-dot-reporter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/wdio-dot-reporter/-/wdio-dot-reporter-0.0.10.tgz", - "integrity": "sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==" - }, - "wdio-sync": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/wdio-sync/-/wdio-sync-0.7.3.tgz", - "integrity": "sha512-ukASSHOQmOxaz5HTILR0jykqlHBtAPsBpMtwhpiG0aW9uc7SO7PF+E5LhVvTG4ypAh+UGmY3rTjohOsqDr39jw==", - "requires": { - "babel-runtime": "^6.26.0", - "fibers": "^3.0.0", - "object.assign": "^4.0.3" - } - }, - "webdriverio": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.14.4.tgz", - "integrity": "sha512-Knp2vzuzP5c5ybgLu+zTwy/l1Gh0bRP4zAr8NWcrStbuomm9Krn9oRF0rZucT6AyORpXinETzmeowFwIoo7mNA==", - "requires": { - "archiver": "~2.1.0", - "babel-runtime": "^6.26.0", - "css-parse": "^2.0.0", - "css-value": "~0.0.1", - "deepmerge": "~2.0.1", - "ejs": "~2.5.6", - "gaze": "~1.1.2", - "glob": "~7.1.1", - "grapheme-splitter": "^1.0.2", - "inquirer": "~3.3.0", - "json-stringify-safe": "~5.0.1", - "mkdirp": "~0.5.1", - "npm-install-package": "~2.1.0", - "optimist": "~0.6.1", - "q": "~1.5.0", - "request": "^2.83.0", - "rgb2hex": "^0.1.9", - "safe-buffer": "~5.1.1", - "supports-color": "~5.0.0", - "url": "~0.11.0", - "wdio-dot-reporter": "~0.0.8", - "wgxpath": "~1.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "supports-color": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.0.1.tgz", - "integrity": "sha512-7FQGOlSQ+AQxBNXJpVDj8efTA/FtyB5wcNE1omXXJ0cq6jm1jjDwuROlYDbnzHqdNPqliWFhcioCWSyav+xBnA==", - "requires": { - "has-flag": "^2.0.0" - } - } - } - }, - "webidl-conversions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", - "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", - "dev": true - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=" - }, - "wgxpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wgxpath/-/wgxpath-1.0.0.tgz", - "integrity": "sha1-7vikudVYzEla06mit1FZfs2a9pA=" - }, - "whatwg-url-compat": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", - "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", - "dev": true, - "requires": { - "tr46": "~0.0.1" - } - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", - "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", - "dev": true, - "requires": { - "string-width": "^1.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", - "dev": true - }, - "xolvio-ddp": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/xolvio-ddp/-/xolvio-ddp-0.12.3.tgz", - "integrity": "sha1-NqarlhKyQLWg0cCoNJCK8XwLjwI=", - "requires": { - "bluebird": "^2.9.24", - "ddp-ejson": "0.8.1-3", - "ddp-underscore-patched": "0.8.1-2", - "faye-websocket": "~0.9.4", - "request": "2.53.x" - }, - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=" - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=" - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "requires": { - "readable-stream": "~1.0.26" - } - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - }, - "caseless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", - "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=" - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=" - }, - "forever-agent": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", - "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=" - }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "requires": { - "async": "~0.9.0", - "combined-stream": "~0.0.4", - "mime-types": "~2.0.3" - } - }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "requires": { - "mime-db": "~1.12.0" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "oauth-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", - "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=" - }, - "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "request": { - "version": "2.53.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz", - "integrity": "sha1-GAo66St7Y5gC5PlUXdj83rcddgw=", - "requires": { - "aws-sign2": "~0.5.0", - "bl": "~0.9.0", - "caseless": "~0.9.0", - "combined-stream": "~0.0.5", - "forever-agent": "~0.5.0", - "form-data": "~0.2.0", - "hawk": "~2.3.0", - "http-signature": "~0.10.0", - "isstream": "~0.1.1", - "json-stringify-safe": "~5.0.0", - "mime-types": "~2.0.1", - "node-uuid": "~1.4.0", - "oauth-sign": "~0.6.0", - "qs": "~2.3.1", - "stringstream": "~0.0.4", - "tough-cookie": ">=0.12.0", - "tunnel-agent": "~0.4.0" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" - } - } - }, - "xolvio-jasmine-expect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xolvio-jasmine-expect/-/xolvio-jasmine-expect-1.1.0.tgz", - "integrity": "sha1-vCud1ghCMR8EV59agtzqaisxnH0=", - "requires": { - "jasmine-core": "^2.4.1" - } - }, - "xolvio-sync-webdriverio": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/xolvio-sync-webdriverio/-/xolvio-sync-webdriverio-10.0.0.tgz", - "integrity": "sha512-aZ0U39oVnnBxU+J6bgVDpHZYTRPkywKvtzuadYra/rv9pmttVmZI/p5a6l5hexpMYtKSCH2Q7AScEYK3vvqCPQ==", - "requires": { - "fibers": "^3.1.0", - "meteor-promise": "^0.8.2", - "underscore": "^1.8.3", - "wdio-sync": "^0.7.0", - "webdriverio": "^4.14.4", - "xolvio-fiber-utils": "3.0.0" - }, - "dependencies": { - "xolvio-fiber-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xolvio-fiber-utils/-/xolvio-fiber-utils-3.0.0.tgz", - "integrity": "sha512-4IhmAUH1tYuAsSO9A8+VaQj3gjQ3qXVm3kGyu2AjljMa/q9iWk1am2bVztzUio08ha/MRGX2cUgEt6xohBYftg==", - "requires": { - "fibers": "^3.1.0", - "underscore": "^1.8.3" - } - } - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" - } - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - } - } - } -} diff --git a/package.json b/package.json index 7bce8da..c8c0251 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "^2.1.6", - "chromedriver": "^77.0.0", + "cherry-chromedriver": "77.0.1", "colors": "1.1.2", "commander": "^2.20.0", "cucumber": "TheBrainFamily/cucumber-js#v1.3.0-chimp.7", From 2c674abb0f89d9bccb7f147ee2f6966b845cd2fa Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Wed, 11 Sep 2019 19:22:00 +0300 Subject: [PATCH 25/29] Switched to our own cherry-chromedriver npm package --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c8c0251..bc4d3bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "1.2.2", + "version": "1.2.3", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From 4d3596735f601bfacdec1146d7d5b0226f84866a Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Wed, 11 Sep 2019 20:05:41 +0300 Subject: [PATCH 26/29] Fixed cherry-chimp to use cherry-chromedriver. --- package.json | 2 +- src/bin/default.js | 2 +- src/lib/chromedriver.js | 2 +- src/lib/versions.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index bc4d3bc..3157867 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "1.2.3", + "version": "1.2.4", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", diff --git a/src/bin/default.js b/src/bin/default.js index eaa3778..c47b9cd 100644 --- a/src/bin/default.js +++ b/src/bin/default.js @@ -73,7 +73,7 @@ module.exports = { chrome: { // check for more recent versions of chrome driver here: // http://chromedriver.storage.googleapis.com/index.html - version: require('../../package').dependencies.chromedriver.substring(1), + version: require('../../package').dependencies["cherry-chromedriver"].substring(1), arch: process.arch, baseURL: 'https://chromedriver.storage.googleapis.com' }, diff --git a/src/lib/chromedriver.js b/src/lib/chromedriver.js index f6cb727..4018b85 100644 --- a/src/lib/chromedriver.js +++ b/src/lib/chromedriver.js @@ -1,4 +1,4 @@ -var chromedriver = require('chromedriver'), +var chromedriver = require('cherry-chromedriver'), processHelper = require('./process-helper.js'), fs = require('fs'), log = require('./log'); diff --git a/src/lib/versions.js b/src/lib/versions.js index 43ec386..6926684 100644 --- a/src/lib/versions.js +++ b/src/lib/versions.js @@ -6,7 +6,7 @@ const _ = require('underscore'), request = require('request'), spawnSync = require('child_process').spawnSync, selenium = require('selenium-standalone'), - chromedriver = require('chromedriver'), + chromedriver = require('cherry-chromedriver'), booleanHelper = require('./boolean-helper'), processHelper = require('./process-helper.js'); From b55e03e34ac342565609aea1e6484e6e22c0a3c1 Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Thu, 12 Dec 2019 21:42:07 +0200 Subject: [PATCH 27/29] Switched to our own cherry-chromedriver npm package --- HISTORY.md | 3 +++ package.json | 4 ++-- src/bin/default.js | 2 +- src/lib/chromedriver.js | 2 +- src/lib/versions.js | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 7e9e829..9189dd7 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,6 @@ +#1.2.6 +* Switched to using the official chromedriver repository + # 1.2.3 * Switched to using our own cherry-chromedriver npm package diff --git a/package.json b/package.json index 3157867..0963925 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "1.2.4", + "version": "1.2.6", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", @@ -83,7 +83,7 @@ "chai-as-promised": "^6.0.0", "child-process-debug": "0.0.7", "chokidar": "^2.1.6", - "cherry-chromedriver": "77.0.1", + "chromedriver": "79.0.0", "colors": "1.1.2", "commander": "^2.20.0", "cucumber": "TheBrainFamily/cucumber-js#v1.3.0-chimp.7", diff --git a/src/bin/default.js b/src/bin/default.js index c47b9cd..eaa3778 100644 --- a/src/bin/default.js +++ b/src/bin/default.js @@ -73,7 +73,7 @@ module.exports = { chrome: { // check for more recent versions of chrome driver here: // http://chromedriver.storage.googleapis.com/index.html - version: require('../../package').dependencies["cherry-chromedriver"].substring(1), + version: require('../../package').dependencies.chromedriver.substring(1), arch: process.arch, baseURL: 'https://chromedriver.storage.googleapis.com' }, diff --git a/src/lib/chromedriver.js b/src/lib/chromedriver.js index 4018b85..f6cb727 100644 --- a/src/lib/chromedriver.js +++ b/src/lib/chromedriver.js @@ -1,4 +1,4 @@ -var chromedriver = require('cherry-chromedriver'), +var chromedriver = require('chromedriver'), processHelper = require('./process-helper.js'), fs = require('fs'), log = require('./log'); diff --git a/src/lib/versions.js b/src/lib/versions.js index 6926684..43ec386 100644 --- a/src/lib/versions.js +++ b/src/lib/versions.js @@ -6,7 +6,7 @@ const _ = require('underscore'), request = require('request'), spawnSync = require('child_process').spawnSync, selenium = require('selenium-standalone'), - chromedriver = require('cherry-chromedriver'), + chromedriver = require('chromedriver'), booleanHelper = require('./boolean-helper'), processHelper = require('./process-helper.js'); From 73a5de38309fcf4f1d8b694f9017c56f3ddbdf5b Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Fri, 13 Dec 2019 10:23:11 +0200 Subject: [PATCH 28/29] Switched to our own cherry-chromedriver npm package --- HISTORY.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 9189dd7..0854767 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,7 @@ +#1.2.7 +* Pushing a new version as 1.2.6 did not work on CircleCI. +Just making sure no mistakes were done during the previous release. + #1.2.6 * Switched to using the official chromedriver repository diff --git a/package.json b/package.json index 0963925..1b2de25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cherry-chimpy", - "version": "1.2.6", + "version": "1.2.7", "description": "Develop acceptance tests & end-to-end tests with realtime feedback.", "keywords": [ "simian", From 5373b07a920d510b0407e26139624b78a3afedf5 Mon Sep 17 00:00:00 2001 From: kgiannelos Date: Fri, 13 Dec 2019 10:44:26 +0200 Subject: [PATCH 29/29] Switched to our own cherry-chromedriver npm package --- package-lock.json | 8924 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8924 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1aff8bd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8924 @@ +{ + "name": "cherry-chimpy", + "version": "1.2.7", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/cli": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.1.2.tgz", + "integrity": "sha512-K3WDlpBPGpoW11SLKFEBhMsITomPovsrZ/wnM3y+WStbytukDXC0OBic3yQp+j058QUw0+R/jfx2obwp1fOzcA==", + "requires": { + "chokidar": "^2.0.3", + "commander": "^2.8.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.10", + "mkdirp": "^0.5.1", + "output-file-sync": "^2.0.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", + "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.5", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/generator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", + "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", + "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", + "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-call-delegate": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", + "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", + "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "requires": { + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/helper-define-map": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", + "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/types": "^7.7.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", + "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "requires": { + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", + "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "requires": { + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", + "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", + "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", + "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", + "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", + "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-wrap-function": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", + "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", + "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "requires": { + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", + "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helpers": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", + "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "requires": { + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", + "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", + "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", + "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.7.4" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", + "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.7.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", + "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", + "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", + "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", + "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", + "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", + "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", + "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.7.4" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", + "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", + "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", + "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-define-map": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", + "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", + "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", + "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", + "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", + "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", + "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", + "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "requires": { + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", + "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", + "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", + "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "requires": { + "@babel/helper-module-transforms": "^7.7.5", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", + "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "requires": { + "@babel/helper-module-transforms": "^7.7.5", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.7.4", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", + "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", + "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "requires": { + "@babel/helper-module-transforms": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", + "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", + "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", + "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.7.4" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", + "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", + "requires": { + "@babel/helper-call-delegate": "^7.7.4", + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", + "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", + "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", + "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz", + "integrity": "sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", + "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", + "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", + "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", + "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", + "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", + "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/polyfill": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.7.0.tgz", + "integrity": "sha512-/TS23MVvo34dFmf8mwCisCbWGrfhbiWZSwBo6HkADTBhUa2Q/jWltyY/tpofz/b6/RIhqaqQcquptCirqIhOaQ==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/preset-env": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", + "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", + "requires": { + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", + "@babel/plugin-proposal-json-strings": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-syntax-json-strings": "^7.7.4", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", + "@babel/plugin-syntax-top-level-await": "^7.7.4", + "@babel/plugin-transform-arrow-functions": "^7.7.4", + "@babel/plugin-transform-async-to-generator": "^7.7.4", + "@babel/plugin-transform-block-scoped-functions": "^7.7.4", + "@babel/plugin-transform-block-scoping": "^7.7.4", + "@babel/plugin-transform-classes": "^7.7.4", + "@babel/plugin-transform-computed-properties": "^7.7.4", + "@babel/plugin-transform-destructuring": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.4", + "@babel/plugin-transform-duplicate-keys": "^7.7.4", + "@babel/plugin-transform-exponentiation-operator": "^7.7.4", + "@babel/plugin-transform-for-of": "^7.7.4", + "@babel/plugin-transform-function-name": "^7.7.4", + "@babel/plugin-transform-literals": "^7.7.4", + "@babel/plugin-transform-member-expression-literals": "^7.7.4", + "@babel/plugin-transform-modules-amd": "^7.7.5", + "@babel/plugin-transform-modules-commonjs": "^7.7.5", + "@babel/plugin-transform-modules-systemjs": "^7.7.4", + "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", + "@babel/plugin-transform-new-target": "^7.7.4", + "@babel/plugin-transform-object-super": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.4", + "@babel/plugin-transform-property-literals": "^7.7.4", + "@babel/plugin-transform-regenerator": "^7.7.5", + "@babel/plugin-transform-reserved-words": "^7.7.4", + "@babel/plugin-transform-shorthand-properties": "^7.7.4", + "@babel/plugin-transform-spread": "^7.7.4", + "@babel/plugin-transform-sticky-regex": "^7.7.4", + "@babel/plugin-transform-template-literals": "^7.7.4", + "@babel/plugin-transform-typeof-symbol": "^7.7.4", + "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/types": "^7.7.4", + "browserslist": "^4.6.0", + "core-js-compat": "^3.4.7", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + } + }, + "@babel/register": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.4.tgz", + "integrity": "sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==", + "requires": { + "find-cache-dir": "^2.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", + "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, + "@babel/template": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", + "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/traverse": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", + "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "12.12.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz", + "integrity": "sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA==" + }, + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "dev": true, + "requires": { + "acorn": "^2.1.0" + }, + "dependencies": { + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "archiver": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", + "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.2.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-includes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz", + "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.find": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", + "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.13.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", + "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + } + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "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.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-jest": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", + "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-preset-jest": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "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" + }, + "dependencies": { + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "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" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz", + "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.x.x" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=" + }, + "browserslist": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", + "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "requires": { + "caniuse-lite": "^1.0.30001015", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.42" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001015", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", + "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==" + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "requires": { + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" + } + }, + "chai-as-promised": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", + "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", + "requires": { + "check-error": "^1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "child-process-debug": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/child-process-debug/-/child-process-debug-0.0.7.tgz", + "integrity": "sha1-VOEfuBw7b5Spa2MfrKk+0a9/itA=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chromedriver": { + "version": "79.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-79.0.0.tgz", + "integrity": "sha512-DO29C7ntJfzu6q1vuoWwCON8E9x5xzopt7Q41A7Dr7hBKcdNpGw1l9DTt9b+l1qviOWiJLGsD+jHw21ptEHubA==", + "requires": { + "del": "^4.1.1", + "extract-zip": "^1.6.7", + "mkdirp": "^0.5.1", + "request": "^2.88.0", + "tcp-port-used": "^1.0.1" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "requires": { + "colors": "1.0.3" + }, + "dependencies": { + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + } + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compress-commons": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", + "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-js-compat": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.5.0.tgz", + "integrity": "sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg==", + "requires": { + "browserslist": "^4.8.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cover": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/cover/-/cover-0.2.9.tgz", + "integrity": "sha1-JiAp37MXFNSAQ/7ZHt5lhZOVXdQ=", + "dev": true, + "requires": { + "cli-table": "0.0.x", + "underscore": "1.2.x", + "underscore.string": "2.0.x", + "which": "1.0.x" + }, + "dependencies": { + "cli-table": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.0.2.tgz", + "integrity": "sha1-mChn4WQ1Mlxmwgih5xuVM26jCTs=", + "dev": true, + "requires": { + "colors": "0.3.0" + } + }, + "colors": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.3.0.tgz", + "integrity": "sha1-wkfWTTTbDKTcjkPz7NbamNCvlOc=", + "dev": true + }, + "underscore": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz", + "integrity": "sha1-6NpiQaoG9k3yRzuyWQuMF8hMPH4=", + "dev": true + }, + "underscore.string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.0.0.tgz", + "integrity": "sha1-dHCFilSguzVg0DfaVtzGe1GB4Ro=", + "dev": true + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "requires": { + "crc": "^3.4.4", + "readable-stream": "^2.0.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "requires": { + "boom": "2.x.x" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-parse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", + "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", + "requires": { + "css": "^2.0.0" + } + }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=" + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=" + }, + "cucumber": { + "version": "github:TheBrainFamily/cucumber-js#43fe9e4bc9a4481a01666ebc7c89b9a88c6e31a3", + "from": "github:TheBrainFamily/cucumber-js#v1.3.0-chimp.7", + "requires": { + "camel-case": "^3.0.0", + "cli-table": "^0.3.1", + "co": "^4.6.0", + "colors": "^1.1.2", + "commander": "^2.9.0", + "duration": "^0.2.0", + "fibers": "^3.1.0", + "figures": "1.7.0", + "gherkin": "4.0.0", + "glob": "^7.0.0", + "is-generator": "^1.0.2", + "lodash": "^4.0.0", + "meteor-promise": "^0.8.0", + "stack-chain": "^1.3.5", + "stacktrace-js": "^1.3.0" + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "ddp-ejson": { + "version": "0.8.1-3", + "resolved": "https://registry.npmjs.org/ddp-ejson/-/ddp-ejson-0.8.1-3.tgz", + "integrity": "sha1-6dZ0Zqt4m9dOfZcHSjbiQGkO7sI=", + "requires": { + "ddp-underscore-patched": "0.8.1-2" + } + }, + "ddp-underscore-patched": { + "version": "0.8.1-2", + "resolved": "https://registry.npmjs.org/ddp-underscore-patched/-/ddp-underscore-patched-0.8.1-2.tgz", + "integrity": "sha1-ZaQU6fIuxagqoWOG40NmtI/Ozx0=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.0.1.tgz", + "integrity": "sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "requires": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ejs": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", + "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" + }, + "electron-to-chromium": { + "version": "1.3.322", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", + "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + }, + "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + } + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", + "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", + "requires": { + "stackframe": "^0.3.1" + } + }, + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", + "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "dev": true, + "requires": { + "babel-code-frame": "^6.16.0", + "chalk": "^1.1.3", + "concat-stream": "^1.5.2", + "debug": "^2.1.1", + "doctrine": "^2.0.0", + "escope": "^3.6.0", + "espree": "^3.4.0", + "esquery": "^1.0.0", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "glob": "^7.0.3", + "globals": "^9.14.0", + "ignore": "^3.2.0", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.7.5", + "strip-bom": "^3.0.0", + "strip-json-comments": "~2.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "^1.3.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "eslint-config-airbnb": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-13.0.0.tgz", + "integrity": "sha1-aI0V08J2wMdTrlOMkqRDl9dq5G4=", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^10.0.0" + } + }, + "eslint-config-airbnb-base": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz", + "integrity": "sha1-8X1OUpksHUXRt3E++81ezQ5+BQY=", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz", + "integrity": "sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-babel": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", + "integrity": "sha1-eSAqDjV1fdkngJGbIzbx+i/lPB4=", + "dev": true + }, + "eslint-plugin-import": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", + "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.1", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-2.2.3.tgz", + "integrity": "sha1-TjXLcbin23AqxBXIBuuOjZ6mxl0=", + "dev": true, + "requires": { + "damerau-levenshtein": "^1.0.0", + "jsx-ast-utils": "^1.0.0", + "object-assign": "^4.0.1" + } + }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "dev": true, + "requires": { + "array.prototype.find": "^2.0.1", + "doctrine": "^1.2.2", + "has": "^1.0.1", + "jsx-ast-utils": "^1.3.4", + "object.assign": "^4.0.4" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "exec-sh": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "dev": true, + "requires": { + "merge": "^1.2.0" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.4.tgz", + "integrity": "sha1-iFk0x57/sECVSeDAo4Ae0XpAza0=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "fg-lodash": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz", + "integrity": "sha1-mINSU39CfaavIiEpu2OsyknmL6M=", + "requires": { + "lodash": "^2.4.1", + "underscore.string": "~2.3.3" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" + } + } + }, + "fibers": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.1.1.tgz", + "integrity": "sha512-dl3Ukt08rHVQfY8xGD0ODwyjwrRALtaghuqGH2jByYX1wpY+nAnRQjJ6Dbqq0DnVgNVQ9yibObzbF4IlPyiwPw==", + "requires": { + "detect-libc": "^1.0.3" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "freeport": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz", + "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + }, + "dependencies": { + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "requires": { + "is-property": "^1.0.2" + } + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "^1.0.0" + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gherkin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.0.0.tgz", + "integrity": "sha1-edzgTRIj6kO0hip2vlzo+JwSwyw=" + }, + "git-release-notes": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/git-release-notes/-/git-release-notes-0.0.2.tgz", + "integrity": "sha1-Oa0tY2WzUMrJSxFUQxClXOJ2TxI=", + "dev": true, + "requires": { + "ejs": "0.8.x", + "optimist": "0.3" + }, + "dependencies": { + "ejs": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-0.8.8.tgz", + "integrity": "sha1-/9xW3MNdApJt1QrRNDm7xUBh1Zg=", + "dev": true + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "~0.0.2" + } + } + } + }, + "glob": { + "version": "github:lucetius/node-glob#51c7ca6e69bfbd17db5f1ea710e3f2a7a457d9ce", + "from": "github:lucetius/node-glob#chimp", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==" + }, + "handlebars": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "hapi": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/hapi/-/hapi-8.8.0.tgz", + "integrity": "sha1-h+N6Bum0meiXkOLcERqpZotuYX8=", + "requires": { + "accept": "1.x.x", + "ammo": "1.x.x", + "boom": "^2.5.x", + "call": "2.x.x", + "catbox": "^4.2.x", + "catbox-memory": "1.x.x", + "cryptiles": "2.x.x", + "h2o2": "4.x.x", + "heavy": "3.x.x", + "hoek": "^2.14.x", + "inert": "2.x.x", + "iron": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x", + "kilt": "^1.1.x", + "mimos": "2.x.x", + "peekaboo": "1.x.x", + "qs": "4.x.x", + "shot": "1.x.x", + "statehood": "2.x.x", + "subtext": "1.x.x", + "topo": "1.x.x", + "vision": "2.x.x" + }, + "dependencies": { + "accept": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/accept/-/accept-1.0.0.tgz", + "integrity": "sha1-g++IOWi4WkDFARYEKCoiD/AeYq0=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + }, + "ammo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ammo/-/ammo-1.0.0.tgz", + "integrity": "sha1-4FlIG/aAhzj66G1GT3L6DBLWeoU=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + }, + "boom": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.7.2.tgz", + "integrity": "sha1-2tYo2Jf3/S4yzIIZfxMweXHPg1Q=", + "requires": { + "hoek": "2.x.x" + } + }, + "call": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/call/-/call-2.0.1.tgz", + "integrity": "sha1-SbQnCZQ96JoyJYqpEbWHUeI3eg4=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + }, + "catbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/catbox/-/catbox-4.3.0.tgz", + "integrity": "sha1-IiN3vWfxKRrA4l0AAC0GWp3385o=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "6.x.x" + } + }, + "catbox-memory": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/catbox-memory/-/catbox-memory-1.1.1.tgz", + "integrity": "sha1-QqUvgLye+nJmAeltQBYDNhJIGig=", + "requires": { + "hoek": "2.x.x" + } + }, + "cryptiles": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz", + "integrity": "sha1-CeoXdbnhx95+YKmdQqtvCM4aEoU=", + "requires": { + "boom": "2.x.x" + } + }, + "h2o2": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/h2o2/-/h2o2-4.0.1.tgz", + "integrity": "sha1-eg4rztHZcXjsVs48ykjgxW3un40=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "6.x.x", + "wreck": "5.x.x" + }, + "dependencies": { + "wreck": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-5.6.1.tgz", + "integrity": "sha1-r/ADBAATiJ11YZtccYcN0qjdBpo=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + } + } + }, + "heavy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/heavy/-/heavy-3.0.0.tgz", + "integrity": "sha1-/QEIdiExYy+IVIontVQSws9SKwA=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x", + "joi": "5.x.x" + }, + "dependencies": { + "joi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-5.1.0.tgz", + "integrity": "sha1-FSrQfbjunGQBmX/1/SwSiWBwv1g=", + "requires": { + "hoek": "^2.2.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + } + } + } + }, + "hoek": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.14.0.tgz", + "integrity": "sha1-gSEWkfUqWoNa5J7b8eickANHaqQ=" + }, + "inert": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/inert/-/inert-2.1.5.tgz", + "integrity": "sha1-eybZTEHGLAPsHU726LRe1WuDSFk=", + "requires": { + "ammo": "1.x.x", + "boom": "2.x.x", + "hoek": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x", + "lru-cache": "2.6.x" + }, + "dependencies": { + "lru-cache": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.4.tgz", + "integrity": "sha1-JnUZDM0bBwHsL2UqTQ09QA12wN0=" + } + } + }, + "iron": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/iron/-/iron-2.1.2.tgz", + "integrity": "sha1-WR2RiiVAdTxEbY5DfNzwz6gBEU8=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x" + } + }, + "items": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/items/-/items-1.1.0.tgz", + "integrity": "sha1-rZ1VhAsimGDLPRYLMidMLUvZ4mI=" + }, + "joi": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.4.1.tgz", + "integrity": "sha1-9Q9CRTVgBo5jg9oVrC0w3Xzra24=", + "requires": { + "hoek": "^2.2.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + }, + "dependencies": { + "isemail": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.1.1.tgz", + "integrity": "sha1-4Mj23D9HCX53dzlcaJYnGqJWw7U=" + }, + "moment": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.10.3.tgz", + "integrity": "sha1-CruZ8wf2UhgwjGk17+KcV7Ggon8=" + } + } + }, + "kilt": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/kilt/-/kilt-1.1.1.tgz", + "integrity": "sha1-d7SmFjyn+lshN6iMFzNCFuwj1ds=", + "requires": { + "hoek": "2.x.x" + } + }, + "mimos": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mimos/-/mimos-2.0.2.tgz", + "integrity": "sha1-wyQXF+dblZkr54esfdbbGptTmx4=", + "requires": { + "hoek": "2.x.x", + "mime-db": "1.x.x" + }, + "dependencies": { + "mime-db": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.14.0.tgz", + "integrity": "sha1-1WHxC27mbbUflK5leilRp0IX7YM=" + } + } + }, + "peekaboo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/peekaboo/-/peekaboo-1.0.0.tgz", + "integrity": "sha1-wNspJq1lTSygH3ymUKtFkadk/EI=" + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "shot": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/shot/-/shot-1.5.3.tgz", + "integrity": "sha1-SGEHREO8VHLCNRthpGtOrsAH9Xo=", + "requires": { + "hoek": "2.x.x" + } + }, + "statehood": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/statehood/-/statehood-2.1.1.tgz", + "integrity": "sha1-AfFwtmxeklqvZ5qdMiulkYb8AAk=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "iron": "2.x.x", + "items": "1.x.x", + "joi": "6.x.x" + } + }, + "subtext": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/subtext/-/subtext-1.1.1.tgz", + "integrity": "sha1-DJGCWuZdUXhVWT2DHjPvdaKEFWs=", + "requires": { + "boom": "2.x.x", + "content": "1.x.x", + "hoek": "2.x.x", + "pez": "1.x.x", + "qs": "4.x.x", + "wreck": "6.x.x" + }, + "dependencies": { + "content": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content/-/content-1.0.1.tgz", + "integrity": "sha1-gD60s7eJVGD9jGnGhMd1RmmvG6E=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + }, + "pez": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pez/-/pez-1.0.0.tgz", + "integrity": "sha1-hEMYpc5wku7d/6KV4YB5rHefoBg=", + "requires": { + "b64": "2.x.x", + "boom": "2.x.x", + "content": "1.x.x", + "hoek": "2.x.x", + "nigel": "1.x.x" + }, + "dependencies": { + "b64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/b64/-/b64-2.0.0.tgz", + "integrity": "sha1-tZlbJPR+v9nxMQF6bntdZHVvtvM=", + "requires": { + "hoek": "2.x.x" + } + }, + "nigel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nigel/-/nigel-1.0.1.tgz", + "integrity": "sha1-RjmJr4gSePuqHTzJOCPb0XtDYKE=", + "requires": { + "hoek": "2.x.x", + "vise": "1.x.x" + }, + "dependencies": { + "vise": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vise/-/vise-1.0.0.tgz", + "integrity": "sha1-KDRb5N5aNB4V/SgW/Z6j5zA+jfM=", + "requires": { + "hoek": "2.x.x" + } + } + } + } + } + } + } + }, + "topo": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.0.2.tgz", + "integrity": "sha1-QhV8N8HeTTeIPM3R1skChHqGDbk=", + "requires": { + "hoek": "2.x.x" + } + }, + "vision": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vision/-/vision-2.0.1.tgz", + "integrity": "sha1-0BIlW6buQm0GlqNOHfMy/sVeZzw=", + "requires": { + "boom": "2.x.x", + "hoek": "^2.9.x", + "items": "^1.1.x", + "joi": "6.x.x" + } + }, + "wreck": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/wreck/-/wreck-6.0.0.tgz", + "integrity": "sha1-T0CGaWHl14rOBPMqa38x8/PFFjg=", + "requires": { + "boom": "2.x.x", + "hoek": "2.x.x" + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", + "requires": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "dev": true + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "requires": { + "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.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": { + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "dependencies": { + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + } + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", + "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", + "dev": true, + "requires": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", + "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^2.1.0", + "is-url": "^1.2.2" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + } + }, + "jasmine": { + "version": "2.99.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", + "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.99.0" + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=" + }, + "jest-cli": { + "version": "github:Sanjo/jest#7c710947eadaae4f2963c3a8c482fb33d48921ca", + "from": "github:Sanjo/jest#7c71094", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "cover": "^0.2.9", + "diff": "^2.1.1", + "graceful-fs": "^4.1.2", + "istanbul": "^0.4.2", + "jsdom": "^7.2.0", + "json-stable-stringify": "^1.0.0", + "mkdirp": "^0.5.1", + "node-haste": "^1.2.8", + "object-assign": "^4.0.1", + "optimist": "^0.6.1", + "resolve": "^1.1.6", + "sane": "^1.2.0", + "which": "^1.1.1", + "worker-farm": "^1.3.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "diff": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", + "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdom": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz", + "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=", + "dev": true, + "requires": { + "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": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", + "dev": true + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "loglevel": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.4.1.tgz", + "integrity": "sha1-lbOD+Ro8J1b9SrCTZn5DCRYfK80=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "dev": true + }, + "meteor-promise": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/meteor-promise/-/meteor-promise-0.8.7.tgz", + "integrity": "sha512-wAu9XI3+35H1YyhTnnk5QXCfdrho5n/0Ltj65DhsUwtFCuktV7hre92FjtJgBbs+RHj5/iZ8Zcbml40EGLcFTQ==" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", + "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + }, + "mime-types": { + "version": "2.1.25", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", + "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "requires": { + "mime-db": "1.42.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-haste": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/node-haste/-/node-haste-1.2.8.tgz", + "integrity": "sha1-0vEOk9dWfCaJrIP8BNtNdsqnDzw=", + "dev": true, + "requires": { + "esprima-fb": "4001.1001.0-dev-harmony-fb" + }, + "dependencies": { + "esprima-fb": { + "version": "4001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-4001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-9Qn2FuZtEcLFOWomHGGe3MtxKAo=", + "dev": true + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + }, + "node-releases": { + "version": "1.1.42", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", + "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "nodemon": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", + "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", + "dev": true, + "requires": { + "chokidar": "^2.1.8", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "npm-install-package": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", + "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-watch": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/npm-watch/-/npm-watch-0.1.9.tgz", + "integrity": "sha1-MJkQcs6M7g1ywMdaxkjBSgObmQI=", + "dev": true, + "requires": { + "nodemon": "^1.3.8", + "through2": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwmatcher": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", + "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz", + "integrity": "sha1-FRr4a/wfCMS58H0GqyUP/L61ZYE=" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "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", + "word-wrap": "~1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "output-file-sync": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", + "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", + "requires": { + "graceful-fs": "^4.1.11", + "is-plain-obj": "^1.1.0", + "mkdirp": "^0.5.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse5": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", + "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "phantomjs-prebuilt": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.15.tgz", + "integrity": "sha1-IPhugtM0nFBZF1J3RbekEeCLOQM=", + "requires": { + "es6-promise": "~4.0.3", + "extract-zip": "~1.6.5", + "fs-extra": "~1.0.0", + "hasha": "~2.2.0", + "kew": "~0.7.0", + "progress": "~1.1.8", + "request": "~2.81.0", + "request-progress": "~2.0.1", + "which": "~1.2.10" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "requires": { + "ajv": "^4.9.1", + "har-schema": "^1.0.5" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "requires": { + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "requires": { + "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" + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", + "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==" + }, + "pstree.remy": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", + "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "quibble": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.4.1.tgz", + "integrity": "sha1-YQfPOfWEIzsyIHJJZe1rtuQtTZs=", + "dev": true, + "requires": { + "lodash": "^4.17.2" + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "requires": { + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" + }, + "regjsparser": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.1.tgz", + "integrity": "sha512-7LutE94sz/NKSYegK+/4E77+8DipxF+Qn2Tmu362AcmsF2NYq/wx3+ObvU90TKEhjf7hQoFXo23ajjrXP7eUgg==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "requires": { + "throttleit": "^1.0.0" + } + }, + "requestretry": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.5.0.tgz", + "integrity": "sha1-7RV7ulNSbt6z7DKo5wSkmYvs5ic=", + "requires": { + "fg-lodash": "0.0.2", + "request": "^2.62.x" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", + "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rgb2hex": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", + "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "*" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sane": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-1.7.0.tgz", + "integrity": "sha1-s1ebzLRclM8gNVzIESSZDf00bjA=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "minimatch": "^3.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.10.0" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "selenium-standalone": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.17.0.tgz", + "integrity": "sha512-5PSnDHwMiq+OCiAGlhwQ8BM9xuwFfvBOZ7Tfbw+ifkTnOy0PWbZmI1B9gPGuyGHpbQ/3J3CzIK7BYwrQ7EjtWQ==", + "requires": { + "async": "^2.6.2", + "commander": "^2.19.0", + "cross-spawn": "^6.0.5", + "debug": "^4.1.1", + "lodash": "^4.17.11", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "progress": "2.0.3", + "request": "2.88.0", + "tar-stream": "2.0.0", + "urijs": "^1.19.1", + "which": "^1.3.1", + "yauzl": "^2.10.0" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "requires": { + "hoek": "2.x.x" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "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", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" + }, + "stack-generator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", + "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", + "requires": { + "stackframe": "^1.0.2" + }, + "dependencies": { + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + } + } + }, + "stackframe": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", + "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=" + }, + "stacktrace-gps": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz", + "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", + "requires": { + "source-map": "0.5.6", + "stackframe": "~0.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "stacktrace-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", + "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", + "requires": { + "error-stack-parser": "^1.3.6", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.3" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-object": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-2.4.0.tgz", + "integrity": "sha1-xi0RAj6yH+LZsIe+A5om3zsioJ0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0", + "is-regexp": "^1.0.0" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "dev": true, + "requires": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "tar-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.0.0.tgz", + "integrity": "sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==", + "requires": { + "bl": "^2.2.0", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==", + "requires": { + "debug": "4.1.0", + "is2": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + } + }, + "test-exclude": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", + "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "testdouble": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-1.11.2.tgz", + "integrity": "sha1-i2ouQYrR2pmR5HkgPjdSjf2B1Vc=", + "dev": true, + "requires": { + "lodash": "^4.15.0", + "quibble": "^0.4.0", + "stringify-object": "^2.4.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "uglify-js": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.2.tgz", + "integrity": "sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "undefsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "dev": true, + "requires": { + "debug": "^2.2.0" + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urijs": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", + "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==" + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", + "dev": true + }, + "wdio-dot-reporter": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/wdio-dot-reporter/-/wdio-dot-reporter-0.0.10.tgz", + "integrity": "sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==" + }, + "wdio-sync": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/wdio-sync/-/wdio-sync-0.7.3.tgz", + "integrity": "sha512-ukASSHOQmOxaz5HTILR0jykqlHBtAPsBpMtwhpiG0aW9uc7SO7PF+E5LhVvTG4ypAh+UGmY3rTjohOsqDr39jw==", + "requires": { + "babel-runtime": "^6.26.0", + "fibers": "^3.0.0", + "object.assign": "^4.0.3" + } + }, + "webdriverio": { + "version": "4.14.4", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-4.14.4.tgz", + "integrity": "sha512-Knp2vzuzP5c5ybgLu+zTwy/l1Gh0bRP4zAr8NWcrStbuomm9Krn9oRF0rZucT6AyORpXinETzmeowFwIoo7mNA==", + "requires": { + "archiver": "~2.1.0", + "babel-runtime": "^6.26.0", + "css-parse": "^2.0.0", + "css-value": "~0.0.1", + "deepmerge": "~2.0.1", + "ejs": "~2.5.6", + "gaze": "~1.1.2", + "glob": "~7.1.1", + "grapheme-splitter": "^1.0.2", + "inquirer": "~3.3.0", + "json-stringify-safe": "~5.0.1", + "mkdirp": "~0.5.1", + "npm-install-package": "~2.1.0", + "optimist": "~0.6.1", + "q": "~1.5.0", + "request": "^2.83.0", + "rgb2hex": "^0.1.9", + "safe-buffer": "~5.1.1", + "supports-color": "~5.0.0", + "url": "~0.11.0", + "wdio-dot-reporter": "~0.0.8", + "wgxpath": "~1.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "supports-color": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.0.1.tgz", + "integrity": "sha512-7FQGOlSQ+AQxBNXJpVDj8efTA/FtyB5wcNE1omXXJ0cq6jm1jjDwuROlYDbnzHqdNPqliWFhcioCWSyav+xBnA==", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "webidl-conversions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz", + "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=", + "dev": true + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "wgxpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wgxpath/-/wgxpath-1.0.0.tgz", + "integrity": "sha1-7vikudVYzEla06mit1FZfs2a9pA=" + }, + "whatwg-url-compat": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz", + "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=", + "dev": true, + "requires": { + "tr46": "~0.0.1" + } + }, + "which": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xml-name-validator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", + "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "dev": true + }, + "xolvio-ddp": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/xolvio-ddp/-/xolvio-ddp-0.12.3.tgz", + "integrity": "sha1-NqarlhKyQLWg0cCoNJCK8XwLjwI=", + "requires": { + "bluebird": "^2.9.24", + "ddp-ejson": "0.8.1-3", + "ddp-underscore-patched": "0.8.1-2", + "faye-websocket": "~0.9.4", + "request": "2.53.x" + }, + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=" + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=" + }, + "bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "requires": { + "readable-stream": "~1.0.26" + } + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "caseless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", + "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=" + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "requires": { + "delayed-stream": "0.0.5" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=" + }, + "forever-agent": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", + "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=" + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", + "requires": { + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime-types": "~2.0.3" + } + }, + "hawk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", + "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", + "requires": { + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "requires": { + "asn1": "0.1.11", + "assert-plus": "^0.1.5", + "ctype": "0.5.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "requires": { + "mime-db": "~1.12.0" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + }, + "oauth-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", + "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=" + }, + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "request": { + "version": "2.53.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz", + "integrity": "sha1-GAo66St7Y5gC5PlUXdj83rcddgw=", + "requires": { + "aws-sign2": "~0.5.0", + "bl": "~0.9.0", + "caseless": "~0.9.0", + "combined-stream": "~0.0.5", + "forever-agent": "~0.5.0", + "form-data": "~0.2.0", + "hawk": "~2.3.0", + "http-signature": "~0.10.0", + "isstream": "~0.1.1", + "json-stringify-safe": "~5.0.0", + "mime-types": "~2.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.6.0", + "qs": "~2.3.1", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" + } + } + }, + "xolvio-fiber-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xolvio-fiber-utils/-/xolvio-fiber-utils-3.0.0.tgz", + "integrity": "sha512-4IhmAUH1tYuAsSO9A8+VaQj3gjQ3qXVm3kGyu2AjljMa/q9iWk1am2bVztzUio08ha/MRGX2cUgEt6xohBYftg==", + "requires": { + "fibers": "^3.1.0", + "underscore": "^1.8.3" + } + }, + "xolvio-jasmine-expect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xolvio-jasmine-expect/-/xolvio-jasmine-expect-1.1.0.tgz", + "integrity": "sha1-vCud1ghCMR8EV59agtzqaisxnH0=", + "requires": { + "jasmine-core": "^2.4.1" + } + }, + "xolvio-sync-webdriverio": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/xolvio-sync-webdriverio/-/xolvio-sync-webdriverio-10.0.0.tgz", + "integrity": "sha512-aZ0U39oVnnBxU+J6bgVDpHZYTRPkywKvtzuadYra/rv9pmttVmZI/p5a6l5hexpMYtKSCH2Q7AScEYK3vvqCPQ==", + "requires": { + "fibers": "^3.1.0", + "meteor-promise": "^0.8.2", + "underscore": "^1.8.3", + "wdio-sync": "^0.7.0", + "webdriverio": "^4.14.4", + "xolvio-fiber-utils": "3.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } + }, + "zip-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + } + } + } +}