diff --git a/packages/welcome/package-lock.json b/packages/welcome/package-lock.json
index 066116541..8c8ad9a20 100644
--- a/packages/welcome/package-lock.json
+++ b/packages/welcome/package-lock.json
@@ -16,7 +16,7 @@
"integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
"dev": true,
"requires": {
- "acorn": "3.3.0"
+ "acorn": "^3.0.4"
},
"dependencies": {
"acorn": {
@@ -33,8 +33,8 @@
"integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"dev": true,
"requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
+ "co": "^4.6.0",
+ "json-stable-stringify": "^1.0.1"
}
},
"ajv-keywords": {
@@ -67,7 +67,7 @@
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "sprintf-js": "1.0.3"
+ "sprintf-js": "~1.0.2"
}
},
"array-union": {
@@ -76,7 +76,7 @@
"integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
"dev": true,
"requires": {
- "array-uniq": "1.0.3"
+ "array-uniq": "^1.0.1"
}
},
"array-uniq": {
@@ -105,7 +105,7 @@
"dev": true,
"optional": true,
"requires": {
- "safer-buffer": "2.1.2"
+ "safer-buffer": "~2.1.0"
}
},
"assert-plus": {
@@ -128,10 +128,10 @@
"integrity": "sha512-HVbx7cAvySjVfVNKpb2go9RO890Xs6yigWWAwoISOz4l2X5oMTMs1rIw04geuEQeTTmW3ob3nj6YN1KWf2cBHg==",
"dev": true,
"requires": {
- "etch": "0.8.0",
- "grim": "2.0.2",
- "less": "2.7.3",
- "mocha": "3.5.3",
+ "etch": "^0.8.0",
+ "grim": "^2.0.1",
+ "less": "^2.7.1",
+ "mocha": "^3.0.0",
"tmp": "0.0.31"
},
"dependencies": {
@@ -141,7 +141,7 @@
"integrity": "sha1-VPYZV0NG+KPueXP1T7vQG1YnItY=",
"dev": true,
"requires": {
- "virtual-dom": "2.1.1"
+ "virtual-dom": "^2.0.1"
}
}
}
@@ -166,9 +166,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"
}
},
"balanced-match": {
@@ -184,7 +184,7 @@
"dev": true,
"optional": true,
"requires": {
- "tweetnacl": "0.14.5"
+ "tweetnacl": "^0.14.3"
}
},
"boom": {
@@ -192,8 +192,9 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
+ "optional": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"brace-expansion": {
@@ -202,7 +203,7 @@
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
- "balanced-match": "1.0.0",
+ "balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
@@ -230,7 +231,7 @@
"integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
"dev": true,
"requires": {
- "callsites": "0.2.0"
+ "callsites": "^0.2.0"
}
},
"callsites": {
@@ -258,11 +259,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
},
"dependencies": {
"supports-color": {
@@ -285,7 +286,7 @@
"integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
"dev": true,
"requires": {
- "restore-cursor": "1.0.1"
+ "restore-cursor": "^1.0.1"
}
},
"cli-width": {
@@ -311,8 +312,9 @@
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
+ "optional": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "delayed-stream": "~1.0.0"
}
},
"commander": {
@@ -321,7 +323,7 @@
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"dev": true,
"requires": {
- "graceful-readlink": "1.0.1"
+ "graceful-readlink": ">= 1.0.0"
}
},
"concat-map": {
@@ -336,10 +338,10 @@
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"dev": true,
"requires": {
- "buffer-from": "1.1.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.6",
- "typedarray": "0.0.6"
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
"core-util-is": {
@@ -355,7 +357,7 @@
"dev": true,
"optional": true,
"requires": {
- "boom": "2.10.1"
+ "boom": "2.x.x"
}
},
"d": {
@@ -364,7 +366,7 @@
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
"dev": true,
"requires": {
- "es5-ext": "0.10.46"
+ "es5-ext": "^0.10.9"
}
},
"dashdash": {
@@ -374,7 +376,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -413,12 +415,12 @@
"integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
"dev": true,
"requires": {
- "find-root": "1.1.0",
- "glob": "7.1.1",
- "ignore": "3.3.10",
- "pkg-config": "1.1.1",
- "run-parallel": "1.1.9",
- "uniq": "1.0.1"
+ "find-root": "^1.0.0",
+ "glob": "^7.0.5",
+ "ignore": "^3.0.9",
+ "pkg-config": "^1.1.0",
+ "run-parallel": "^1.1.2",
+ "uniq": "^1.0.1"
}
},
"del": {
@@ -427,20 +429,21 @@
"integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
"dev": true,
"requires": {
- "globby": "5.0.0",
- "is-path-cwd": "1.0.0",
- "is-path-in-cwd": "1.0.1",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "rimraf": "2.6.2"
+ "globby": "^5.0.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "rimraf": "^2.2.8"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"diff": {
"version": "3.2.0",
@@ -454,8 +457,8 @@
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
- "esutils": "2.0.2",
- "isarray": "1.0.0"
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
}
},
"dom-walk": {
@@ -471,8 +474,8 @@
"dev": true,
"optional": true,
"requires": {
- "jsbn": "0.1.1",
- "safer-buffer": "2.1.2"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
"errno": {
@@ -482,7 +485,7 @@
"dev": true,
"optional": true,
"requires": {
- "prr": "1.0.1"
+ "prr": "~1.0.1"
}
},
"error": {
@@ -491,9 +494,9 @@
"integrity": "sha1-v2n/JR+0onnBmtzNqmth6Q2b8So=",
"dev": true,
"requires": {
- "camelize": "1.0.0",
- "string-template": "0.2.1",
- "xtend": "4.0.1"
+ "camelize": "^1.0.0",
+ "string-template": "~0.2.0",
+ "xtend": "~4.0.0"
}
},
"es5-ext": {
@@ -502,9 +505,9 @@
"integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
"dev": true,
"requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1",
- "next-tick": "1.0.0"
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
},
"dependencies": {
"next-tick": {
@@ -521,9 +524,9 @@
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
}
},
"es6-map": {
@@ -532,12 +535,12 @@
"integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46",
- "es6-iterator": "2.0.3",
- "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"
}
},
"es6-set": {
@@ -546,11 +549,11 @@
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46",
- "es6-iterator": "2.0.3",
+ "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"
}
},
"es6-symbol": {
@@ -559,8 +562,8 @@
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"es6-weak-map": {
@@ -569,10 +572,10 @@
"integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
}
},
"escape-string-regexp": {
@@ -587,10 +590,10 @@
"integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
"dev": true,
"requires": {
- "es6-map": "0.1.5",
- "es6-weak-map": "2.0.2",
- "esrecurse": "4.2.1",
- "estraverse": "4.2.0"
+ "es6-map": "^0.1.3",
+ "es6-weak-map": "^2.0.1",
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
}
},
"eslint": {
@@ -599,40 +602,40 @@
"integrity": "sha1-yaEOi/bp1lZRIEd4xQM0Hx6sPOc=",
"dev": true,
"requires": {
- "babel-code-frame": "6.26.0",
- "chalk": "1.1.3",
- "concat-stream": "1.6.2",
- "debug": "2.6.8",
- "doctrine": "1.5.0",
- "escope": "3.6.0",
- "espree": "3.5.4",
- "estraverse": "4.2.0",
- "esutils": "2.0.2",
- "file-entry-cache": "2.0.0",
- "glob": "7.1.1",
- "globals": "9.18.0",
- "ignore": "3.3.10",
- "imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.19.0",
- "is-resolvable": "1.1.0",
- "js-yaml": "3.12.0",
- "json-stable-stringify": "1.0.1",
- "levn": "0.3.0",
- "lodash": "4.17.10",
- "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": "1.0.4",
- "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.4.6",
+ "debug": "^2.1.1",
+ "doctrine": "^1.2.2",
+ "escope": "^3.6.0",
+ "espree": "^3.3.1",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "glob": "^7.0.3",
+ "globals": "^9.2.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": "~1.0.1",
+ "table": "^3.7.8",
+ "text-table": "~0.2.0",
+ "user-home": "^2.0.0"
}
},
"eslint-config-standard": {
@@ -659,8 +662,8 @@
"integrity": "sha1-Gvlq6lRYVoJRV9l8G1DVqPtkpac=",
"dev": true,
"requires": {
- "doctrine": "1.5.0",
- "jsx-ast-utils": "1.4.1"
+ "doctrine": "^1.2.2",
+ "jsx-ast-utils": "^1.3.3"
}
},
"eslint-plugin-standard": {
@@ -675,8 +678,8 @@
"integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
"dev": true,
"requires": {
- "acorn": "5.7.1",
- "acorn-jsx": "3.0.1"
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
}
},
"esprima": {
@@ -691,7 +694,7 @@
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
"dev": true,
"requires": {
- "estraverse": "4.2.0"
+ "estraverse": "^4.1.0"
}
},
"estraverse": {
@@ -717,7 +720,7 @@
"integrity": "sha1-GrDH+CE2UF3XSzHRdwHLK+bSZVg=",
"dev": true,
"requires": {
- "individual": "3.0.0"
+ "individual": "^3.0.0"
}
},
"event-emitter": {
@@ -726,8 +729,8 @@
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.46"
+ "d": "1",
+ "es5-ext": "~0.10.14"
}
},
"event-kit": {
@@ -753,7 +756,8 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"fast-levenshtein": {
"version": "2.0.6",
@@ -767,8 +771,8 @@
"integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
"dev": true,
"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": {
@@ -777,8 +781,8 @@
"integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
"dev": true,
"requires": {
- "flat-cache": "1.3.0",
- "object-assign": "4.1.1"
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
}
},
"find-root": {
@@ -793,10 +797,10 @@
"integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
"dev": true,
"requires": {
- "circular-json": "0.3.3",
- "del": "2.2.2",
- "graceful-fs": "4.1.11",
- "write": "0.2.1"
+ "circular-json": "^0.3.1",
+ "del": "^2.0.2",
+ "graceful-fs": "^4.1.2",
+ "write": "^0.2.1"
}
},
"forever-agent": {
@@ -813,9 +817,9 @@
"dev": true,
"optional": true,
"requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "2.1.19"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
}
},
"fs.realpath": {
@@ -836,7 +840,7 @@
"integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
"dev": true,
"requires": {
- "is-property": "1.0.2"
+ "is-property": "^1.0.0"
}
},
"get-stdin": {
@@ -852,7 +856,7 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "^1.0.0"
},
"dependencies": {
"assert-plus": {
@@ -870,12 +874,12 @@
"integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
"dev": true,
"requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
}
},
"global": {
@@ -884,8 +888,8 @@
"integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
"dev": true,
"requires": {
- "min-document": "2.19.0",
- "process": "0.5.2"
+ "min-document": "^2.19.0",
+ "process": "~0.5.1"
}
},
"globals": {
@@ -900,12 +904,12 @@
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
"dev": true,
"requires": {
- "array-union": "1.0.2",
- "arrify": "1.0.1",
- "glob": "7.1.1",
- "object-assign": "4.1.1",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
}
},
"graceful-fs": {
@@ -926,7 +930,7 @@
"integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==",
"dev": true,
"requires": {
- "event-kit": "2.5.0"
+ "event-kit": "^2.0.0"
}
},
"growl": {
@@ -949,8 +953,8 @@
"dev": true,
"optional": true,
"requires": {
- "ajv": "4.11.8",
- "har-schema": "1.0.5"
+ "ajv": "^4.9.1",
+ "har-schema": "^1.0.5"
}
},
"has-ansi": {
@@ -959,7 +963,7 @@
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"has-flag": {
@@ -975,10 +979,10 @@
"dev": 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"
}
},
"he": {
@@ -991,7 +995,8 @@
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
- "dev": true
+ "dev": true,
+ "optional": true
},
"home-or-tmp": {
"version": "2.0.0",
@@ -999,8 +1004,8 @@
"integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
}
},
"http-signature": {
@@ -1010,9 +1015,9 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.1",
- "sshpk": "1.14.2"
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
"ignore": {
@@ -1046,8 +1051,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
"inherits": {
@@ -1062,19 +1067,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.10",
- "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"
}
},
"interpret": {
@@ -1089,7 +1094,7 @@
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-my-ip-valid": {
@@ -1104,11 +1109,11 @@
"integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==",
"dev": true,
"requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "is-my-ip-valid": "1.0.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
+ "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-object": {
@@ -1129,7 +1134,7 @@
"integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
"dev": true,
"requires": {
- "is-path-inside": "1.0.1"
+ "is-path-inside": "^1.0.0"
}
},
"is-path-inside": {
@@ -1138,7 +1143,7 @@
"integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
"requires": {
- "path-is-inside": "1.0.2"
+ "path-is-inside": "^1.0.1"
}
},
"is-property": {
@@ -1185,8 +1190,8 @@
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true,
"requires": {
- "argparse": "1.0.10",
- "esprima": "4.0.1"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
}
},
"jsbn": {
@@ -1209,7 +1214,7 @@
"integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"dev": true,
"requires": {
- "jsonify": "0.0.0"
+ "jsonify": "~0.0.0"
}
},
"json-stringify-safe": {
@@ -1271,14 +1276,14 @@
"integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
"dev": true,
"requires": {
- "errno": "0.1.7",
- "graceful-fs": "4.1.11",
- "image-size": "0.5.5",
- "mime": "1.6.0",
- "mkdirp": "0.5.1",
- "promise": "7.3.1",
+ "errno": "^0.1.1",
+ "graceful-fs": "^4.1.2",
+ "image-size": "~0.5.0",
+ "mime": "^1.2.11",
+ "mkdirp": "^0.5.0",
+ "promise": "^7.1.1",
"request": "2.81.0",
- "source-map": "0.5.7"
+ "source-map": "^0.5.3"
}
},
"levn": {
@@ -1287,14 +1292,14 @@
"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"
}
},
"lodash": {
- "version": "4.17.10",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
- "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"lodash._baseassign": {
@@ -1303,8 +1308,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": {
@@ -1337,9 +1342,9 @@
"integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
"dev": true,
"requires": {
- "lodash._baseassign": "3.2.0",
- "lodash._basecreate": "3.0.3",
- "lodash._isiterateecall": "3.0.9"
+ "lodash._baseassign": "^3.0.0",
+ "lodash._basecreate": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0"
}
},
"lodash.isarguments": {
@@ -1360,9 +1365,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"
}
},
"mime": {
@@ -1376,15 +1381,17 @@
"version": "1.35.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
"integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"mime-types": {
"version": "2.1.19",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
"integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
"dev": true,
+ "optional": true,
"requires": {
- "mime-db": "1.35.0"
+ "mime-db": "~1.35.0"
}
},
"min-document": {
@@ -1393,7 +1400,7 @@
"integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
"dev": true,
"requires": {
- "dom-walk": "0.1.1"
+ "dom-walk": "^0.1.0"
}
},
"minimatch": {
@@ -1402,7 +1409,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.11"
+ "brace-expansion": "^1.1.7"
}
},
"minimist": {
@@ -1489,7 +1496,7 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
}
},
"onetime": {
@@ -1504,12 +1511,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"
}
},
"os-homedir": {
@@ -1567,7 +1574,7 @@
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
"dev": true,
"requires": {
- "pinkie": "2.0.4"
+ "pinkie": "^2.0.0"
}
},
"pkg-config": {
@@ -1576,9 +1583,9 @@
"integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
"dev": true,
"requires": {
- "debug-log": "1.0.1",
- "find-root": "1.1.0",
- "xtend": "4.0.1"
+ "debug-log": "^1.0.0",
+ "find-root": "^1.0.0",
+ "xtend": "^4.0.1"
}
},
"pluralize": {
@@ -1618,7 +1625,7 @@
"dev": true,
"optional": true,
"requires": {
- "asap": "2.0.6"
+ "asap": "~2.0.3"
}
},
"prr": {
@@ -1648,13 +1655,13 @@
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": 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.2",
- "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"
}
},
"readline2": {
@@ -1663,8 +1670,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"
}
},
@@ -1674,7 +1681,7 @@
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
"dev": true,
"requires": {
- "resolve": "1.8.1"
+ "resolve": "^1.1.6"
}
},
"request": {
@@ -1684,28 +1691,28 @@
"dev": true,
"optional": true,
"requires": {
- "aws-sign2": "0.6.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.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.19",
- "oauth-sign": "0.8.2",
- "performance-now": "0.2.0",
- "qs": "6.4.0",
- "safe-buffer": "5.1.2",
- "stringstream": "0.0.6",
- "tough-cookie": "2.3.4",
- "tunnel-agent": "0.6.0",
- "uuid": "3.3.2"
+ "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"
}
},
"require-uncached": {
@@ -1714,8 +1721,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": {
@@ -1724,7 +1731,7 @@
"integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "path-parse": "1.0.6"
+ "path-parse": "^1.0.5"
}
},
"resolve-from": {
@@ -1739,8 +1746,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"
}
},
"rimraf": {
@@ -1749,7 +1756,7 @@
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
- "glob": "7.1.1"
+ "glob": "^7.0.5"
}
},
"run-async": {
@@ -1758,7 +1765,7 @@
"integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
"dev": true,
"requires": {
- "once": "1.4.0"
+ "once": "^1.3.0"
}
},
"run-parallel": {
@@ -1783,7 +1790,8 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
+ "dev": true,
+ "optional": true
},
"shelljs": {
"version": "0.7.8",
@@ -1791,9 +1799,9 @@
"integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
"dev": true,
"requires": {
- "glob": "7.1.1",
- "interpret": "1.1.0",
- "rechoir": "0.6.2"
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
}
},
"slice-ansi": {
@@ -1809,7 +1817,7 @@
"dev": true,
"optional": true,
"requires": {
- "hoek": "2.16.3"
+ "hoek": "2.x.x"
}
},
"source-map": {
@@ -1832,15 +1840,15 @@
"dev": true,
"optional": true,
"requires": {
- "asn1": "0.2.4",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.2",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.2",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "safer-buffer": "2.1.2",
- "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",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
},
"dependencies": {
"assert-plus": {
@@ -1858,13 +1866,13 @@
"integrity": "sha1-Y1Eyvnv7VnwpIQBfMPnjUOR1Kq0=",
"dev": true,
"requires": {
- "eslint": "3.10.2",
+ "eslint": "~3.10.2",
"eslint-config-standard": "6.2.1",
"eslint-config-standard-jsx": "3.2.0",
- "eslint-plugin-promise": "3.4.2",
- "eslint-plugin-react": "6.7.1",
- "eslint-plugin-standard": "2.0.1",
- "standard-engine": "5.2.0"
+ "eslint-plugin-promise": "~3.4.0",
+ "eslint-plugin-react": "~6.7.1",
+ "eslint-plugin-standard": "~2.0.1",
+ "standard-engine": "~5.2.0"
}
},
"standard-engine": {
@@ -1873,12 +1881,12 @@
"integrity": "sha1-QAZgrlrM6K/U22D/IhSpGQrXkKM=",
"dev": true,
"requires": {
- "deglob": "2.1.1",
- "find-root": "1.1.0",
- "get-stdin": "5.0.1",
- "home-or-tmp": "2.0.0",
- "minimist": "1.2.0",
- "pkg-config": "1.1.1"
+ "deglob": "^2.0.0",
+ "find-root": "^1.0.0",
+ "get-stdin": "^5.0.1",
+ "home-or-tmp": "^2.0.0",
+ "minimist": "^1.1.0",
+ "pkg-config": "^1.0.1"
},
"dependencies": {
"minimist": {
@@ -1901,9 +1909,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"
}
},
"string_decoder": {
@@ -1912,7 +1920,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "~5.1.0"
}
},
"stringstream": {
@@ -1928,7 +1936,7 @@
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
}
},
"strip-bom": {
@@ -1949,7 +1957,7 @@
"integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
"dev": true,
"requires": {
- "has-flag": "1.0.0"
+ "has-flag": "^1.0.0"
}
},
"table": {
@@ -1958,12 +1966,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.10",
+ "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"
},
"dependencies": {
"ansi-regex": {
@@ -1984,8 +1992,8 @@
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
}
},
"strip-ansi": {
@@ -1994,7 +2002,7 @@
"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "ansi-regex": "3.0.0"
+ "ansi-regex": "^3.0.0"
}
}
}
@@ -2017,7 +2025,7 @@
"integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
"dev": true,
"requires": {
- "os-tmpdir": "1.0.2"
+ "os-tmpdir": "~1.0.1"
}
},
"tough-cookie": {
@@ -2027,7 +2035,7 @@
"dev": true,
"optional": true,
"requires": {
- "punycode": "1.4.1"
+ "punycode": "^1.4.1"
}
},
"tunnel-agent": {
@@ -2037,7 +2045,7 @@
"dev": true,
"optional": true,
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "^5.0.1"
}
},
"tweetnacl": {
@@ -2053,7 +2061,7 @@
"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
"dev": true,
"requires": {
- "prelude-ls": "1.1.2"
+ "prelude-ls": "~1.1.2"
}
},
"typedarray": {
@@ -2074,7 +2082,7 @@
"integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "os-homedir": "^1.0.0"
}
},
"util-deprecate": {
@@ -2097,9 +2105,9 @@
"dev": true,
"optional": true,
"requires": {
- "assert-plus": "1.0.0",
+ "assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
+ "extsprintf": "^1.2.0"
},
"dependencies": {
"assert-plus": {
@@ -2118,11 +2126,11 @@
"dev": true,
"requires": {
"browser-split": "0.0.1",
- "error": "4.4.0",
- "ev-store": "7.0.0",
- "global": "4.3.2",
- "is-object": "1.0.1",
- "next-tick": "0.2.2",
+ "error": "^4.3.0",
+ "ev-store": "^7.0.0",
+ "global": "^4.3.0",
+ "is-object": "^1.0.1",
+ "next-tick": "^0.2.2",
"x-is-array": "0.1.0",
"x-is-string": "0.1.0"
}
@@ -2145,7 +2153,7 @@
"integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
"dev": true,
"requires": {
- "mkdirp": "0.5.1"
+ "mkdirp": "^0.5.1"
}
},
"x-is-array": {
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 000000000..ccbac807c
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,2 @@
+packages:
+ - "."
diff --git a/resources/app-icons/beta/atom.icns b/resources/app-icons/beta/atom.icns
index 6737fa27f..133f5c2a0 100644
Binary files a/resources/app-icons/beta/atom.icns and b/resources/app-icons/beta/atom.icns differ
diff --git a/resources/app-icons/beta/atom.ico b/resources/app-icons/beta/atom.ico
index e470837de..f303cf822 100644
Binary files a/resources/app-icons/beta/atom.ico and b/resources/app-icons/beta/atom.ico differ
diff --git a/resources/app-icons/dev/atom.icns b/resources/app-icons/dev/atom.icns
index b006a1a83..e8d18ab8b 100644
Binary files a/resources/app-icons/dev/atom.icns and b/resources/app-icons/dev/atom.icns differ
diff --git a/resources/app-icons/dev/atom.ico b/resources/app-icons/dev/atom.ico
index 6656f2623..118a93a86 100644
Binary files a/resources/app-icons/dev/atom.ico and b/resources/app-icons/dev/atom.ico differ
diff --git a/resources/app-icons/nightly/atom.icns b/resources/app-icons/nightly/atom.icns
index e49166fe2..ec8696553 100644
Binary files a/resources/app-icons/nightly/atom.icns and b/resources/app-icons/nightly/atom.icns differ
diff --git a/resources/app-icons/nightly/atom.ico b/resources/app-icons/nightly/atom.ico
index 158a02f0f..5e64c9a8c 100644
Binary files a/resources/app-icons/nightly/atom.ico and b/resources/app-icons/nightly/atom.ico differ
diff --git a/resources/app-icons/stable/atom.icns b/resources/app-icons/stable/atom.icns
index 73ef96330..561d349d3 100644
Binary files a/resources/app-icons/stable/atom.icns and b/resources/app-icons/stable/atom.icns differ
diff --git a/resources/app-icons/stable/atom.ico b/resources/app-icons/stable/atom.ico
index c640d594a..6d2d98c9b 100644
Binary files a/resources/app-icons/stable/atom.ico and b/resources/app-icons/stable/atom.ico differ
diff --git a/resources/linux/atom.desktop.in b/resources/linux/atom.desktop.in
index f028eba23..0677341dc 100644
--- a/resources/linux/atom.desktop.in
+++ b/resources/linux/atom.desktop.in
@@ -6,6 +6,6 @@ Exec=env ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT=false <%= installDir %>/bin/<
Icon=<%= iconPath %>
Type=Application
StartupNotify=true
-Categories=GNOME;GTK;Utility;TextEditor;Development;
-MimeType=text/plain;
+Categories=GTK;Utility;TextEditor;Development;
+MimeType=application/javascript;application/json;application/x-httpd-eruby;application/x-httpd-php;application/x-httpd-php3;application/x-httpd-php4;application/x-httpd-php5;application/x-ruby;application/x-bash;application/x-csh;application/x-sh;application/x-zsh;application/x-shellscript;application/x-sql;application/x-tcl;application/xhtml+xml;application/xml;application/xml-dtd;application/xslt+xml;text/coffeescript;text/css;text/html;text/plain;text/xml;text/xml-dtd;text/x-bash;text/x-c++;text/x-c++hdr;text/x-c++src;text/x-c;text/x-chdr;text/x-csh;text/x-csrc;text/x-dsrc;text/x-diff;text/x-go;text/x-java;text/x-java-source;text/x-makefile;text/x-markdown;text/x-objc;text/x-perl;text/x-php;text/x-python;text/x-ruby;text/x-sh;text/x-zsh;text/yaml;inode/directory
StartupWMClass=atom
diff --git a/resources/linux/debian/control.in b/resources/linux/debian/control.in
index 345c0dac4..064721f04 100644
--- a/resources/linux/debian/control.in
+++ b/resources/linux/debian/control.in
@@ -1,7 +1,7 @@
Package: <%= appFileName %>
Version: <%= version %>
-Depends: git, libgconf-2-4 (>= 3.2.5), libgtk-3-0 (>= 3.9.10), libgcrypt20, libnotify4, libxtst6, libnss3 (>= 2:3.22), libglib2.0-bin | kde-cli-tools | kde-runtime, xdg-utils, libx11-xcb1, libxss1, libxkbfile1, libcurl3 | libcurl4
-Recommends: libasound2 (>= 1.0.16), policykit-1, libsecret-1-0, gnome-keyring
+Depends: git, libgcrypt20, libgtk-3-0 (>= 3.9.10), libnotify4, libnss3 (>= 2:3.22), libglib2.0-bin | kde-cli-tools | kde-runtime, xdg-utils, libasound2 (>= 1.0.16), libgbm1, libx11-xcb1, libxcb-dri3-0, libxss1, libxtst6, libxkbfile1, libcurl3 | libcurl4
+Recommends: policykit-1, libsecret-1-0, gnome-keyring
Suggests: lsb-release
Section: devel
Priority: optional
diff --git a/resources/linux/desktopenviroment/cinnamon/atom.nemo_action b/resources/linux/desktopenviroment/cinnamon/atom.nemo_action
new file mode 100644
index 000000000..09e4c4ef9
--- /dev/null
+++ b/resources/linux/desktopenviroment/cinnamon/atom.nemo_action
@@ -0,0 +1,9 @@
+[Nemo Action]
+Active=true
+Name=Open in Atom
+Comment=Open in Atom
+#%U is the current selected file, this will also work on current directory
+Exec=atom -n %U
+Icon-Name=atom
+Selection=any
+Extensions=any
diff --git a/resources/linux/redhat/atom.spec.in b/resources/linux/redhat/atom.spec.in
index c60424525..05c24ec7c 100644
--- a/resources/linux/redhat/atom.spec.in
+++ b/resources/linux/redhat/atom.spec.in
@@ -8,11 +8,16 @@ AutoReqProv: no # Avoid libchromiumcontent.so missing dependency
Prefix: <%= installDir %>
%ifarch i386 i486 i586 i686
-Requires: lsb-core-noarch, libXss.so.1 libsecret-1.so.0, polkit
+Requires: alsa-lib, git-core, (glib2 or kde-cli-tools or xdg-utils), lsb-core-noarch, (libcurl.so.3 or libcurl.so.4), libgbm.so.1, libgcrypt.so.20, libnotify, libnss3.so, libX11-xcb.so.1, libxcb-dri3.so.0, libxkbfile.so.1, libXss.so.1, libsecret-1.so.0, gtk3, polkit
%else
-Requires: lsb-core-noarch, libXss.so.1()(64bit) libsecret-1.so.0()(64bit), polkit
+Requires: alsa-lib, git-core, (glib2 or kde-cli-tools or xdg-utils), lsb-core-noarch, (libcurl.so.3()(64bit) or libcurl.so.4()(64bit)), libgbm.so.1()(64bit), libgcrypt.so.20()(64bit), libnotify, libnss3.so()(64bit), libX11-xcb.so.1()(64bit), libxcb-dri3.so.0()(64bit), libxkbfile.so.1()(64bit), libXss.so.1()(64bit), libsecret-1.so.0()(64bit), gtk3, polkit
%endif
+# Disable Fedora's shebang mangling script,
+# which errors out on any file with versionless `python` in its shebang
+# See: https://github.com/atom/atom/issues/21937
+%undefine __brp_mangle_shebangs
+
%description
<%= description %>
diff --git a/resources/mac/file.icns b/resources/mac/file.icns
index 6a8cd5d8e..27ce5e704 100644
Binary files a/resources/mac/file.icns and b/resources/mac/file.icns differ
diff --git a/resources/win/atom.sh b/resources/win/atom.sh
index 6f2a81cea..4a13bf300 100755
--- a/resources/win/atom.sh
+++ b/resources/win/atom.sh
@@ -3,7 +3,9 @@
if command -v "cygpath" > /dev/null; then
# We have cygpath to do the conversion
ATOMCMD=$(cygpath "$(dirname "$0")/atom.cmd" -a -w)
+ ARGS=( $(cygpath -a -w "$@" | tr '\n' ' ') )
else
+ ARGS=$@
pushd "$(dirname "$0")" > /dev/null
if [[ $(uname -r) =~ (M|m)icrosoft ]]; then
# We are in Windows Subsystem for Linux, map /mnt/drive
@@ -12,15 +14,15 @@ else
eval $(grep "^root" /etc/wsl.conf | sed -e "s/ //g")
root="$(echo $root | sed 's|/|\\/|g')"
ATOMCMD="$(echo $PWD | sed 's/\/mnt\/\([a-z]*\)\(.*\)/\1:\2/')/atom.cmd"
- ATOMCMD="${ATOMCMD////\\}"
else
# We don't have cygpath or WSL so try pwd -W
ATOMCMD="$(pwd -W)/atom.cmd"
fi
popd > /dev/null
fi
-if [ "$(uname -o)" == "Msys" ]; then
- cmd.exe //C "$ATOMCMD" "$@" # Msys thinks /C is a Windows path...
+
+if [ "$(uname -o)" == "Msys" ] || [[ $(uname -r) == *-Microsoft ]]; then
+ cmd.exe //C "$ATOMCMD" "$@" # Msys amd WSL think /C is a Windows path...
else
- cmd.exe /C "$ATOMCMD" "$@" # Cygwin does not
+ cmd.exe /C "$ATOMCMD" "${ARGS[@]}" # Cygwin does not
fi
diff --git a/resources/win/atom.visualElementsManifest.xml b/resources/win/atom.visualElementsManifest.xml
new file mode 100644
index 000000000..762a59792
--- /dev/null
+++ b/resources/win/atom.visualElementsManifest.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/resources/win/visualElements/Square150x150Logo.scale-100.png b/resources/win/visualElements/Square150x150Logo.scale-100.png
new file mode 100644
index 000000000..7330dd46c
Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-100.png differ
diff --git a/resources/win/visualElements/Square150x150Logo.scale-125.png b/resources/win/visualElements/Square150x150Logo.scale-125.png
new file mode 100644
index 000000000..eaa8d4d3c
Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-125.png differ
diff --git a/resources/win/visualElements/Square150x150Logo.scale-150.png b/resources/win/visualElements/Square150x150Logo.scale-150.png
new file mode 100644
index 000000000..95e70014b
Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-150.png differ
diff --git a/resources/win/visualElements/Square150x150Logo.scale-200.png b/resources/win/visualElements/Square150x150Logo.scale-200.png
new file mode 100644
index 000000000..1d6006697
Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-200.png differ
diff --git a/resources/win/visualElements/Square150x150Logo.scale-400.png b/resources/win/visualElements/Square150x150Logo.scale-400.png
new file mode 100644
index 000000000..caff09182
Binary files /dev/null and b/resources/win/visualElements/Square150x150Logo.scale-400.png differ
diff --git a/resources/win/visualElements/Square44x44Logo.scale-100.png b/resources/win/visualElements/Square44x44Logo.scale-100.png
new file mode 100644
index 000000000..8385f6deb
Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-100.png differ
diff --git a/resources/win/visualElements/Square44x44Logo.scale-125.png b/resources/win/visualElements/Square44x44Logo.scale-125.png
new file mode 100644
index 000000000..349572606
Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-125.png differ
diff --git a/resources/win/visualElements/Square44x44Logo.scale-150.png b/resources/win/visualElements/Square44x44Logo.scale-150.png
new file mode 100644
index 000000000..5ced0f71c
Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-150.png differ
diff --git a/resources/win/visualElements/Square44x44Logo.scale-200.png b/resources/win/visualElements/Square44x44Logo.scale-200.png
new file mode 100644
index 000000000..5d3129055
Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-200.png differ
diff --git a/resources/win/visualElements/Square44x44Logo.scale-400.png b/resources/win/visualElements/Square44x44Logo.scale-400.png
new file mode 100644
index 000000000..93aba07d8
Binary files /dev/null and b/resources/win/visualElements/Square44x44Logo.scale-400.png differ
diff --git a/resources/win/visualElements/Square71x71Logo.scale-100.png b/resources/win/visualElements/Square71x71Logo.scale-100.png
new file mode 100644
index 000000000..9bb9958c1
Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-100.png differ
diff --git a/resources/win/visualElements/Square71x71Logo.scale-125.png b/resources/win/visualElements/Square71x71Logo.scale-125.png
new file mode 100644
index 000000000..8bc331c23
Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-125.png differ
diff --git a/resources/win/visualElements/Square71x71Logo.scale-150.png b/resources/win/visualElements/Square71x71Logo.scale-150.png
new file mode 100644
index 000000000..43801e7cd
Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-150.png differ
diff --git a/resources/win/visualElements/Square71x71Logo.scale-200.png b/resources/win/visualElements/Square71x71Logo.scale-200.png
new file mode 100644
index 000000000..39f787c56
Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-200.png differ
diff --git a/resources/win/visualElements/Square71x71Logo.scale-400.png b/resources/win/visualElements/Square71x71Logo.scale-400.png
new file mode 100644
index 000000000..d94bbeee1
Binary files /dev/null and b/resources/win/visualElements/Square71x71Logo.scale-400.png differ
diff --git a/script/bootstrap b/script/bootstrap
index e625ee26a..f6bd85e15 100755
--- a/script/bootstrap
+++ b/script/bootstrap
@@ -2,7 +2,6 @@
'use strict'
-const path = require('path')
const CONFIG = require('./config')
const childProcess = require('child_process')
const cleanDependencies = require('./lib/clean-dependencies')
diff --git a/script/config.js b/script/config.js
index 487655dbf..4648a2954 100644
--- a/script/config.js
+++ b/script/config.js
@@ -3,7 +3,6 @@
'use strict';
-const fs = require('fs');
const path = require('path');
const spawnSync = require('./lib/spawn-sync');
@@ -31,6 +30,12 @@ const appName = getAppName(channel);
const executableName = getExecutableName(channel, appName);
const channelName = getChannelName(channel);
+// Sets the installation jobs to run maximally in parallel if the user has
+// not already configured this. This is applied just by requiring this file.
+if (process.env.npm_config_jobs === undefined) {
+ process.env.npm_config_jobs = 'max';
+}
+
const REPO_OWNER = process.env.REPO_OWNER || 'atom';
const MAIN_REPO = process.env.MAIN_REPO || 'atom';
const NIGHTLY_RELEASE_REPO =
@@ -58,6 +63,7 @@ module.exports = {
homeDirPath,
getApmBinPath,
getNpmBinPath,
+ getLocalNpmBinPath,
snapshotAuxiliaryData: {},
REPO_OWNER,
MAIN_REPO,
@@ -118,23 +124,20 @@ function getApmBinPath() {
);
}
-function getNpmBinPath(external = false) {
- if (process.env.NPM_BIN_PATH) return process.env.NPM_BIN_PATH;
+function getNpmBinPath() {
+ return process.platform === 'win32' ? 'npm.cmd' : 'npm';
+}
+function getLocalNpmBinPath() {
+ // NOTE this assumes that npm is installed as a script-runner dependency
const npmBinName = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const localNpmBinPath = path.resolve(
repositoryRootPath,
'script',
+ 'script-runner',
'node_modules',
'.bin',
npmBinName
);
- return !external && fs.existsSync(localNpmBinPath)
- ? localNpmBinPath
- : npmBinName;
-}
-
-// parallel build in node-gyp
-if (!process.env.JOBS) {
- process.env.JOBS = 'max';
+ return localNpmBinPath;
}
diff --git a/script/lib/check-chromedriver-version.js b/script/lib/check-chromedriver-version.js
index b7cad2e18..69159aad0 100644
--- a/script/lib/check-chromedriver-version.js
+++ b/script/lib/check-chromedriver-version.js
@@ -5,6 +5,12 @@ const semver = require('semver');
const chromedriverMetadataPath = require('electron-chromedriver/package.json');
const mksnapshotMetadataPath = require('electron-mksnapshot/package.json');
+// The enviroment variable is usually set in install-script-dependencies.js
+const majorElectronVersion = semver.major(
+ process.env.ELECTRON_CUSTOM_VERSION ||
+ require('../config').appMetadata.electronVersion
+);
+
module.exports = function() {
// Chromedriver should be at least v9.0.0
// Mksnapshot should be at least v9.0.2
@@ -26,15 +32,15 @@ module.exports = function() {
);
}
- if (!semver.satisfies(chromedriverActualVer, '>=9.0.0')) {
+ if (!semver.satisfies(chromedriverActualVer, `>=${majorElectronVersion}`)) {
throw new Error(
- `electron-chromedriver should be at least v9.0.0 to support the ELECTRON_CUSTOM_VERSION environment variable.`
+ `electron-chromedriver should be at least v${majorElectronVersion} to support the ELECTRON_CUSTOM_VERSION environment variable.`
);
}
- if (!semver.satisfies(mksnapshotActualVer, '>=9.0.2')) {
+ if (!semver.satisfies(mksnapshotActualVer, `>=${majorElectronVersion}`)) {
throw new Error(
- `electron-mksnapshot should be at least v9.0.2 to support the ELECTRON_CUSTOM_VERSION environment variable.`
+ `electron-mksnapshot should be at least v${majorElectronVersion} to support the ELECTRON_CUSTOM_VERSION environment variable.`
);
}
};
diff --git a/script/lib/download-file-from-github.js b/script/lib/download-file-from-github.js
index 650b3c480..1e58e63f4 100644
--- a/script/lib/download-file-from-github.js
+++ b/script/lib/download-file-from-github.js
@@ -9,7 +9,8 @@ module.exports = function(downloadURL, destinationPath) {
const response = syncRequest('GET', downloadURL, {
headers: {
Accept: 'application/vnd.github.v3.raw',
- 'User-Agent': 'Atom Build'
+ 'User-Agent': 'Atom Build',
+ Authorization: `token ${process.env.GITHUB_TOKEN}`
}
});
diff --git a/script/lib/dump-symbols.js b/script/lib/dump-symbols.js
index f454d574c..7142ad479 100644
--- a/script/lib/dump-symbols.js
+++ b/script/lib/dump-symbols.js
@@ -27,7 +27,9 @@ function dumpSymbol(binaryPath) {
return new Promise(function(resolve, reject) {
minidump.dumpSymbol(binaryPath, function(error, content) {
if (error) {
- console.error(error);
+ // fswin.node is only used on windows, ignore the error on other platforms
+ if (process.platform !== 'win32' && binaryPath.match(/fswin.node/))
+ return resolve();
throw new Error(error);
} else {
const moduleLine = /MODULE [^ ]+ [^ ]+ ([0-9A-F]+) (.*)\n/.exec(
diff --git a/script/lib/install-apm.js b/script/lib/install-apm.js
index 03b47cff9..e0c81b596 100644
--- a/script/lib/install-apm.js
+++ b/script/lib/install-apm.js
@@ -5,11 +5,15 @@ const childProcess = require('child_process');
const CONFIG = require('../config');
function installApm(ci = false, showVersion = true) {
+ if (ci) {
+ // Tell apm not to dedupe its own dependencies during its
+ // postinstall script. (Deduping during `npm ci` runs is broken.)
+ process.env.NO_APM_DEDUPE = 'true';
+ }
console.log('Installing apm');
- // npm ci leaves apm with a bunch of unmet dependencies
childProcess.execFileSync(
- CONFIG.getNpmBinPath(),
- ['--global-style', '--loglevel=error', 'install'],
+ CONFIG.getLocalNpmBinPath(),
+ ['--global-style', '--loglevel=error', ci ? 'ci' : 'install'],
{ env: process.env, cwd: CONFIG.apmRootPath }
);
if (showVersion) {
diff --git a/script/lib/package-application.js b/script/lib/package-application.js
index 84a853aaa..420d12ac0 100644
--- a/script/lib/package-application.js
+++ b/script/lib/package-application.js
@@ -140,7 +140,7 @@ function copyNonASARResources(packagedAppPath, bundledResourcesPath) {
'folder.ico'
].forEach(file =>
fs.copySync(
- path.join('resources', 'win', file),
+ path.join(CONFIG.repositoryRootPath, 'resources', 'win', file),
path.join(bundledResourcesPath, 'cli', file)
)
);
diff --git a/script/lib/update-dependency/fetch-outdated-dependencies.js b/script/lib/update-dependency/fetch-outdated-dependencies.js
index 7678784f7..54cddd922 100644
--- a/script/lib/update-dependency/fetch-outdated-dependencies.js
+++ b/script/lib/update-dependency/fetch-outdated-dependencies.js
@@ -44,13 +44,14 @@ const apm = async function({ dependencies, packageDependencies }) {
const npm = async function(cwd) {
try {
- console.log('Checking npm registry...');
+ console.log('Checking npm registry...', cwd);
const currentState = await npmCheck({
cwd,
ignoreDev: true,
skipUnused: true
});
+
const outdatedPackages = currentState
.get('packages')
.filter(p => {
diff --git a/script/lib/update-dependency/git.js b/script/lib/update-dependency/git.js
index d9e6353c6..f38dce795 100644
--- a/script/lib/update-dependency/git.js
+++ b/script/lib/update-dependency/git.js
@@ -21,27 +21,33 @@ const git = (git, repositoryRootPath) => {
} catch (ex) {
console.log(ex.message);
}
+
+ async function createOrCheckoutBranch(newBranch) {
+ await git.fetch();
+ const { branches } = await git.branch();
+ const found = Object.keys(branches).find(
+ branch => branch.indexOf(newBranch) > -1
+ );
+ found
+ ? await git.checkout(found)
+ : await git.checkoutLocalBranch(newBranch);
+
+ return { found, newBranch };
+ }
+
return {
- switchToMaster: async function() {
+ switchToCleanBranch: async function() {
+ const cleanBranch = 'clean-branch';
const { current } = await git.branch();
- if (current !== 'master') {
- await git.checkout('master');
- }
+ if (current !== cleanBranch) createOrCheckoutBranch(cleanBranch);
},
makeBranch: async function(dependency) {
const newBranch = `${dependency.moduleName}-${dependency.latest}`;
- const { branches } = await git.branch();
const { files } = await git.status();
if (files.length > 0) {
await git.reset('hard');
}
- const found = Object.keys(branches).find(
- branch => branch.indexOf(newBranch) > -1
- );
- found
- ? await git.checkout(found)
- : await git.checkoutLocalBranch(newBranch);
- return { found, newBranch };
+ return createOrCheckoutBranch(newBranch);
},
createCommit: async function({ moduleName, latest }) {
try {
diff --git a/script/lib/update-dependency/main.js b/script/lib/update-dependency/main.js
index 733108203..bd6781c10 100644
--- a/script/lib/update-dependency/main.js
+++ b/script/lib/update-dependency/main.js
@@ -17,7 +17,7 @@ const runApmInstall = require('../run-apm-install');
const {
makeBranch,
createCommit,
- switchToMaster,
+ switchToCleanBranch,
publishBranch,
deleteBranch
} = require('./git')(git, repositoryRootPath);
@@ -27,7 +27,7 @@ const fetchOutdatedDependencies = require('./fetch-outdated-dependencies');
module.exports = async function() {
try {
// ensure we are on master
- await switchToMaster();
+ await switchToCleanBranch();
const failedBumps = [];
const successfullBumps = [];
const outdateDependencies = [
@@ -69,7 +69,7 @@ module.exports = async function() {
});
}
- await switchToMaster();
+ await switchToCleanBranch();
}
// create PRs here
for (const { dependency, branch, branchIsRemote } of pendingPRs) {
diff --git a/script/lib/update-dependency/spec/git-spec.js b/script/lib/update-dependency/spec/git-spec.js
index fca2ca765..ed11c46b1 100644
--- a/script/lib/update-dependency/spec/git-spec.js
+++ b/script/lib/update-dependency/spec/git-spec.js
@@ -4,7 +4,7 @@ const repositoryRootPath = path.resolve('.', 'fixtures', 'dummy');
const git = simpleGit(repositoryRootPath);
const {
- switchToMaster,
+ switchToCleanBranch,
makeBranch,
publishBranch,
createCommit,
@@ -23,7 +23,7 @@ describe('GIT', () => {
const branch = `${dependency.moduleName}-${dependency.latest}`;
beforeEach(async () => {
- await git.checkout('master');
+ await git.checkout('clean-branch');
});
it('remotes should include ATOM', async () => {
@@ -31,14 +31,14 @@ describe('GIT', () => {
expect(remotes.map(({ name }) => name).includes('ATOM')).toBeTruthy();
});
- it('current branch should be master', async () => {
+ it('current branch should be clean-branch', async () => {
const testBranchExists = await findBranch('test');
testBranchExists
? await git.checkout('test')
: await git.checkoutLocalBranch('test');
expect((await git.branch()).current).toBe('test');
- await switchToMaster();
- expect((await git.branch()).current).toBe('master');
+ await switchToCleanBranch();
+ expect((await git.branch()).current).toBe('clean-branch');
await git.deleteLocalBranch('test', true);
});
@@ -47,7 +47,7 @@ describe('GIT', () => {
expect(found).toBe(undefined);
expect(newBranch).toBe(branch);
expect((await git.branch()).current).toBe(branch);
- await git.checkout('master');
+ await git.checkout('clean-branch');
await git.deleteLocalBranch(branch, true);
});
@@ -56,7 +56,7 @@ describe('GIT', () => {
const { found } = await makeBranch(dependency);
expect(found).not.toBe(undefined);
expect((await git.branch()).current).toBe(found);
- await git.checkout('master');
+ await git.checkout('clean-branch');
await git.deleteLocalBranch(branch, true);
});
@@ -86,7 +86,7 @@ describe('GIT', () => {
it('should delete an existing branch', async () => {
await git.checkoutLocalBranch(branch);
- await git.checkout('master');
+ await git.checkout('clean-branch');
expect(await findBranch(branch)).not.toBe(undefined);
await deleteBranch(branch);
expect(await findBranch(branch)).toBe(undefined);
diff --git a/script/lib/verify-machine-requirements.js b/script/lib/verify-machine-requirements.js
index ccc4a6841..afac015d5 100644
--- a/script/lib/verify-machine-requirements.js
+++ b/script/lib/verify-machine-requirements.js
@@ -3,45 +3,20 @@
const childProcess = require('child_process');
const path = require('path');
-const CONFIG = require('../config');
-
module.exports = function(ci) {
verifyNode();
- verifyNpm(ci);
verifyPython();
};
function verifyNode() {
const fullVersion = process.versions.node;
const majorVersion = fullVersion.split('.')[0];
- if (majorVersion >= 6) {
+ const minorVersion = fullVersion.split('.')[1];
+ if (majorVersion >= 11 || (majorVersion === '10' && minorVersion >= 12)) {
console.log(`Node:\tv${fullVersion}`);
- } else if (majorVersion >= 4) {
- console.log(`Node:\tv${fullVersion}`);
- console.warn(
- '\tWarning: Building on Node below version 6 is deprecated. Please use Node 6.x+ to build Atom.'
- );
} else {
throw new Error(
- `node v4+ is required to build Atom. node v${fullVersion} is installed.`
- );
- }
-}
-
-function verifyNpm(ci) {
- const stdout = childProcess.execFileSync(
- CONFIG.getNpmBinPath(ci),
- ['--version'],
- { env: process.env }
- );
- const fullVersion = stdout.toString().trim();
- const majorVersion = fullVersion.split('.')[0];
- const oldestMajorVersionSupported = ci ? 6 : 3;
- if (majorVersion >= oldestMajorVersionSupported) {
- console.log(`Npm:\tv${fullVersion}`);
- } else {
- throw new Error(
- `npm v${oldestMajorVersionSupported}+ is required to build Atom. npm v${fullVersion} was detected.`
+ `node v10.12+ is required to build Atom. node v${fullVersion} is installed.`
);
}
}
@@ -94,7 +69,7 @@ function verifyPython() {
env: process.env,
stdio: ['ignore', 'pipe', 'ignore']
});
- } catch {}
+ } catch (e) {}
if (stdout) {
if (stdout.indexOf('+') !== -1)
diff --git a/script/package-lock.json b/script/package-lock.json
index 815c08139..04addc4cc 100644
--- a/script/package-lock.json
+++ b/script/package-lock.json
@@ -350,6 +350,52 @@
"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
"integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
},
+ "@malept/cross-spawn-promise": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz",
+ "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==",
+ "requires": {
+ "cross-spawn": "^7.0.1"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -400,6 +446,14 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
"integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+ },
+ "node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
}
}
},
@@ -435,9 +489,9 @@
}
},
"@types/glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
"optional": true,
"requires": {
"@types/minimatch": "*",
@@ -445,9 +499,9 @@
}
},
"@types/minimatch": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
- "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
"optional": true
},
"@types/node": {
@@ -879,9 +933,9 @@
}
},
"tslib": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
- "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w=="
}
}
},
@@ -891,12 +945,9 @@
"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
},
"async": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz",
- "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=",
- "requires": {
- "lodash": "^4.8.0"
- }
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
+ "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
},
"asynckit": {
"version": "0.4.0",
@@ -2000,6 +2051,26 @@
"which": "^1.2.8"
}
},
+ "cross-spawn-windows-exe": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz",
+ "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==",
+ "requires": {
+ "@malept/cross-spawn-promise": "^1.1.0",
+ "is-wsl": "^2.2.0",
+ "which": "^2.0.2"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -2667,34 +2738,34 @@
}
},
"electron-chromedriver": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-9.0.0.tgz",
- "integrity": "sha512-+MuukzicyfduXO/4yQv9ygLKaScttJNbWtg77A9fs2YhbkISjObWaCF3eJNZL+edZXRfaF/6D4XuXvklQCmwQg==",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-11.0.0.tgz",
+ "integrity": "sha512-ayMJPBbB4puU0SqYbcD9XvF3/7GWIhqKE1n5lG2/GQPRnrZkNoPIilsrS0rQcD50Xhl69KowatDqLhUznZWtbA==",
"requires": {
"@electron/get": "^1.12.2",
"extract-zip": "^2.0.0"
}
},
"electron-link": {
- "version": "npm:@aminya/electron-link@0.6.3",
- "resolved": "https://registry.npmjs.org/@aminya/electron-link/-/electron-link-0.6.3.tgz",
- "integrity": "sha512-F0csI7qFLL31PY8O/AtUBX5g5zsHRzCov0Fb6stj0MKOGT+M98u82R75DNbOWdteR+MgWfCshvPVPdkEEQLmXg==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/electron-link/-/electron-link-0.6.0.tgz",
+ "integrity": "sha512-sSxU9c7ABIH8csvAveTwgrG5g7Nbcuh/MBPF5exeWgzd0RLJYNWuD66eMpPRo9/qwqyPc8FJvHRF7EIN5Ylqqg==",
"requires": {
- "acorn": "^8.0.1",
+ "acorn": "^8.0.4",
"ast-util-plus": "^0.7.1",
"encoding-down": "^6.3.0",
"indent-string": "^4.0.0",
"leveldown": "^5.6.0",
"levelup": "^4.4.0",
- "recast": "^0.20.3",
- "resolve": "^1.17.0",
+ "recast": "^0.20.4",
+ "resolve": "^1.19.0",
"source-map": "^0.7.3"
},
"dependencies": {
"acorn": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz",
- "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ=="
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
+ "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA=="
},
"ast-types": {
"version": "0.14.2",
@@ -2728,11 +2799,11 @@
}
},
"resolve": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
- "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+ "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"requires": {
- "is-core-module": "^2.1.0",
+ "is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
},
@@ -2742,16 +2813,16 @@
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
},
"tslib": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
- "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz",
+ "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w=="
}
}
},
"electron-mksnapshot": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-9.0.2.tgz",
- "integrity": "sha512-885PfbJuNlvfmOPNoOj8SG1/i2WlqdcogN86o2/uPGOvPWTTRyYNfutzbWUjRDUB+Wl7TC9rT8f40tNp+N/xDw==",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/electron-mksnapshot/-/electron-mksnapshot-11.0.1.tgz",
+ "integrity": "sha512-o64lEpzq6Wvxx9EnIMGihLfrTr8vwPpUXkhxc9UseciCFFoaJml0SnMBknGjqrOrEujVFwcuX67YD5AzXojyHA==",
"requires": {
"@electron/get": "^1.12.2",
"extract-zip": "^2.0.0",
@@ -2780,63 +2851,33 @@
}
},
"electron-notarize": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz",
- "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.1.1.tgz",
+ "integrity": "sha512-kufsnqh86CTX89AYNG3NCPoboqnku/+32RxeJ2+7A4Rbm4bbOx0Nc7XTy3/gAlBfpj9xPAxHfhZLOHgfi6cJVw==",
"requires": {
"debug": "^4.1.1",
"fs-extra": "^9.0.1"
},
"dependencies": {
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
- "ms": "^2.1.1"
- }
- },
- "fs-extra": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
- "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "jsonfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
- "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^1.0.0"
+ "ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
}
}
},
"electron-osx-sign": {
- "version": "0.4.17",
- "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.17.tgz",
- "integrity": "sha512-wUJPmZJQCs1zgdlQgeIpRcvrf7M5/COQaOV68Va1J/SgmWx5KL2otgg+fAae7luw6qz9R8Gvu/Qpe9tAOu/3xQ==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.5.0.tgz",
+ "integrity": "sha512-icoRLHzFz/qxzDh/N4Pi2z4yVHurlsCAYQvsCSG7fCedJ4UJXBS6PoQyGH71IfcqKupcKeK7HX/NkyfG+v6vlQ==",
"requires": {
"bluebird": "^3.5.0",
"compare-version": "^0.1.2",
@@ -2854,15 +2895,16 @@
}
},
"electron-packager": {
- "version": "15.0.0",
- "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.0.0.tgz",
- "integrity": "sha512-J0yQP7/fKPkjxo9Yz5+vsQVig0dBbSXW8LQYA1pvNMvi+bL00hfI2SAyORP6EU7XaeiXGUIBSG2Px01EkKfGCw==",
+ "version": "15.4.0",
+ "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-15.4.0.tgz",
+ "integrity": "sha512-JrrLcBP15KGrPj0cZ/ALKGmaQ4gJkn3mocf0E3bRKdR3kxKWYcDRpCvdhksYDXw/r3I6tMEcZ7XzyApWFXdVpw==",
"requires": {
"@electron/get": "^1.6.0",
- "asar": "^3.0.0",
+ "asar": "^3.1.0",
+ "cross-spawn-windows-exe": "^1.2.0",
"debug": "^4.0.1",
- "electron-notarize": "^1.0.0",
- "electron-osx-sign": "^0.4.11",
+ "electron-notarize": "^1.1.1",
+ "electron-osx-sign": "^0.5.0",
"extract-zip": "^2.0.0",
"filenamify": "^4.1.0",
"fs-extra": "^9.0.0",
@@ -2871,16 +2913,16 @@
"junk": "^3.1.0",
"parse-author": "^2.0.0",
"plist": "^3.0.0",
- "rcedit": "^2.0.0",
+ "rcedit": "^3.0.1",
"resolve": "^1.1.6",
"semver": "^7.1.3",
- "yargs-parser": "^18.0.0"
+ "yargs-parser": "^20.0.0"
},
"dependencies": {
"asar": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz",
- "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz",
+ "integrity": "sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==",
"requires": {
"@types/glob": "^7.1.1",
"chromium-pickle-js": "^0.2.0",
@@ -2889,39 +2931,23 @@
"minimatch": "^3.0.4"
}
},
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
- },
"commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
"integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="
},
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
- "ms": "^2.1.1"
- }
- },
- "fs-extra": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
- "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^1.0.0"
+ "ms": "2.1.2"
}
},
"glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -2931,24 +2957,18 @@
"path-is-absolute": "^1.0.0"
}
},
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
- },
- "jsonfile": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
- "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^1.0.0"
+ "yallist": "^4.0.0"
}
},
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -2959,23 +2979,22 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
},
- "universalify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
- "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
}
}
},
@@ -3025,9 +3044,9 @@
"integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA=="
},
"errno": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
- "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+ "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
"requires": {
"prr": "~1.0.1"
}
@@ -3182,11 +3201,6 @@
"esutils": "^2.0.2"
}
},
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
@@ -4101,9 +4115,9 @@
"integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik="
},
"filenamify": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.1.0.tgz",
- "integrity": "sha512-KQV/uJDI9VQgN7sHH1Zbk6+42cD6mnQ2HONzkXUfPJ+K2FC8GZ1dpewbbHw0Sz8Tf5k3EVdHVayM4DoAwWlmtg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz",
+ "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==",
"requires": {
"filename-reserved-regex": "^2.0.0",
"strip-outer": "^1.0.1",
@@ -4172,11 +4186,11 @@
},
"dependencies": {
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
+ "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"fs-extra": {
@@ -4326,9 +4340,9 @@
},
"dependencies": {
"debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"requires": {
"ms": "^2.1.1"
}
@@ -4352,9 +4366,9 @@
}
},
"ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
@@ -5234,6 +5248,11 @@
"resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
"integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
},
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
+ },
"is-dotfile": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
@@ -5448,6 +5467,14 @@
"resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz",
"integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA=="
},
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -6126,9 +6153,9 @@
"integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ=="
},
"minidump": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/minidump/-/minidump-0.9.0.tgz",
- "integrity": "sha1-Ei6d8kTzCPNEnvunpOLDIfQmwfk="
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/minidump/-/minidump-0.22.0.tgz",
+ "integrity": "sha512-6gg9AgtjzACB5WsDu/jzQ4Fn1s4LENhgN0vTH3RyeWlpNuXnjwviEWX//VgimEyqMVdnRynry+8aZUAtLIUXCQ=="
},
"minimatch": {
"version": "2.0.10",
@@ -6312,9 +6339,12 @@
}
},
"node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
},
"node-gyp-build": {
"version": "4.1.1",
@@ -6364,14 +6394,14 @@
"integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM="
},
"normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
+ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
},
"npm": {
- "version": "6.14.8",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.8.tgz",
- "integrity": "sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A==",
+ "version": "6.14.16",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.16.tgz",
+ "integrity": "sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw==",
"requires": {
"JSONStream": "^1.3.5",
"abbrev": "~1.1.1",
@@ -6404,13 +6434,13 @@
"glob": "^7.1.6",
"graceful-fs": "^4.2.4",
"has-unicode": "~2.0.1",
- "hosted-git-info": "^2.8.8",
+ "hosted-git-info": "^2.8.9",
"iferr": "^1.0.2",
"imurmurhash": "*",
"infer-owner": "^1.0.4",
"inflight": "~1.0.6",
"inherits": "^2.0.4",
- "ini": "^1.3.5",
+ "ini": "^1.3.8",
"init-package-json": "^1.10.3",
"is-cidr": "^3.0.0",
"json-parse-better-errors": "^1.0.2",
@@ -6453,10 +6483,10 @@
"npm-pick-manifest": "^3.0.2",
"npm-profile": "^4.0.4",
"npm-registry-fetch": "^4.0.7",
- "npm-user-validate": "~1.0.0",
+ "npm-user-validate": "^1.0.1",
"npmlog": "~4.1.2",
"once": "~1.4.0",
- "opener": "^1.5.1",
+ "opener": "^1.5.2",
"osenv": "^0.1.5",
"pacote": "^9.5.12",
"path-is-inside": "~1.0.2",
@@ -6480,9 +6510,9 @@
"slide": "~1.1.6",
"sorted-object": "~2.0.1",
"sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.1",
+ "ssri": "^6.0.2",
"stringify-package": "^1.0.1",
- "tar": "^4.4.13",
+ "tar": "^4.4.19",
"text-table": "~0.2.0",
"tiny-relative-date": "^1.3.0",
"uid-number": "0.0.6",
@@ -6524,16 +6554,6 @@
"humanize-ms": "^1.2.1"
}
},
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
"ansi-align": {
"version": "2.0.0",
"bundled": true,
@@ -6819,10 +6839,6 @@
"mkdirp": "~0.5.0"
}
},
- "co": {
- "version": "4.6.0",
- "bundled": true
- },
"code-point-at": {
"version": "1.1.0",
"bundled": true
@@ -7211,10 +7227,6 @@
"version": "1.3.0",
"bundled": true
},
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true
- },
"fast-json-stable-stringify": {
"version": "2.0.0",
"bundled": true
@@ -7499,11 +7511,31 @@
"bundled": true
},
"har-validator": {
- "version": "5.1.0",
+ "version": "5.1.5",
"bundled": true,
"requires": {
- "ajv": "^5.3.0",
+ "ajv": "^6.12.3",
"har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "bundled": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "bundled": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "bundled": true
+ }
}
},
"has": {
@@ -7526,7 +7558,7 @@
"bundled": true
},
"hosted-git-info": {
- "version": "2.8.8",
+ "version": "2.8.9",
"bundled": true
},
"http-cache-semantics": {
@@ -7608,7 +7640,7 @@
"bundled": true
},
"ini": {
- "version": "1.3.5",
+ "version": "1.3.8",
"bundled": true
},
"init-package-json": {
@@ -7743,11 +7775,7 @@
"bundled": true
},
"json-schema": {
- "version": "0.2.3",
- "bundled": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
+ "version": "0.4.0",
"bundled": true
},
"json-stringify-safe": {
@@ -7759,12 +7787,12 @@
"bundled": true
},
"jsprim": {
- "version": "1.4.1",
+ "version": "1.4.2",
"bundled": true,
"requires": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
}
},
@@ -8320,7 +8348,7 @@
}
},
"npm-user-validate": {
- "version": "1.0.0",
+ "version": "1.0.1",
"bundled": true
},
"npmlog": {
@@ -8365,7 +8393,7 @@
}
},
"opener": {
- "version": "1.5.1",
+ "version": "1.5.2",
"bundled": true
},
"os-homedir": {
@@ -8492,7 +8520,7 @@
"bundled": true
},
"path-parse": {
- "version": "1.0.6",
+ "version": "1.0.7",
"bundled": true
},
"performance-now": {
@@ -8926,7 +8954,7 @@
}
},
"ssri": {
- "version": "6.0.1",
+ "version": "6.0.2",
"bundled": true,
"requires": {
"figgy-pudding": "^3.5.1"
@@ -9043,16 +9071,16 @@
}
},
"tar": {
- "version": "4.4.13",
+ "version": "4.4.19",
"bundled": true,
"requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
+ "chownr": "^1.1.4",
+ "fs-minipass": "^1.2.7",
+ "minipass": "^2.9.0",
+ "minizlib": "^1.3.3",
+ "mkdirp": "^0.5.5",
+ "safe-buffer": "^5.2.1",
+ "yallist": "^3.1.1"
},
"dependencies": {
"minipass": {
@@ -9062,6 +9090,14 @@
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
}
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true
}
}
},
@@ -9195,6 +9231,19 @@
"xdg-basedir": "^3.0.0"
}
},
+ "uri-js": {
+ "version": "4.4.0",
+ "bundled": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ },
"url-parse-lax": {
"version": "1.0.0",
"bundled": true,
@@ -9352,7 +9401,7 @@
"bundled": true
},
"y18n": {
- "version": "4.0.0",
+ "version": "4.0.1",
"bundled": true
},
"yallist": {
@@ -10119,13 +10168,19 @@
}
},
"plist": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
- "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
+ "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
"requires": {
- "base64-js": "^1.2.3",
- "xmlbuilder": "^9.0.7",
- "xmldom": "0.1.x"
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^9.0.7"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ }
}
},
"posix-character-classes": {
@@ -10557,9 +10612,12 @@
}
},
"rcedit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-2.2.0.tgz",
- "integrity": "sha512-dhFtYmQS+V8qQIANyX6zDK+sO50ayDePKApi46ZPK8I6QeyyTDD6LManMa7a3p3c9mLM4zi9QBP41pfhQ9p7Sg=="
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-3.0.1.tgz",
+ "integrity": "sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw==",
+ "requires": {
+ "cross-spawn-windows-exe": "^1.1.0"
+ }
},
"read-installed": {
"version": "3.1.3",
@@ -12426,6 +12484,11 @@
}
}
},
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
@@ -12927,6 +12990,20 @@
"webdriver": "^5.9.1"
}
},
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -13100,11 +13177,6 @@
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
},
- "xmldom": {
- "version": "0.1.31",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
- "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
- },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
diff --git a/script/package.json b/script/package.json
index c2d21f2d0..ccd6bc266 100644
--- a/script/package.json
+++ b/script/package.json
@@ -5,17 +5,17 @@
"7zip-bin": "^4.0.2",
"@atom/electron-winstaller": "0.0.1",
"@octokit/request": "^5.4.5",
- "async": "2.0.1",
+ "async": "^3.2.0",
"babel-core": "5.8.38",
"babel-eslint": "^10.0.1",
"cheerio": "1.0.0-rc.2",
"coffeelint": "1.15.7",
"colors": "1.1.2",
"donna": "1.0.16",
- "electron-chromedriver": "^9.0.0",
- "electron-link": "npm:@aminya/electron-link@^0.6.3",
- "electron-mksnapshot": "^9.0.2",
- "electron-packager": "^15.0.0",
+ "electron-chromedriver": "^11.0.0",
+ "electron-link": "^0.6.0",
+ "electron-mksnapshot": "^11.0.1",
+ "electron-packager": "^15.1.0",
"eslint": "^5.16.0",
"eslint-config-prettier": "^4.2.0",
"eslint-config-standard": "^12.0.0",
@@ -32,12 +32,12 @@
"legal-eagle": "0.14.0",
"lodash.startcase": "4.4.0",
"lodash.template": "4.5.0",
- "minidump": "0.9.0",
+ "minidump": "^0.22.0",
"mkdirp": "0.5.1",
"nock": "^13.0.2",
- "node-fetch": "^2.6.1",
+ "node-fetch": "^2.6.7",
"normalize-package-data": "2.3.5",
- "npm": "6.14.8",
+ "npm": "^6.14.16",
"npm-check": "^5.9.2",
"passwd-user": "2.1.0",
"pegjs": "0.9.0",
diff --git a/script/script-runner/package-lock.json b/script/script-runner/package-lock.json
index fe0a56223..493106319 100644
--- a/script/script-runner/package-lock.json
+++ b/script/script-runner/package-lock.json
@@ -35,6 +35,3108 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "npm": {
+ "version": "6.14.17",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.17.tgz",
+ "integrity": "sha512-CxEDn1ydVRPDl4tHrlnq+WevYAhv4GF2AEHzJKQ4prZDZ96IS3Uo6t0Sy6O9kB6XzqkI+J00WfYCqqk0p6IJ1Q==",
+ "requires": {
+ "JSONStream": "^1.3.5",
+ "abbrev": "~1.1.1",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "aproba": "^2.0.0",
+ "archy": "~1.0.0",
+ "bin-links": "^1.1.8",
+ "bluebird": "^3.5.5",
+ "byte-size": "^5.0.1",
+ "cacache": "^12.0.3",
+ "call-limit": "^1.1.1",
+ "chownr": "^1.1.4",
+ "ci-info": "^2.0.0",
+ "cli-columns": "^3.1.2",
+ "cli-table3": "^0.5.1",
+ "cmd-shim": "^3.0.3",
+ "columnify": "~1.5.4",
+ "config-chain": "^1.1.12",
+ "debuglog": "*",
+ "detect-indent": "~5.0.0",
+ "detect-newline": "^2.1.0",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "fs-vacuum": "~1.2.10",
+ "fs-write-stream-atomic": "~1.0.10",
+ "gentle-fs": "^2.3.1",
+ "glob": "^7.1.6",
+ "graceful-fs": "^4.2.4",
+ "has-unicode": "~2.0.1",
+ "hosted-git-info": "^2.8.9",
+ "iferr": "^1.0.2",
+ "imurmurhash": "*",
+ "infer-owner": "^1.0.4",
+ "inflight": "~1.0.6",
+ "inherits": "^2.0.4",
+ "ini": "^1.3.8",
+ "init-package-json": "^1.10.3",
+ "is-cidr": "^3.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "lazy-property": "~1.0.0",
+ "libcipm": "^4.0.8",
+ "libnpm": "^3.0.1",
+ "libnpmaccess": "^3.0.2",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "libnpx": "^10.2.4",
+ "lock-verify": "^2.1.0",
+ "lockfile": "^1.0.4",
+ "lodash._baseindexof": "*",
+ "lodash._baseuniq": "~4.6.0",
+ "lodash._bindcallback": "*",
+ "lodash._cacheindexof": "*",
+ "lodash._createcache": "*",
+ "lodash._getnative": "*",
+ "lodash.clonedeep": "~4.5.0",
+ "lodash.restparam": "*",
+ "lodash.union": "~4.6.0",
+ "lodash.uniq": "~4.5.0",
+ "lodash.without": "~4.4.0",
+ "lru-cache": "^5.1.1",
+ "meant": "^1.0.2",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.5",
+ "move-concurrently": "^1.0.1",
+ "node-gyp": "^5.1.0",
+ "nopt": "^4.0.3",
+ "normalize-package-data": "^2.5.0",
+ "npm-audit-report": "^1.3.3",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "^3.0.2",
+ "npm-lifecycle": "^3.1.5",
+ "npm-package-arg": "^6.1.1",
+ "npm-packlist": "^1.4.8",
+ "npm-pick-manifest": "^3.0.2",
+ "npm-profile": "^4.0.4",
+ "npm-registry-fetch": "^4.0.7",
+ "npm-user-validate": "^1.0.1",
+ "npmlog": "~4.1.2",
+ "once": "~1.4.0",
+ "opener": "^1.5.2",
+ "osenv": "^0.1.5",
+ "pacote": "^9.5.12",
+ "path-is-inside": "~1.0.2",
+ "promise-inflight": "~1.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "query-string": "^6.8.2",
+ "qw": "~1.0.1",
+ "read": "~1.0.7",
+ "read-cmd-shim": "^1.0.5",
+ "read-installed": "~4.0.3",
+ "read-package-json": "^2.1.1",
+ "read-package-tree": "^5.3.1",
+ "readable-stream": "^3.6.0",
+ "readdir-scoped-modules": "^1.1.0",
+ "request": "^2.88.0",
+ "retry": "^0.12.0",
+ "rimraf": "^2.7.1",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.7.1",
+ "sha": "^3.0.0",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.1",
+ "sorted-union-stream": "~2.1.3",
+ "ssri": "^6.0.2",
+ "stringify-package": "^1.0.1",
+ "tar": "^4.4.19",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "unique-filename": "^1.1.1",
+ "unpipe": "~1.0.0",
+ "update-notifier": "^2.5.0",
+ "uuid": "^3.3.3",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "~3.0.0",
+ "which": "^1.3.1",
+ "worker-farm": "^1.7.0",
+ "write-file-atomic": "^2.4.3"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.5",
+ "bundled": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "agent-base": {
+ "version": "4.3.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "agentkeepalive": {
+ "version": "3.5.2",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "bundled": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "bundled": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "bundled": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "bundled": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bin-links": {
+ "version": "1.1.8",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "cmd-shim": "^3.0.0",
+ "gentle-fs": "^2.3.0",
+ "graceful-fs": "^4.1.15",
+ "npm-normalize-package-bin": "^1.0.0",
+ "write-file-atomic": "^2.3.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.5",
+ "bundled": true
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "bundled": 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",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "builtins": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "byline": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "byte-size": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "cacache": {
+ "version": "12.0.3",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "call-limit": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "bundled": true
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "cidr-regex": {
+ "version": "2.0.10",
+ "bundled": true,
+ "requires": {
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cli-columns": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "cli-table3": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "colors": "^1.1.2",
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "cmd-shim": {
+ "version": "3.0.3",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "bundled": true,
+ "requires": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "colors": {
+ "version": "1.3.3",
+ "bundled": true,
+ "optional": true
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "requires": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "bundled": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "configstore": {
+ "version": "3.1.5",
+ "bundled": true,
+ "requires": {
+ "dot-prop": "^4.2.1",
+ "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"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.5",
+ "bundled": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "duplexify": {
+ "version": "3.6.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "bundled": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "env-paths": {
+ "version": "2.2.0",
+ "bundled": true
+ },
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "errno": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "bundled": 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.2.0",
+ "bundled": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "bundled": true
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "bundled": 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": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "bundled": true
+ },
+ "find-npm-prefix": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": 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"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": 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"
+ }
+ }
+ }
+ },
+ "genfun": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "gentle-fs": {
+ "version": "2.3.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.2",
+ "chownr": "^1.1.2",
+ "cmd-shim": "^3.0.3",
+ "fs-vacuum": "^1.2.10",
+ "graceful-fs": "^4.1.11",
+ "iferr": "^0.1.5",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^0.5.1",
+ "path-is-inside": "^1.0.2",
+ "read-cmd-shim": "^1.0.1",
+ "slide": "^1.1.6"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "bundled": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": 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"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "bundled": 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"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "bundled": true,
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.6",
+ "bundled": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "bundled": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "bundled": true
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "bundled": true
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4",
+ "debug": "3.1.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "iferr": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.8",
+ "bundled": true
+ },
+ "init-package-json": {
+ "version": "1.10.3",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "bundled": true
+ },
+ "is-ci": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ci-info": "^1.5.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.6.0",
+ "bundled": true
+ }
+ }
+ },
+ "is-cidr": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "cidr-regex": "^2.0.10"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "bundled": true,
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-retry-allowed": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "bundled": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "libcipm": {
+ "version": "4.0.8",
+ "bundled": true,
+ "requires": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "graceful-fs": "^4.1.11",
+ "ini": "^1.3.5",
+ "lock-verify": "^2.1.0",
+ "mkdirp": "^0.5.1",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "pacote": "^9.1.0",
+ "read-package-json": "^2.0.13",
+ "rimraf": "^2.6.2",
+ "worker-farm": "^1.6.0"
+ }
+ },
+ "libnpm": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.3",
+ "find-npm-prefix": "^1.0.2",
+ "libnpmaccess": "^3.0.2",
+ "libnpmconfig": "^1.2.1",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmpublish": "^1.1.2",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "lock-verify": "^2.0.2",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "npm-profile": "^4.0.2",
+ "npm-registry-fetch": "^4.0.0",
+ "npmlog": "^4.1.2",
+ "pacote": "^9.5.3",
+ "read-package-json": "^2.0.13",
+ "stringify-package": "^1.0.0"
+ }
+ },
+ "libnpmaccess": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "get-stream": "^4.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmconfig": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "find-up": "^3.0.0",
+ "ini": "^1.3.5"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmhook": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmorg": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmpublish": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "lodash.clonedeep": "^4.5.0",
+ "normalize-package-data": "^2.4.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0",
+ "semver": "^5.5.1",
+ "ssri": "^6.0.1"
+ }
+ },
+ "libnpmsearch": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmteam": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpx": {
+ "version": "10.2.4",
+ "bundled": true,
+ "requires": {
+ "dotenv": "^5.0.1",
+ "npm-package-arg": "^6.0.0",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.0",
+ "update-notifier": "^2.3.0",
+ "which": "^1.3.0",
+ "y18n": "^4.0.0",
+ "yargs": "^14.2.3"
+ }
+ },
+ "lock-verify": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "^6.1.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "lockfile": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "bundled": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "bundled": true,
+ "requires": {
+ "lodash._createset": "~4.0.0",
+ "lodash._root": "~3.0.0"
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0"
+ }
+ },
+ "lodash._createset": {
+ "version": "4.0.3",
+ "bundled": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "bundled": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "bundled": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "bundled": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "make-fetch-happen": {
+ "version": "5.0.2",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "^3.4.1",
+ "cacache": "^12.0.0",
+ "http-cache-semantics": "^3.8.1",
+ "http-proxy-agent": "^2.1.0",
+ "https-proxy-agent": "^2.2.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "node-fetch-npm": "^2.0.2",
+ "promise-retry": "^1.1.1",
+ "socks-proxy-agent": "^4.0.0",
+ "ssri": "^6.0.0"
+ }
+ },
+ "meant": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "mime-db": {
+ "version": "1.35.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.19",
+ "bundled": true,
+ "requires": {
+ "mime-db": "~1.35.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "bundled": true
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.5",
+ "bundled": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.6",
+ "bundled": true
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "bundled": true
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "^0.1.11",
+ "json-parse-better-errors": "^1.0.0",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node-gyp": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "env-paths": "^2.2.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.2",
+ "mkdirp": "^0.5.1",
+ "nopt": "^4.0.1",
+ "npmlog": "^4.1.2",
+ "request": "^2.88.0",
+ "rimraf": "^2.6.3",
+ "semver": "^5.7.1",
+ "tar": "^4.4.12",
+ "which": "^1.3.1"
+ }
+ },
+ "nopt": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "npm-audit-report": {
+ "version": "1.3.3",
+ "bundled": true,
+ "requires": {
+ "cli-table3": "^0.5.0",
+ "console-control-strings": "^1.1.0"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "npm-lifecycle": {
+ "version": "3.1.5",
+ "bundled": true,
+ "requires": {
+ "byline": "^5.0.0",
+ "graceful-fs": "^4.1.15",
+ "node-gyp": "^5.0.2",
+ "resolve-from": "^4.0.0",
+ "slide": "^1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "^1.1.0",
+ "which": "^1.3.1"
+ }
+ },
+ "npm-logical-tree": {
+ "version": "1.2.1",
+ "bundled": true
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "npm-package-arg": {
+ "version": "6.1.1",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^2.7.1",
+ "osenv": "^0.1.5",
+ "semver": "^5.6.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "1.4.8",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "npm-package-arg": "^6.0.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "npm-profile": {
+ "version": "4.0.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.2 || 2",
+ "figgy-pudding": "^3.4.1",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "4.0.7",
+ "bundled": true,
+ "requires": {
+ "JSONStream": "^1.3.4",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.4.1",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "npm-package-arg": "^6.1.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.1",
+ "bundled": true
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": 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
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "bundled": true
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.5.2",
+ "bundled": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "pacote": {
+ "version": "9.5.12",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "cacache": "^12.0.2",
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.1.0",
+ "glob": "^7.1.3",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "minimatch": "^3.0.4",
+ "minipass": "^2.3.5",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-package-data": "^2.4.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-packlist": "^1.1.12",
+ "npm-pick-manifest": "^3.0.0",
+ "npm-registry-fetch": "^4.0.0",
+ "osenv": "^0.1.5",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^5.0.1",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.6.0",
+ "ssri": "^6.0.1",
+ "tar": "^4.4.10",
+ "unique-filename": "^1.1.1",
+ "which": "^1.3.1"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "^1.0.0",
+ "retry": "^0.10.0"
+ },
+ "dependencies": {
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "requires": {
+ "read": "1"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true
+ },
+ "protoduck": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "genfun": "^5.0.0"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "bundled": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "bundled": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "bundled": true
+ },
+ "query-string": {
+ "version": "6.8.2",
+ "bundled": true,
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ }
+ },
+ "qw": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "mute-stream": "~0.0.4"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "graceful-fs": "^4.1.2",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ }
+ },
+ "read-package-json": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "json-parse-better-errors": "^1.0.1",
+ "normalize-package-data": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0"
+ }
+ },
+ "read-package-tree": {
+ "version": "5.3.1",
+ "bundled": true,
+ "requires": {
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "util-promisify": "^2.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.4.0",
+ "bundled": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "bundled": true,
+ "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"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "sha": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "socks": {
+ "version": "2.3.3",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "^4.1.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "agent-base": "~4.2.1",
+ "socks": "~2.3.2"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ }
+ }
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "bundled": true,
+ "requires": {
+ "from2": "^1.3.0",
+ "stream-iterate": "^1.1.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.10"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "bundled": true
+ },
+ "split-on-first": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "bundled": 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",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "stringify-package": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "bundled": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tar": {
+ "version": "4.4.19",
+ "bundled": true,
+ "requires": {
+ "chownr": "^1.1.4",
+ "fs-minipass": "^1.2.7",
+ "minipass": "^2.9.0",
+ "minizlib": "^1.3.3",
+ "mkdirp": "^0.5.5",
+ "safe-buffer": "^5.2.1",
+ "yallist": "^3.1.1"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "bundled": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "tiny-relative-date": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "bundled": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "bundled": 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"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.0",
+ "bundled": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "bundled": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "util-extend": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "util-promisify": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "bundled": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "builtins": "^1.0.3"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "bundled": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ }
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "bundled": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "write-file-atomic": {
+ "version": "2.4.3",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "y18n": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ },
+ "yargs": {
+ "version": "14.2.3",
+ "bundled": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^15.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "15.0.1",
+ "bundled": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "bundled": true
+ }
+ }
+ }
+ }
+ },
"observable-fns": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.5.1.tgz",
diff --git a/script/script-runner/package.json b/script/script-runner/package.json
index 4051285e1..9a9a61199 100644
--- a/script/script-runner/package.json
+++ b/script/script-runner/package.json
@@ -2,6 +2,7 @@
"name": "atom-build-scripts-runner",
"description": "Atom build scripts runner",
"dependencies": {
- "threads": "^1.6.3"
+ "threads": "^1.6.3",
+ "npm": "^6.14.16"
}
}
diff --git a/script/test b/script/test
index 6b402fe52..c4e7b6660 100755
--- a/script/test
+++ b/script/test
@@ -34,7 +34,7 @@ const argv = require('yargs')
.help().argv;
const assert = require('assert');
-const async = require('async');
+const asyncSeries = require('async/series');
const childProcess = require('child_process');
const fs = require('fs-extra');
const glob = require('glob');
@@ -214,6 +214,7 @@ function isTimedOut(stderrOutput) {
if (stderrOutput) {
return (
stderrOutput.includes('timeout: timed out after') || // happens in core renderer tests
+ stderrOutput.includes('Error: Timed out waiting on') || // happens in core renderer tests
stderrOutput.includes('Error: timeout of') || // happens in core main tests
stderrOutput.includes(
'Error Downloading Update: Could not get code signature for running application'
@@ -475,7 +476,7 @@ function requestedTestSuites(platform) {
return suites;
}
-async.series(testSuitesToRun, function(err, results) {
+asyncSeries(testSuitesToRun, function(err, results) {
if (err) {
console.error(err);
process.exit(1);
diff --git a/script/vsts/lib/release-notes.js b/script/vsts/lib/release-notes.js
index 52b87aeed..30ef3c777 100644
--- a/script/vsts/lib/release-notes.js
+++ b/script/vsts/lib/release-notes.js
@@ -8,7 +8,7 @@ const { REPO_OWNER, MAIN_REPO, NIGHTLY_RELEASE_REPO } = require('../../config');
module.exports.getRelease = async function(releaseVersion, githubToken) {
if (githubToken) {
octokit.authenticate({
- type: 'oauth',
+ type: 'token',
token: githubToken
});
}
@@ -39,7 +39,7 @@ module.exports.generateForVersion = async function(
if (githubToken) {
changelog.setGithubAccessToken(githubToken);
octokit.authenticate({
- type: 'oauth',
+ type: 'token',
token: githubToken
});
}
diff --git a/script/vsts/lib/upload-to-azure-blob.js b/script/vsts/lib/upload-to-azure-blob.js
new file mode 100644
index 000000000..136d15642
--- /dev/null
+++ b/script/vsts/lib/upload-to-azure-blob.js
@@ -0,0 +1,51 @@
+'use strict';
+
+const path = require('path');
+const { BlobServiceClient } = require('@azure/storage-blob');
+
+module.exports = function upload(connStr, directory, assets) {
+ const blobServiceClient = BlobServiceClient.fromConnectionString(connStr);
+ const containerName = 'atom-build';
+ const containerClient = blobServiceClient.getContainerClient(containerName);
+
+ async function listExistingAssetsForDirectory() {
+ return containerClient.listBlobsFlat({ prefix: directory });
+ }
+
+ async function deleteExistingAssets(existingAssets = []) {
+ try {
+ for await (const asset of existingAssets) {
+ console.log(`Deleting blob ${asset.name}`);
+ containerClient.deleteBlob(asset.name);
+ }
+ return Promise.resolve(true);
+ } catch (ex) {
+ return Promise.reject(ex.message);
+ }
+ }
+
+ function uploadAssets(assets) {
+ return assets.reduce(function(promise, asset) {
+ return promise.then(() => uploadAsset(asset));
+ }, Promise.resolve());
+ }
+
+ function uploadAsset(assetPath) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ console.info(`Uploading ${assetPath}`);
+ const blockBlobClient = containerClient.getBlockBlobClient(
+ path.join(directory, path.basename(assetPath))
+ );
+ const result = await blockBlobClient.uploadFile(assetPath);
+ resolve(result);
+ } catch (ex) {
+ reject(ex.message);
+ }
+ });
+ }
+
+ return listExistingAssetsForDirectory()
+ .then(deleteExistingAssets)
+ .then(() => uploadAssets(assets));
+};
diff --git a/script/vsts/lib/upload-to-s3.js b/script/vsts/lib/upload-to-s3.js
deleted file mode 100644
index 36c69e9de..000000000
--- a/script/vsts/lib/upload-to-s3.js
+++ /dev/null
@@ -1,70 +0,0 @@
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-const aws = require('aws-sdk');
-
-module.exports = function(
- s3Key,
- s3Secret,
- s3Bucket,
- directory,
- assets,
- acl = 'public-read'
-) {
- const s3 = new aws.S3({
- accessKeyId: s3Key,
- secretAccessKey: s3Secret,
- params: { Bucket: s3Bucket }
- });
-
- function listExistingAssetsForDirectory(directory) {
- return s3
- .listObjectsV2({ Prefix: directory })
- .promise()
- .then(res => {
- return res.Contents.map(obj => {
- return { Key: obj.Key };
- });
- });
- }
-
- function deleteExistingAssets(existingAssets) {
- if (existingAssets.length > 0) {
- return s3
- .deleteObjects({ Delete: { Objects: existingAssets } })
- .promise();
- } else {
- return Promise.resolve(true);
- }
- }
-
- function uploadAssets(assets, directory) {
- return assets.reduce(function(promise, asset) {
- return promise.then(() => uploadAsset(directory, asset));
- }, Promise.resolve());
- }
-
- function uploadAsset(directory, assetPath) {
- return new Promise((resolve, reject) => {
- console.info(`Uploading ${assetPath}`);
- const params = {
- Key: `${directory}${path.basename(assetPath)}`,
- ACL: acl,
- Body: fs.createReadStream(assetPath)
- };
-
- s3.upload(params, error => {
- if (error) {
- reject(error);
- } else {
- resolve();
- }
- });
- });
- }
-
- return listExistingAssetsForDirectory(directory)
- .then(deleteExistingAssets)
- .then(() => uploadAssets(assets, directory));
-};
diff --git a/script/vsts/nightly-release.yml b/script/vsts/nightly-release.yml
index 080f79587..c73bfd6ee 100644
--- a/script/vsts/nightly-release.yml
+++ b/script/vsts/nightly-release.yml
@@ -49,10 +49,11 @@ jobs:
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
ATOM_RELEASE_VERSION: $(ReleaseVersion)
- ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY)
- ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET)
- ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET)
- PACKAGE_CLOUD_API_KEY: $(_PACKAGE_CLOUD_API_KEY)
+ ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
+ ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING)
+ ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
+ ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
+ PACKAGE_CLOUD_API_KEY: $(PACKAGE_CLOUD_API_KEY)
displayName: Create Nightly Release
- job: bump_dependencies
displayName: Bump Dependencies
diff --git a/script/vsts/package-lock.json b/script/vsts/package-lock.json
index fa720c4b9..398af42a0 100644
--- a/script/vsts/package-lock.json
+++ b/script/vsts/package-lock.json
@@ -1,8 +1,3982 @@
{
"name": "atom-release-scripts",
+ "lockfileVersion": 2,
"requires": true,
- "lockfileVersion": 1,
+ "packages": {
+ "": {
+ "name": "atom-release-scripts",
+ "dependencies": {
+ "@azure/storage-blob": "^12.5.0",
+ "@octokit/rest": "^15.9.5",
+ "download": "^7.1.0",
+ "glob": "7.0.3",
+ "pr-changelog": "^0.3.4",
+ "publish-release": "^1.6.0",
+ "request": "^2.87.0",
+ "request-promise-native": "^1.0.5",
+ "semver": "5.3.0",
+ "yargs": "4.8.1"
+ }
+ },
+ "node_modules/@azure/abort-controller": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
+ "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@azure/core-asynciterator-polyfill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz",
+ "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg=="
+ },
+ "node_modules/@azure/core-auth": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
+ "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-http": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.2.tgz",
+ "integrity": "sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "@types/node-fetch": "^2.5.0",
+ "@types/tunnel": "^0.0.3",
+ "form-data": "^4.0.0",
+ "node-fetch": "^2.6.0",
+ "process": "^0.11.10",
+ "tough-cookie": "^4.0.0",
+ "tslib": "^2.2.0",
+ "tunnel": "^0.0.6",
+ "uuid": "^8.3.0",
+ "xml2js": "^0.4.19"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "dependencies": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@azure/core-http/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@azure/core-lro": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz",
+ "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-paging": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz",
+ "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==",
+ "dependencies": {
+ "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-tracing": {
+ "version": "1.0.0-preview.13",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
+ "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.1",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/logger": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz",
+ "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/storage-blob": {
+ "version": "12.8.0",
+ "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz",
+ "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-http": "^2.0.0",
+ "@azure/core-lro": "^2.2.0",
+ "@azure/core-paging": "^1.1.1",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "events": "^3.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/storage-blob/node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
+ "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
+ "dependencies": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.0",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/core/node_modules/before-after-hook": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
+ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "dependencies": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+ "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
+ "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
+ "dependencies": {
+ "@octokit/types": "^6.34.0"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=2"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
+ "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
+ "dependencies": {
+ "@octokit/types": "^6.34.0",
+ "deprecation": "^2.3.1"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "dependencies": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "15.9.5",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.9.5.tgz",
+ "integrity": "sha512-vJEHSTnI4UAbCDTjVSQljPeX81zsQVNj2ruM5Oj5gxOttHD0TcfWeElcJYoITCMxQTgN6Y+bJFo6/+/0CqoacA==",
+ "dependencies": {
+ "before-after-hook": "^1.1.0",
+ "btoa-lite": "^1.0.0",
+ "debug": "^3.1.0",
+ "http-proxy-agent": "^2.1.0",
+ "https-proxy-agent": "^2.2.0",
+ "lodash": "^4.17.4",
+ "node-fetch": "^2.1.1",
+ "url-template": "^2.0.8"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "6.34.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+ "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+ "dependencies": {
+ "@octokit/openapi-types": "^11.2.0"
+ }
+ },
+ "node_modules/@opentelemetry/api": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
+ "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "16.11.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz",
+ "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A=="
+ },
+ "node_modules/@types/node-fetch": {
+ "version": "2.5.12",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
+ "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
+ "dependencies": {
+ "@types/node": "*",
+ "form-data": "^3.0.0"
+ }
+ },
+ "node_modules/@types/node-fetch/node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/@types/node-fetch/node_modules/form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/tunnel": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz",
+ "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dependencies": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/archive-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
+ "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+ "dependencies": {
+ "file-type": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/archive-type/node_modules/file-type": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
+ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/aws4": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "node_modules/babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dependencies": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dependencies": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "node_modules/babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dependencies": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "node_modules/babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dependencies": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
+ },
+ "node_modules/babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dependencies": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dependencies": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dependencies": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dependencies": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dependencies": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dependencies": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dependencies": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dependencies": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dependencies": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dependencies": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dependencies": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "node_modules/babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dependencies": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ }
+ },
+ "node_modules/babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ }
+ },
+ "node_modules/babel-polyfill/node_modules/regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ },
+ "node_modules/babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "deprecated": "🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!",
+ "dependencies": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "node_modules/babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "node_modules/babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/babel-traverse/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dependencies": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "node_modules/babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "bin": {
+ "babylon": "bin/babylon.js"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true,
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz",
+ "integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA=="
+ },
+ "node_modules/bl": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
+ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
+ "dependencies": {
+ "readable-stream": "~1.0.26"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz",
+ "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg=="
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/btoa-lite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
+ "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc="
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "node_modules/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=="
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
+ },
+ "node_modules/builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+ "dependencies": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ }
+ },
+ "node_modules/cacheable-request/node_modules/lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dependencies": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/camelcase-keys/node_modules/camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "node_modules/caw": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
+ "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
+ "dependencies": {
+ "get-proxy": "^2.0.0",
+ "isurl": "^1.0.0-alpha5",
+ "tunnel-agent": "^0.6.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz",
+ "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0="
+ },
+ "node_modules/cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.8.1",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dependencies": {
+ "graceful-readlink": ">= 1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6.x"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "node_modules/config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "dependencies": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js."
+ },
+ "node_modules/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="
+ },
+ "node_modules/currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dependencies": {
+ "array-find-index": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/decompress": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
+ "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
+ "dependencies": {
+ "decompress-tar": "^4.0.0",
+ "decompress-tarbz2": "^4.0.0",
+ "decompress-targz": "^4.0.0",
+ "decompress-unzip": "^4.0.1",
+ "graceful-fs": "^4.1.10",
+ "make-dir": "^1.0.0",
+ "pify": "^2.3.0",
+ "strip-dirs": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
+ "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
+ "dependencies": {
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0",
+ "tar-stream": "^1.5.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tar/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tarbz2": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
+ "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
+ "dependencies": {
+ "decompress-tar": "^4.1.0",
+ "file-type": "^6.1.0",
+ "is-stream": "^1.1.0",
+ "seek-bzip": "^1.0.5",
+ "unbzip2-stream": "^1.0.9"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-tarbz2/node_modules/file-type": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
+ "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
+ "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
+ "dependencies": {
+ "decompress-tar": "^4.1.1",
+ "file-type": "^5.2.0",
+ "is-stream": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-targz/node_modules/file-type": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
+ "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-unzip": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
+ "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+ "dependencies": {
+ "file-type": "^3.8.0",
+ "get-stream": "^2.2.0",
+ "pify": "^2.3.0",
+ "yauzl": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/file-type": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
+ "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decompress-unzip/node_modules/get-stream": {
+ "version": "2.3.1",
+ "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
+ "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+ "dependencies": {
+ "object-assign": "^4.0.1",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "node_modules/download": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
+ "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
+ "dependencies": {
+ "archive-type": "^4.0.0",
+ "caw": "^2.0.1",
+ "content-disposition": "^0.5.2",
+ "decompress": "^4.2.0",
+ "ext-name": "^5.0.0",
+ "file-type": "^8.1.0",
+ "filenamify": "^2.0.0",
+ "get-stream": "^3.0.0",
+ "got": "^8.3.1",
+ "make-dir": "^1.2.0",
+ "p-event": "^2.1.0",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/download/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dependencies": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+ },
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true,
+ "dependencies": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "node_modules/editor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz",
+ "integrity": "sha1-YMf4e9YrzGqJT6jM1q+3gjok90I="
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ=="
+ },
+ "node_modules/es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dependencies": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-home-dir": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz",
+ "integrity": "sha1-ct6KBIbMKKO71wRjU5iCW1tign0="
+ },
+ "node_modules/ext-list": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
+ "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
+ "dependencies": {
+ "mime-db": "^1.28.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext-name": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
+ "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
+ "dependencies": {
+ "ext-list": "^2.0.0",
+ "sort-keys-length": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "engines": [
+ "node >=0.6.0"
+ ]
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "node_modules/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="
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/file-type": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
+ "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/filename-reserved-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
+ "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/filenamify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
+ "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
+ "dependencies": {
+ "filename-reserved-regex": "^2.0.0",
+ "strip-outer": "^1.0.0",
+ "trim-repeated": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "node_modules/from2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/from2/node_modules/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==",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/from2/node_modules/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==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/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=="
+ },
+ "node_modules/get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "node_modules/get-proxy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
+ "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
+ "dependencies": {
+ "npm-conf": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "3.0.0",
+ "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "node_modules/ghauth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-2.0.1.tgz",
+ "integrity": "sha1-ebfWiwvPjn0IUqI7FHU539MUrPY=",
+ "dependencies": {
+ "bl": "~0.9.4",
+ "hyperquest": "~1.2.0",
+ "mkdirp": "~0.5.0",
+ "read": "~1.0.5",
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/github-url-to-object": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-1.6.0.tgz",
+ "integrity": "sha1-iR73+7+rqP7XFRCs2xtOk0apcNw=",
+ "dependencies": {
+ "is-url": "^1.1.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.3.tgz",
+ "integrity": "sha1-CqI1kxpKlqwT1g/6wvuHe9btT1g=",
+ "dependencies": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/got": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
+ "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
+ "dependencies": {
+ "@sindresorhus/is": "^0.7.0",
+ "cacheable-request": "^2.1.1",
+ "decompress-response": "^3.3.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "into-stream": "^3.1.0",
+ "is-retry-allowed": "^1.1.0",
+ "isurl": "^1.0.0-alpha5",
+ "lowercase-keys": "^1.0.0",
+ "mimic-response": "^1.0.0",
+ "p-cancelable": "^0.4.0",
+ "p-timeout": "^2.0.1",
+ "pify": "^3.0.0",
+ "safe-buffer": "^5.1.1",
+ "timed-out": "^4.0.1",
+ "url-parse-lax": "^3.0.0",
+ "url-to-options": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/got/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
+ },
+ "node_modules/har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "deprecated": "this library is no longer supported",
+ "dependencies": {
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-symbol-support-x": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
+ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/has-to-string-tag-x": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
+ "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
+ "dependencies": {
+ "has-symbol-support-x": "^1.4.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w=="
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+ "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
+ "dependencies": {
+ "agent-base": "4",
+ "debug": "3.1.0"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/https-proxy-agent/node_modules/agent-base": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
+ "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+ "dependencies": {
+ "es6-promisify": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/hyperquest": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz",
+ "integrity": "sha1-OeH+9miI3Hzg3sbA3YFPb8iUStU=",
+ "dependencies": {
+ "duplexer2": "~0.0.2",
+ "through2": "~0.6.3"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
+ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q="
+ },
+ "node_modules/indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dependencies": {
+ "repeating": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "node_modules/ini": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
+ "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
+ },
+ "node_modules/inquirer": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.8.5.tgz",
+ "integrity": "sha1-29dAz2yjtzEpamPOb22WGFHzNt8=",
+ "dependencies": {
+ "ansi-regex": "^1.1.1",
+ "chalk": "^1.0.0",
+ "cli-width": "^1.0.1",
+ "figures": "^1.3.5",
+ "lodash": "^3.3.1",
+ "readline2": "^0.1.1",
+ "rx": "^2.4.3",
+ "through": "^2.3.6"
+ }
+ },
+ "node_modules/inquirer/node_modules/ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
+ "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/inquirer/node_modules/lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ },
+ "node_modules/into-stream": {
+ "version": "3.1.0",
+ "resolved": "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+ "dependencies": {
+ "from2": "^2.1.1",
+ "p-is-promise": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "builtin-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-natural-number": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
+ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg="
+ },
+ "node_modules/is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "node_modules/is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "node_modules/isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "node_modules/isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "dependencies": {
+ "has-to-string-tag-x": "^1.2.0",
+ "is-object": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "node_modules/jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+ },
+ "node_modules/json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "node_modules/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="
+ },
+ "node_modules/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="
+ },
+ "node_modules/jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "dependencies": {
+ "json-buffer": "3.0.0"
+ }
+ },
+ "node_modules/lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ },
+ "node_modules/lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dependencies": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/make-dir/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dependencies": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dependencies": {
+ "mime-db": "~1.33.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
+ "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "node_modules/mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
+ "dependencies": {
+ "minimist": "0.0.8"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ }
+ },
+ "node_modules/mkdirp/node_modules/minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "node_modules/moment": {
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
+ "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "dependencies": {
+ "prepend-http": "^2.0.0",
+ "query-string": "^5.0.1",
+ "sort-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/normalize-url/node_modules/sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-conf": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
+ "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
+ "dependencies": {
+ "config-chain": "^1.1.11",
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-conf/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dependencies": {
+ "lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-cancelable": {
+ "version": "0.4.1",
+ "resolved": "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
+ "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-event": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.1.0.tgz",
+ "integrity": "sha512-sDEpDVnzLGlJj3k590uUdpfEUySP5yAYlvfTCu5hTDvSTXQVecYWKcEwdO49PrZlnJ5wkfAvtawnno/jyXeqvA==",
+ "dependencies": {
+ "p-timeout": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-link-header": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.4.1.tgz",
+ "integrity": "sha1-9r1hXcZxP9QJNc6XlF5NP1Iu3xQ=",
+ "dependencies": {
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pkginfo": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz",
+ "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/pr-changelog": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.4.tgz",
+ "integrity": "sha512-jeRqtyX4vJ5bpiyNjeXq6GN3Y89fQSr6T88UbYPX9c7F2sRv41MLyvz8HvAlal8SCAl/CvbuzwkxLKrXONQB3A==",
+ "dependencies": {
+ "@octokit/rest": "^18.12.0",
+ "babel-plugin-syntax-async-functions": "^6.1.4",
+ "babel-plugin-transform-regenerator": "^6.1.4",
+ "babel-polyfill": "^6.1.4",
+ "babel-preset-es2015": "^6.1.4",
+ "bluebird": "^3.0.6",
+ "expand-home-dir": "0.0.3",
+ "moment": "^2.10.6",
+ "parse-link-header": "^0.4.1",
+ "yargs": "^3.31.0"
+ },
+ "bin": {
+ "pr-changelog": "lib/main.js"
+ }
+ },
+ "node_modules/pr-changelog/node_modules/@octokit/rest": {
+ "version": "18.12.0",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
+ "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
+ "dependencies": {
+ "@octokit/core": "^3.5.1",
+ "@octokit/plugin-paginate-rest": "^2.16.8",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ }
+ },
+ "node_modules/pr-changelog/node_modules/camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pr-changelog/node_modules/window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "bin": {
+ "window-size": "cli.js"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/pr-changelog/node_modules/yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dependencies": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ },
+ "node_modules/prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "dependencies": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ },
+ "bin": {
+ "pretty-bytes": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/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=="
+ },
+ "node_modules/progress-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+ "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "dependencies": {
+ "speedometer": "~0.1.2",
+ "through2": "~0.2.3"
+ }
+ },
+ "node_modules/progress-stream/node_modules/readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/progress-stream/node_modules/through2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+ "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+ "dependencies": {
+ "readable-stream": "~1.1.9",
+ "xtend": "~2.1.1"
+ }
+ },
+ "node_modules/progress-stream/node_modules/xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dependencies": {
+ "object-keys": "~0.4.0"
+ },
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
+ },
+ "node_modules/psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "node_modules/publish-release": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/publish-release/-/publish-release-1.6.0.tgz",
+ "integrity": "sha512-t+NFXTQN/VDTg9yJ8Uv5ZWQ7Ud1T5W1tPW+bmuo4g6uYVQTVNiwwRF6Td3EtXFTOafpEXJQEZqGG7IvIJwLwIg==",
+ "dependencies": {
+ "async": "^0.9.0",
+ "ghauth": "^2.0.0",
+ "github-url-to-object": "^1.4.2",
+ "inquirer": "^0.8.2",
+ "lodash": "^3.6.0",
+ "mime": "^1.3.4",
+ "minimist": "^1.1.1",
+ "pkginfo": "^0.3.0",
+ "pretty-bytes": "^1.0.4",
+ "progress-stream": "^1.0.1",
+ "request": "^2.54.0",
+ "single-line-log": "^0.4.1",
+ "string-editor": "^0.1.0"
+ },
+ "bin": {
+ "publish-release": "bin/publish-release"
+ }
+ },
+ "node_modules/publish-release/node_modules/lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
+ },
+ "node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "node_modules/qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/query-string": {
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
+ "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=",
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "node_modules/readline2": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/readline2/-/readline2-0.1.1.tgz",
+ "integrity": "sha1-mUQ7pug7gw7zBRv9fcJBqCco1Wg=",
+ "dependencies": {
+ "mute-stream": "0.0.4",
+ "strip-ansi": "^2.0.1"
+ }
+ },
+ "node_modules/readline2/node_modules/ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
+ "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readline2/node_modules/mute-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.4.tgz",
+ "integrity": "sha1-qSGZYKbV1dBGWXruUSUsZlX3F34="
+ },
+ "node_modules/readline2/node_modules/strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
+ "dependencies": {
+ "ansi-regex": "^1.0.0"
+ },
+ "bin": {
+ "strip-ansi": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dependencies": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dependencies": {
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dependencies": {
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
+ }
+ },
+ "node_modules/regjsgen": {
+ "version": "0.2.0",
+ "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
+ },
+ "node_modules/regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dependencies": {
+ "is-finite": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/request": {
+ "version": "2.87.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/request-promise-core": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
+ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "dependencies": {
+ "lodash": "^4.13.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "request": "^2.34"
+ }
+ },
+ "node_modules/request-promise-native": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
+ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142",
+ "dependencies": {
+ "request-promise-core": "1.1.1",
+ "stealthy-require": "^1.1.0",
+ "tough-cookie": ">=2.3.3"
+ },
+ "engines": {
+ "node": ">=0.12.0"
+ },
+ "peerDependencies": {
+ "request": "^2.34"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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="
+ },
+ "node_modules/responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "dependencies": {
+ "lowercase-keys": "^1.0.0"
+ }
+ },
+ "node_modules/rx": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-2.5.3.tgz",
+ "integrity": "sha1-Ia3H2A8CACr1Da6X/Z2/JIdV9WY="
+ },
+ "node_modules/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=="
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "node_modules/sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+ },
+ "node_modules/seek-bzip": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
+ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
+ "dependencies": {
+ "commander": "~2.8.1"
+ },
+ "bin": {
+ "seek-bunzip": "bin/seek-bunzip",
+ "seek-table": "bin/seek-bzip-table"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "node_modules/single-line-log": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz",
+ "integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4="
+ },
+ "node_modules/sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "dependencies": {
+ "is-plain-obj": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sort-keys-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
+ "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+ "dependencies": {
+ "sort-keys": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg=="
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA=="
+ },
+ "node_modules/speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0="
+ },
+ "node_modules/sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dependencies": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "getpass": "^0.1.1",
+ "safer-buffer": "^2.0.2"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "optionalDependencies": {
+ "bcrypt-pbkdf": "^1.0.0",
+ "ecc-jsbn": "~0.1.1",
+ "jsbn": "~0.1.0",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "node_modules/stealthy-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "node_modules/string-editor": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/string-editor/-/string-editor-0.1.2.tgz",
+ "integrity": "sha1-9f8bWsSu16xsL7jeI20VUbIPYdA=",
+ "dependencies": {
+ "editor": "^1.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-dirs": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
+ "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
+ "dependencies": {
+ "is-natural-number": "^4.0.1"
+ }
+ },
+ "node_modules/strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dependencies": {
+ "get-stdin": "^4.0.1"
+ },
+ "bin": {
+ "strip-indent": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
+ "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
+ "dependencies": {
+ "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"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/tar-stream/node_modules/bl": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dependencies": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node_modules/tar-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/tar-stream/node_modules/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==",
+ "dependencies": {
+ "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"
+ }
+ },
+ "node_modules/tar-stream/node_modules/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==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "node_modules/through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dependencies": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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=="
+ },
+ "node_modules/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=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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==",
+ "dependencies": {
+ "punycode": "^1.4.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
+ "node_modules/trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "node_modules/unbzip2-stream": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz",
+ "integrity": "sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==",
+ "dependencies": {
+ "buffer": "^3.0.1",
+ "through": "^2.3.6"
+ }
+ },
+ "node_modules/unbzip2-stream/node_modules/base64-js": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
+ "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/unbzip2-stream/node_modules/buffer": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz",
+ "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=",
+ "deprecated": "This version of 'buffer' is out-of-date. You must update to v3.6.2 or newer",
+ "dependencies": {
+ "base64-js": "0.0.8",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "node_modules/unbzip2-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "dependencies": {
+ "prepend-http": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/url-template": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
+ "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE="
+ },
+ "node_modules/url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "node_modules/uuid": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.0.tgz",
+ "integrity": "sha512-ijO9N2xY/YaOqQ5yz5c4sy2ZjWmA6AR6zASb/gdpeKZ8+948CxwfMW9RrKVk5may6ev8c0/Xguu32e2Llelpqw==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "dependencies": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "node_modules/window-size": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
+ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
+ "bin": {
+ "window-size": "cli.js"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "node_modules/xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
+ },
+ "node_modules/yargs": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
+ "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
+ "dependencies": {
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "lodash.assign": "^4.0.3",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.1",
+ "which-module": "^1.0.0",
+ "window-size": "^0.2.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^2.4.1"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
+ "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "lodash.assign": "^4.0.6"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ }
+ },
"dependencies": {
+ "@azure/abort-controller": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
+ "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
+ "@azure/core-asynciterator-polyfill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz",
+ "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg=="
+ },
+ "@azure/core-auth": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
+ "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/core-http": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.2.tgz",
+ "integrity": "sha512-V1DdoO9V/sFimKpdWoNBgsE+QUjQgpXYnxrTdUp5RyhsTJjvEVn/HKmTQXIHuLUUo6IyIWj+B+Dg4VaXse9dIA==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "@types/node-fetch": "^2.5.0",
+ "@types/tunnel": "^0.0.3",
+ "form-data": "^4.0.0",
+ "node-fetch": "^2.6.0",
+ "process": "^0.11.10",
+ "tough-cookie": "^4.0.0",
+ "tslib": "^2.2.0",
+ "tunnel": "^0.0.6",
+ "uuid": "^8.3.0",
+ "xml2js": "^0.4.19"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ }
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "@azure/core-lro": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz",
+ "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/core-paging": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz",
+ "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==",
+ "requires": {
+ "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/core-tracing": {
+ "version": "1.0.0-preview.13",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
+ "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
+ "requires": {
+ "@opentelemetry/api": "^1.0.1",
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/logger": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz",
+ "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==",
+ "requires": {
+ "tslib": "^2.2.0"
+ }
+ },
+ "@azure/storage-blob": {
+ "version": "12.8.0",
+ "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz",
+ "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==",
+ "requires": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-http": "^2.0.0",
+ "@azure/core-lro": "^2.2.0",
+ "@azure/core-paging": "^1.1.1",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "events": "^3.0.0",
+ "tslib": "^2.2.0"
+ },
+ "dependencies": {
+ "events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
+ }
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "requires": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "@octokit/core": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz",
+ "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==",
+ "requires": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.0",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "dependencies": {
+ "before-after-hook": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz",
+ "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ=="
+ }
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "requires": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz",
+ "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz",
+ "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==",
+ "requires": {
+ "@octokit/types": "^6.34.0"
+ }
+ },
+ "@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "requires": {}
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.13.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz",
+ "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==",
+ "requires": {
+ "@octokit/types": "^6.34.0",
+ "deprecation": "^2.3.1"
+ }
+ },
+ "@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "requires": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
"@octokit/rest": {
"version": "15.9.5",
"resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-15.9.5.tgz",
@@ -18,11 +3992,66 @@
"url-template": "^2.0.8"
}
},
+ "@octokit/types": {
+ "version": "6.34.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz",
+ "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==",
+ "requires": {
+ "@octokit/openapi-types": "^11.2.0"
+ }
+ },
+ "@opentelemetry/api": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
+ "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ=="
+ },
"@sindresorhus/is": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
"integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow=="
},
+ "@types/node": {
+ "version": "16.11.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz",
+ "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A=="
+ },
+ "@types/node-fetch": {
+ "version": "2.5.12",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
+ "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
+ "requires": {
+ "@types/node": "*",
+ "form-data": "^3.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ }
+ }
+ },
+ "@types/tunnel": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz",
+ "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"agent-base": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
@@ -92,29 +4121,6 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "aws-sdk": {
- "version": "2.292.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.292.0.tgz",
- "integrity": "sha512-1Btm3fPwyy/pILfKaByP1MmwrjHtmos1fSORDcbGdc7PGyA5w0Yo9Jh/eqZSqiXH1asQEX1ZzHfTbt69vl4EGQ==",
- "requires": {
- "buffer": "4.9.1",
- "events": "1.1.1",
- "ieee754": "1.1.8",
- "jmespath": "0.15.0",
- "querystring": "0.2.0",
- "sax": "1.2.1",
- "url": "0.10.3",
- "uuid": "3.1.0",
- "xml2js": "0.4.19"
- },
- "dependencies": {
- "uuid": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
- "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g=="
- }
- }
- },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -585,11 +4591,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
- },
"bcrypt-pbkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
@@ -631,23 +4632,6 @@
"resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
"integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc="
},
- "buffer": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
- "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- }
- }
- },
"buffer-alloc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
@@ -967,6 +4951,11 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
+ "deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
"download": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
@@ -1072,11 +5061,6 @@
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
},
- "events": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
- "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
- },
"expand-home-dir": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz",
@@ -1266,11 +5250,6 @@
"xtend": "~4.0.0"
}
},
- "github": {
- "version": "0.1.16",
- "resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz",
- "integrity": "sha1-iV0qhbD+t5gNiawM5PRNyqA/F7U="
- },
"github-url-to-object": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/github-url-to-object/-/github-url-to-object-1.6.0.tgz",
@@ -1373,9 +5352,9 @@
}
},
"hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="
},
"http-cache-semantics": {
"version": "3.8.1",
@@ -1457,9 +5436,9 @@
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
+ "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
},
"inquirer": {
"version": "0.8.5",
@@ -1554,6 +5533,11 @@
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
"integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
},
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
"is-retry-allowed": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
@@ -1598,11 +5582,6 @@
"is-object": "^1.0.1"
}
},
- "jmespath": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
- "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc="
- },
"js-tokens": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
@@ -1814,9 +5793,12 @@
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
},
"node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
+ "version": "2.6.7",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
+ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
},
"normalize-package-data": {
"version": "2.4.0",
@@ -2005,22 +5987,33 @@
"integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE="
},
"pr-changelog": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.2.tgz",
- "integrity": "sha512-CQayjupdJ4KB6EYzRuW7aXgXpRT0iOMuCn9DROC4ygqXpSgHW+eDzFz3l50icJq25yq1tnrLSBvh55aG+gy+MQ==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/pr-changelog/-/pr-changelog-0.3.4.tgz",
+ "integrity": "sha512-jeRqtyX4vJ5bpiyNjeXq6GN3Y89fQSr6T88UbYPX9c7F2sRv41MLyvz8HvAlal8SCAl/CvbuzwkxLKrXONQB3A==",
"requires": {
+ "@octokit/rest": "^18.12.0",
"babel-plugin-syntax-async-functions": "^6.1.4",
"babel-plugin-transform-regenerator": "^6.1.4",
"babel-polyfill": "^6.1.4",
"babel-preset-es2015": "^6.1.4",
"bluebird": "^3.0.6",
"expand-home-dir": "0.0.3",
- "github": "^0.1.16",
"moment": "^2.10.6",
"parse-link-header": "^0.4.1",
"yargs": "^3.31.0"
},
"dependencies": {
+ "@octokit/rest": {
+ "version": "18.12.0",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz",
+ "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==",
+ "requires": {
+ "@octokit/core": "^3.5.1",
+ "@octokit/plugin-paginate-rest": "^2.16.8",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^5.12.0"
+ }
+ },
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
@@ -2066,6 +6059,11 @@
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
},
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
@@ -2115,6 +6113,11 @@
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
},
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
"publish-release": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/publish-release/-/publish-release-1.6.0.tgz",
@@ -2162,11 +6165,6 @@
"strict-uri-encode": "^1.0.0"
}
},
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
- },
"read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@@ -2480,6 +6478,11 @@
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
"string-editor": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/string-editor/-/string-editor-0.1.2.tgz",
@@ -2498,11 +6501,6 @@
"strip-ansi": "^3.0.0"
}
},
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -2637,6 +6635,11 @@
"punycode": "^1.4.1"
}
},
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+ },
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
@@ -2650,6 +6653,16 @@
"escape-string-regexp": "^1.0.2"
}
},
+ "tslib": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+ "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -2695,21 +6708,15 @@
}
}
},
- "url": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
- "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
- "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="
- }
- }
+ "universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
"url-parse-lax": {
"version": "3.0.0",
@@ -2758,6 +6765,20 @@
"extsprintf": "^1.2.0"
}
},
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"which-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
@@ -2802,9 +6823,9 @@
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
},
"yargs": {
"version": "4.8.1",
diff --git a/script/vsts/package.json b/script/vsts/package.json
index 12f5d1449..463bb1833 100644
--- a/script/vsts/package.json
+++ b/script/vsts/package.json
@@ -2,11 +2,11 @@
"name": "atom-release-scripts",
"description": "Atom release scripts",
"dependencies": {
+ "@azure/storage-blob": "^12.5.0",
"@octokit/rest": "^15.9.5",
- "aws-sdk": "^2.5.2",
"download": "^7.1.0",
"glob": "7.0.3",
- "pr-changelog": "^0.3.2",
+ "pr-changelog": "^0.3.4",
"publish-release": "^1.6.0",
"request": "^2.87.0",
"request-promise-native": "^1.0.5",
diff --git a/script/vsts/platforms/linux.yml b/script/vsts/platforms/linux.yml
index 101dfeb7f..e8c1a2d80 100644
--- a/script/vsts/platforms/linux.yml
+++ b/script/vsts/platforms/linux.yml
@@ -5,7 +5,7 @@ jobs:
variables:
ReleaseVersion: $[ dependencies.GetReleaseVersion.outputs['Version.ReleaseVersion'] ]
pool:
- vmImage: ubuntu-16.04
+ vmImage: ubuntu-18.04
steps:
- template: templates/preparation.yml
diff --git a/script/vsts/platforms/templates/bootstrap.yml b/script/vsts/platforms/templates/bootstrap.yml
index 69373d955..9cd3c12a8 100644
--- a/script/vsts/platforms/templates/bootstrap.yml
+++ b/script/vsts/platforms/templates/bootstrap.yml
@@ -23,4 +23,4 @@ steps:
GITHUB_TOKEN: $(GITHUB_TOKEN)
CI: true
CI_PROVIDER: VSTS
- condition: or(ne(variables['MainNodeModulesRestored'], 'true'), ne(variables['ScriptRunnerNodeModulesRestored'], true), ne(variables['ScriptNodeModulesRestored'], 'true'), ne(variables['ApmNodeModulesRestored'], 'true'))
+ condition: or(ne(variables['MainNodeModulesRestored'], 'true'), ne(variables['ScriptRunnerNodeModulesRestored'], true), ne(variables['ScriptNodeModulesRestored'], 'true'), ne(variables['ApmNodeModulesRestored'], 'true'), ne(variables['LocalPackagesRestored'], 'true'))
diff --git a/script/vsts/platforms/templates/cache.yml b/script/vsts/platforms/templates/cache.yml
index 4a767c395..a45ccfe38 100644
--- a/script/vsts/platforms/templates/cache.yml
+++ b/script/vsts/platforms/templates/cache.yml
@@ -11,7 +11,7 @@ steps:
- task: Cache@2
displayName: Cache node_modules
inputs:
- key: 'npm_main | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
+ key: 'npm_main | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
path: 'node_modules'
cacheHitVar: MainNodeModulesRestored
@@ -25,13 +25,20 @@ steps:
- task: Cache@2
displayName: Cache script/node_modules
inputs:
- key: 'npm_script | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
+ key: 'npm_script | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
path: 'script/node_modules'
cacheHitVar: ScriptNodeModulesRestored
- task: Cache@2
displayName: Cache apm/node_modules
inputs:
- key: 'npm_apm | "$(Agent.OS)" | "$(BUILD_ARCH)" | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
+ key: 'npm_apm | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/script-runner/package.json, script/script-runner/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
path: 'apm/node_modules'
cacheHitVar: ApmNodeModulesRestored
+
+ - task: Cache@2
+ displayName: Cache packages/
+ inputs:
+ key: 'npm_local_packages | "$(Agent.OS)" | "$(BUILD_ARCH)" | packages/**, !packages/**/node_modules/** | package.json, package-lock.json, apm/package.json, script/package.json, script/package-lock.json, script/vsts/platforms/${{ parameters.OS }}.yml, script/vsts/platforms/templates/preparation.yml'
+ path: 'packages'
+ cacheHitVar: LocalPackagesRestored
diff --git a/script/vsts/platforms/templates/preparation.yml b/script/vsts/platforms/templates/preparation.yml
index c036a1ec2..c9e93e81c 100644
--- a/script/vsts/platforms/templates/preparation.yml
+++ b/script/vsts/platforms/templates/preparation.yml
@@ -3,13 +3,8 @@ steps:
# Linux Specific
- script: |
sudo apt-get update
- sudo apt-get install -y wget software-properties-common
- sudo apt-get install -y build-essential ca-certificates xvfb fakeroot git libsecret-1-dev rpm libx11-dev libxkbfile-dev xz-utils xorriso zsync libxss1 libgconf2-4 libgtk-3-0 libasound2 libicu-dev dpkg
+ sudo apt-get install -y build-essential ca-certificates xvfb fakeroot git rpm libsecret-1-dev libx11-dev libxkbfile-dev xz-utils xorriso zsync libxss1 libgtk-3-0 libasound2 libicu-dev software-properties-common wget dpkg
# clang 9 is included in the image
- sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-9 10
- sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 10
- sudo update-alternatives --config clang
- sudo update-alternatives --config clang++
clang -v
displayName: Install apt dependencies
condition: eq(variables['Agent.OS'], 'Linux')
@@ -31,9 +26,9 @@ steps:
- task: NodeTool@0
inputs:
- versionSpec: 12.16.3
+ versionSpec: 12.18.3
force32bit: $(IsWinX86)
- displayName: Install Node.js 12.16.3
+ displayName: Install Node.js 12.18.3
- script: npm install --global npm@6.14.8
displayName: Update npm
@@ -50,3 +45,4 @@ steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
+ condition: eq(variables['Agent.OS'], 'Windows_NT')
diff --git a/script/vsts/platforms/templates/test.yml b/script/vsts/platforms/templates/test.yml
index d358d5116..6588b738e 100644
--- a/script/vsts/platforms/templates/test.yml
+++ b/script/vsts/platforms/templates/test.yml
@@ -67,9 +67,10 @@ steps:
displayName: Upload Crash Reports
- script: >
- node $(Build.SourcesDirectory)\script\vsts\upload-crash-reports.js --crash-report-path "%ARTIFACT_STAGING_DIR%\crash-reports" --s3-path "vsts-artifacts/%BUILD_ID%/"
+ node $(Build.SourcesDirectory)\script\vsts\upload-crash-reports.js --crash-report-path "%ARTIFACT_STAGING_DIR%\crash-reports" --azure-blob-path "vsts-artifacts/%BUILD_ID%/"
env:
ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
+ ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING)
ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
ARTIFACT_STAGING_DIR: $(Build.ArtifactStagingDirectory)
diff --git a/script/vsts/release-branch-build.yml b/script/vsts/release-branch-build.yml
index a538faaed..090aa4ad1 100644
--- a/script/vsts/release-branch-build.yml
+++ b/script/vsts/release-branch-build.yml
@@ -53,19 +53,21 @@ jobs:
env:
GITHUB_TOKEN: $(GITHUB_TOKEN)
ATOM_RELEASE_VERSION: $(ReleaseVersion)
- ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY)
- ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET)
- ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET)
- PACKAGE_CLOUD_API_KEY: $(_PACKAGE_CLOUD_API_KEY)
+ ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
+ ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING)
+ ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
+ ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
+ PACKAGE_CLOUD_API_KEY: $(PACKAGE_CLOUD_API_KEY)
displayName: Create Draft Release
condition: and(succeeded(), eq(variables['Atom.AutoDraftRelease'], 'true'), eq(variables['IsReleaseBranch'], 'true'))
- script: |
- node $(Build.SourcesDirectory)/script/vsts/upload-artifacts.js --assets-path "$(System.ArtifactsDirectory)" --s3-path "vsts-artifacts/$(Build.BuildId)/"
+ node $(Build.SourcesDirectory)/script/vsts/upload-artifacts.js --assets-path "$(System.ArtifactsDirectory)" --azure-blob-path "vsts-artifacts/$(Build.BuildId)/"
env:
ATOM_RELEASE_VERSION: $(ReleaseVersion)
- ATOM_RELEASES_S3_KEY: $(_ATOM_RELEASES_S3_KEY)
- ATOM_RELEASES_S3_SECRET: $(_ATOM_RELEASES_S3_SECRET)
- ATOM_RELEASES_S3_BUCKET: $(_ATOM_RELEASES_S3_BUCKET)
+ ATOM_RELEASES_S3_KEY: $(ATOM_RELEASES_S3_KEY)
+ ATOM_RELEASES_AZURE_CONN_STRING: $(ATOM_RELEASES_AZURE_CONN_STRING)
+ ATOM_RELEASES_S3_SECRET: $(ATOM_RELEASES_S3_SECRET)
+ ATOM_RELEASES_S3_BUCKET: $(ATOM_RELEASES_S3_BUCKET)
displayName: Upload CI Artifacts to S3
condition: and(succeeded(), eq(variables['IsSignedZipBranch'], 'true'))
diff --git a/script/vsts/upload-artifacts.js b/script/vsts/upload-artifacts.js
index 7ded8bcb8..48d332f3a 100644
--- a/script/vsts/upload-artifacts.js
+++ b/script/vsts/upload-artifacts.js
@@ -7,7 +7,7 @@ const glob = require('glob');
const spawnSync = require('../lib/spawn-sync');
const publishRelease = require('publish-release');
const releaseNotes = require('./lib/release-notes');
-const uploadToS3 = require('./lib/upload-to-s3');
+const uploadToAzure = require('./lib/upload-to-azure-blob');
const uploadLinuxPackages = require('./lib/upload-linux-packages');
const CONFIG = require('../config');
@@ -22,8 +22,8 @@ const argv = yargs
'Path to the folder where all release assets are stored'
)
.describe(
- 's3-path',
- 'Indicates the S3 path in which the assets should be uploaded'
+ 'azure-blob-path',
+ 'Indicates the Azure Blob Path path in which the assets should be uploaded'
)
.describe(
'create-github-release',
@@ -41,7 +41,7 @@ const assetsPath = argv.assetsPath || CONFIG.buildOutputPath;
const assetsPattern =
'/**/*(*.exe|*.zip|*.nupkg|*.tar.gz|*.rpm|*.deb|RELEASES*|atom-api.json)';
const assets = glob.sync(assetsPattern, { root: assetsPath, nodir: true });
-const bucketPath = argv.s3Path || `releases/v${releaseVersion}/`;
+const azureBlobPath = argv.azureBlobPath || `releases/v${releaseVersion}/`;
if (!assets || assets.length === 0) {
console.error(`No assets found under specified path: ${assetsPath}`);
@@ -69,14 +69,12 @@ async function uploadArtifacts() {
console.log(
`Uploading ${
assets.length
- } release assets for ${releaseVersion} to S3 under '${bucketPath}'`
+ } release assets for ${releaseVersion} to Azure Blob Storage under '${azureBlobPath}'`
);
- await uploadToS3(
- process.env.ATOM_RELEASES_S3_KEY,
- process.env.ATOM_RELEASES_S3_SECRET,
- process.env.ATOM_RELEASES_S3_BUCKET,
- bucketPath,
+ await uploadToAzure(
+ process.env.ATOM_RELEASES_AZURE_CONN_STRING,
+ azureBlobPath,
assets
);
} else {
diff --git a/script/vsts/upload-crash-reports.js b/script/vsts/upload-crash-reports.js
index 81572dc57..a44103cf4 100644
--- a/script/vsts/upload-crash-reports.js
+++ b/script/vsts/upload-crash-reports.js
@@ -1,7 +1,7 @@
'use strict';
const glob = require('glob');
-const uploadToS3 = require('./lib/upload-to-s3');
+const uploadToAzure = require('./lib/upload-to-azure-blob');
const yargs = require('yargs');
const argv = yargs
@@ -12,28 +12,26 @@ const argv = yargs
'The local path of a directory containing crash reports to upload'
)
.describe(
- 's3-path',
- 'Indicates the S3 path in which the crash reports should be uploaded'
+ 'azure-blob-path',
+ 'Indicates the azure blob storage path in which the crash reports should be uploaded'
)
.wrap(yargs.terminalWidth()).argv;
async function uploadCrashReports() {
const crashesPath = argv.crashReportPath;
const crashes = glob.sync('/*.dmp', { root: crashesPath });
- const bucketPath = argv.s3Path;
+ const azureBlobPath = argv.azureBlobPath;
if (crashes && crashes.length > 0) {
console.log(
`Uploading ${
crashes.length
- } private crash reports to S3 under '${bucketPath}'`
+ } private crash reports to Azure Blob Storage under '${azureBlobPath}'`
);
- await uploadToS3(
- process.env.ATOM_RELEASES_S3_KEY,
- process.env.ATOM_RELEASES_S3_SECRET,
- process.env.ATOM_RELEASES_S3_BUCKET,
- bucketPath,
+ await uploadToAzure(
+ process.env.ATOM_RELEASES_AZURE_CONN_STRING,
+ azureBlobPath,
crashes,
'private'
);
diff --git a/spec/async-spec-helpers.js b/spec/async-spec-helpers.js
index 033b4b98f..db01d52bd 100644
--- a/spec/async-spec-helpers.js
+++ b/spec/async-spec-helpers.js
@@ -7,7 +7,12 @@ async function conditionPromise(
while (true) {
await timeoutPromise(100);
- if (await condition()) {
+ // if condition is sync
+ if (condition.constructor.name !== 'AsyncFunction' && condition()) {
+ return;
+ }
+ // if condition is async
+ else if (await condition()) {
return;
}
diff --git a/spec/atom-paths-spec.js b/spec/atom-paths-spec.js
index de95dc706..72ad341f4 100644
--- a/spec/atom-paths-spec.js
+++ b/spec/atom-paths-spec.js
@@ -1,9 +1,10 @@
/** @babel */
-import { app } from 'remote';
+import { remote } from 'electron';
import atomPaths from '../src/atom-paths';
import fs from 'fs-plus';
import path from 'path';
+const app = remote.app;
const temp = require('temp').track();
describe('AtomPaths', () => {
diff --git a/spec/atom-reporter.coffee b/spec/atom-reporter.coffee
index 9af21a7dd..4fe9cb21a 100644
--- a/spec/atom-reporter.coffee
+++ b/spec/atom-reporter.coffee
@@ -2,7 +2,6 @@ path = require 'path'
process = require 'process'
_ = require 'underscore-plus'
grim = require 'grim'
-marked = require 'marked'
listen = require '../src/delegated-listener'
ipcHelpers = require '../src/ipc-helpers'
diff --git a/spec/clipboard-spec.js b/spec/clipboard-spec.js
index 58809ccc0..7e30f10d7 100644
--- a/spec/clipboard-spec.js
+++ b/spec/clipboard-spec.js
@@ -1,12 +1,12 @@
-describe('Clipboard', () =>
- describe('write(text, metadata) and read()', function() {
- it('writes and reads text to/from the native clipboard', function() {
+describe('Clipboard', () => {
+ describe('write(text, metadata) and read()', () => {
+ it('writes and reads text to/from the native clipboard', () => {
expect(atom.clipboard.read()).toBe('initial clipboard content');
atom.clipboard.write('next');
expect(atom.clipboard.read()).toBe('next');
});
- return it('returns metadata if the item on the native clipboard matches the last written item', function() {
+ it('returns metadata if the item on the native clipboard matches the last written item', () => {
atom.clipboard.write('next', { meta: 'data' });
expect(atom.clipboard.read()).toBe('next');
expect(atom.clipboard.readWithMetadata().text).toBe('next');
@@ -14,4 +14,28 @@ describe('Clipboard', () =>
meta: 'data'
});
});
- }));
+ });
+
+ describe('line endings', () => {
+ let originalPlatform = process.platform;
+
+ const eols = new Map([
+ ['win32', '\r\n'],
+ ['darwin', '\n'],
+ ['linux', '\n']
+ ]);
+ for (let [platform, eol] of eols) {
+ it(`converts line endings to the OS's native line endings on ${platform}`, () => {
+ Object.defineProperty(process, 'platform', { value: platform });
+
+ atom.clipboard.write('next\ndone\r\n\n', { meta: 'data' });
+ expect(atom.clipboard.readWithMetadata()).toEqual({
+ text: `next${eol}done${eol}${eol}`,
+ metadata: { meta: 'data' }
+ });
+
+ Object.defineProperty(process, 'platform', { value: originalPlatform });
+ });
+ }
+ });
+});
diff --git a/spec/context-menu-manager-spec.js b/spec/context-menu-manager-spec.js
index 8975aec05..e0246ee01 100644
--- a/spec/context-menu-manager-spec.js
+++ b/spec/context-menu-manager-spec.js
@@ -37,9 +37,9 @@ describe('ContextMenuManager', function() {
});
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'C', command: 'c' },
- { label: 'B', command: 'b' },
- { label: 'A', command: 'a' }
+ { label: 'C', id: 'C', command: 'c' },
+ { label: 'B', id: 'B', command: 'b' },
+ { label: 'A', id: 'A', command: 'a' }
]);
disposable.dispose();
@@ -57,7 +57,11 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForElement(grandchild)).toEqual([
{
label: 'A',
- submenu: [{ label: 'B', command: 'b' }, { label: 'C', command: 'c' }]
+ id: 'A',
+ submenu: [
+ { label: 'B', id: 'B', command: 'b' },
+ { label: 'C', id: 'C', command: 'c' }
+ ]
}
]);
@@ -65,7 +69,8 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForElement(grandchild)).toEqual([
{
label: 'A',
- submenu: [{ label: 'B', command: 'b' }]
+ id: 'A',
+ submenu: [{ label: 'B', id: 'B', command: 'b' }]
}
]);
@@ -91,22 +96,22 @@ describe('ContextMenuManager', function() {
});
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'b' }
+ { label: 'A', id: 'A', command: 'b' }
]);
disposable2.dispose();
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'c' }
+ { label: 'A', id: 'A', command: 'c' }
]);
disposable3.dispose();
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'a' }
+ { label: 'A', id: 'A', command: 'a' }
]);
disposable1.dispose();
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'd' }
+ { label: 'A', id: 'A', command: 'd' }
]);
});
@@ -124,11 +129,11 @@ describe('ContextMenuManager', function() {
});
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'a' },
+ { label: 'A', id: 'A', command: 'a' },
{ type: 'separator' },
- { label: 'B', command: 'b' },
+ { label: 'B', id: 'B', command: 'b' },
{ type: 'separator' },
- { label: 'C', command: 'c' }
+ { label: 'C', id: 'C', command: 'c' }
]);
});
@@ -141,13 +146,13 @@ describe('ContextMenuManager', function() {
});
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'B', command: 'b' }
+ { label: 'B', id: 'B', command: 'b' }
]);
contextMenu.devMode = true;
expect(contextMenu.templateForElement(grandchild)).toEqual([
- { label: 'A', command: 'a' },
- { label: 'B', command: 'b' }
+ { label: 'A', id: 'A', command: 'a' },
+ { label: 'B', id: 'B', command: 'b' }
]);
});
@@ -167,7 +172,7 @@ describe('ContextMenuManager', function() {
const dispatchedEvent = { target: grandchild };
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
- { label: 'A', command: 'b' }
+ { label: 'A', id: 'A', command: 'b' }
]);
expect(item.command).toBe('a'); // doesn't modify original item template
expect(createdEvent).toBe(dispatchedEvent);
@@ -190,7 +195,7 @@ describe('ContextMenuManager', function() {
const dispatchedEvent = { target: grandchild };
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
- { label: 'A', command: 'a' }
+ { label: 'A', id: 'A', command: 'a' }
]);
expect(item.foo).toBeUndefined(); // doesn't modify original item template
expect(shouldDisplayEvent).toBe(dispatchedEvent);
@@ -293,10 +298,12 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'A',
+ id: 'A',
command: 'B',
submenu: [
{
- label: 'D'
+ label: 'D',
+ id: 'D'
}
]
}
@@ -335,11 +342,13 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
accelerator: 'Ctrl+A',
submenu: [
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command',
accelerator: 'Shift+B'
}
@@ -354,11 +363,13 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
accelerator: 'Ctrl+A',
submenu: [
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command',
accelerator: 'Shift+B'
}
@@ -373,10 +384,12 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
submenu: [
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command'
}
]
@@ -390,11 +403,13 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
accelerator: 'Ctrl+A',
submenu: [
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command',
accelerator: 'Shift+B'
}
@@ -425,6 +440,7 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent({ target: child })).toEqual([
{
label: `Multi-keystroke command [${label}]`,
+ id: `Multi-keystroke command`,
command: 'test:multi-keystroke-command'
}
]);
@@ -450,10 +466,12 @@ describe('ContextMenuManager', function() {
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command'
},
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
after: ['test:my-other-command']
}
@@ -464,6 +482,7 @@ describe('ContextMenuManager', function() {
contextMenu.add({
'.parent': [
{
+ label: 'Parent',
submenu: [
{
label: 'My Command',
@@ -481,13 +500,17 @@ describe('ContextMenuManager', function() {
const dispatchedEvent = { target: parent };
expect(contextMenu.templateForEvent(dispatchedEvent)).toEqual([
{
+ label: 'Parent',
+ id: `Parent`,
submenu: [
{
label: 'My Other Command',
+ id: 'My Other Command',
command: 'test:my-other-command'
},
{
label: 'My Command',
+ id: 'My Command',
command: 'test:my-command',
after: ['test:my-other-command']
}
diff --git a/spec/fixtures/indentation/classes.js b/spec/fixtures/indentation/classes.js
new file mode 100644
index 000000000..6179553e4
--- /dev/null
+++ b/spec/fixtures/indentation/classes.js
@@ -0,0 +1,16 @@
+class MyClass extends OtherComponent {
+
+ state = {
+ test: 1
+ }
+
+ constructor() {
+ test();
+ }
+
+ otherfunction = (a, b = {
+ default: false
+ }) => {
+ more();
+ }
+}
diff --git a/spec/fixtures/indentation/expressions.js b/spec/fixtures/indentation/expressions.js
new file mode 100644
index 000000000..5b0d73b8d
--- /dev/null
+++ b/spec/fixtures/indentation/expressions.js
@@ -0,0 +1,43 @@
+/* multi-line expressions */
+req
+ .shouldBeOne();
+too.
+ more.
+ shouldBeOneToo;
+
+const a =
+ long_expression;
+
+b =
+ long;
+
+b =
+ 3 + 5;
+
+b =
+ 3
+ + 5;
+
+b =
+ 3
+ + 5
+ + 7
+ + 8
+ * 8
+ * 9
+ / 17
+ * 8
+ / 20
+ - 34
+ + 3 *
+ 9
+ - 8;
+
+ifthis
+ && thendo()
+ || otherwise
+ && dothis
+
+/**
+ A comment, should be at 1
+*/
diff --git a/spec/fixtures/indentation/function_call.js b/spec/fixtures/indentation/function_call.js
new file mode 100644
index 000000000..3295e2b86
--- /dev/null
+++ b/spec/fixtures/indentation/function_call.js
@@ -0,0 +1,35 @@
+foo({
+ sd,
+ sdf
+ },
+ 4
+);
+
+foo( 2, {
+ sd,
+ sdf
+ },
+ 4
+);
+
+foo( 2,
+ {
+ sd,
+ sdf
+ });
+
+foo( 2, {
+ sd,
+ sdf
+});
+
+foo(2,
+ 4);
+
+foo({
+ symetric_opening_and_closing_scopes: 'indent me at 1'
+});
+
+foo(myWrapper(mysecondWrapper({
+ a: 1 // should be at 1
+})));
diff --git a/spec/fixtures/indentation/if_then_else.js b/spec/fixtures/indentation/if_then_else.js
new file mode 100644
index 000000000..3abbce912
--- /dev/null
+++ b/spec/fixtures/indentation/if_then_else.js
@@ -0,0 +1,59 @@
+
+/** if-then-else loops */
+if (true)
+ foo();
+else
+ bar();
+
+if (true) {
+ foo();
+ bar();
+} else {
+ foo();
+}
+
+// https://github.com/atom/atom/issues/6691
+if (true)
+{
+ foo();
+ bar();
+}
+else
+{
+ foo();
+}
+
+if (true) {
+ if (yes)
+ doit(); // 2
+ bar();
+} else if (more()) {
+ foo(); // 1
+}
+
+if (true)
+ foo();
+else
+ if (more()) { // 1
+ foo(); // 1
+}
+
+if (true)
+ foo();
+else
+ if (more()) // 1
+ foo(); // 2
+
+if (we
+ ()) {
+ go();
+}
+
+if (true) {
+ foo();
+ bar();
+} else if (false) {
+ more();
+} else {
+ foo();
+}
diff --git a/spec/fixtures/indentation/jsx.jsx b/spec/fixtures/indentation/jsx.jsx
new file mode 100644
index 000000000..dd74d659b
--- /dev/null
+++ b/spec/fixtures/indentation/jsx.jsx
@@ -0,0 +1,47 @@
+/** JSX */
+const jsx = (
+
+ good
+
+ link
+
+
+ sdfg
+
+
+ sdf
+
+
+);
+
+const two = (
+
+
+ test
+
+
+ test
+
+
+);
+
+const a = (
+
+);
+
+const b = (
+
+);
+
+const two = (
+
+ {
+ test && 'test'
+ }
+
+);
diff --git a/spec/fixtures/indentation/objects_and_array.js b/spec/fixtures/indentation/objects_and_array.js
new file mode 100644
index 000000000..b77ce94d4
--- /dev/null
+++ b/spec/fixtures/indentation/objects_and_array.js
@@ -0,0 +1,39 @@
+var x = [
+ 3,
+ 4
+];
+
+const y = [
+ 1
+];
+
+const j = [{
+ a: 1
+}];
+
+let h = {
+ a: [ 1,
+ 2 ],
+ b: { j: [
+ { l: 1 }]
+ },
+ c:
+ { j: [
+ { l: 1 }]
+ },
+};
+
+const a =
+ {
+ b: 1
+ };
+
+const x = {
+ g: {
+ a: 1,
+ b: 2
+ },
+ h: {
+ c: 3
+ }
+}
diff --git a/spec/fixtures/indentation/switch.js b/spec/fixtures/indentation/switch.js
new file mode 100644
index 000000000..2afe0842f
--- /dev/null
+++ b/spec/fixtures/indentation/switch.js
@@ -0,0 +1,11 @@
+
+switch (e) {
+ case 5:
+ something();
+ more();
+ case 6:
+ somethingElse();
+ case 7:
+ default:
+ done();
+}
diff --git a/spec/fixtures/indentation/while.js b/spec/fixtures/indentation/while.js
new file mode 100644
index 000000000..948998d1b
--- /dev/null
+++ b/spec/fixtures/indentation/while.js
@@ -0,0 +1,36 @@
+/** While loops */
+while (condition)
+ inLoop();
+
+while (condition)
+ inLoop();
+after();
+
+while (mycondition) {
+ sdfsdfg();
+}
+
+while (mycondition)
+{
+ sdfsdfg();
+}
+
+while (mycond)
+ if (more)
+ doit;
+after();
+
+while (mycond) if (more)
+ doit;
+after();
+
+while (mycondition) {
+ sdfsdfg();
+ if (test) {
+ more()
+ }}
+
+while (mycondition)
+ if (test) {
+ more()
+}
diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js
new file mode 100644
index 000000000..3b6530bc1
--- /dev/null
+++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/main.js
@@ -0,0 +1,6 @@
+const condition = false;
+
+if (condition) {
+ const { native } = require("./node_modules/native-module");
+ native(condition);
+}
diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/build/Release/native.node
new file mode 100644
index 000000000..e69de29bb
diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js
new file mode 100644
index 000000000..bde22006e
--- /dev/null
+++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/main.js
@@ -0,0 +1,7 @@
+exports.native = function loadNative(condition) {
+ if (condition) {
+ return require('../build/Release/native.node');
+ } else {
+ return null;
+ }
+}
diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json
new file mode 100644
index 000000000..cac262cba
--- /dev/null
+++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/native-module/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "native-module",
+ "main": "./main.js"
+}
diff --git a/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json
new file mode 100644
index 000000000..857bc7221
--- /dev/null
+++ b/spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "package-with-incompatible-native-module",
+ "version": "1.0.0",
+ "main": "./main.js"
+}
diff --git a/spec/integration/helpers/start-atom.js b/spec/integration/helpers/start-atom.js
index 91154cd8e..2c6caa19b 100644
--- a/spec/integration/helpers/start-atom.js
+++ b/spec/integration/helpers/start-atom.js
@@ -1,7 +1,7 @@
const path = require('path');
const http = require('http');
const temp = require('temp').track();
-const remote = require('remote');
+const { remote } = require('electron');
const { once } = require('underscore-plus');
const { spawn } = require('child_process');
const webdriverio = require('../../../script/node_modules/webdriverio');
@@ -53,16 +53,6 @@ const chromeDriverDown = done => {
};
const buildAtomClient = async (args, env) => {
- // Since ChromeDriver v2.41, ChromeDriver will only connect if, either we precise a port
- // for remote debugging, either the embedder (ie electron) made sure to pass `USER_DATA_DIR`
- // to the remote debugging server.
- // So, for now, we'll just use a random port (we don't care about its value since we're not
- // connecting through it).
- // (inspired by https://github.com/electron/spectron/pull/361/commits/737db138bd8a6daaf80f9c2bff710ce4a5fff39b).
- // TodoElectronIssue: Remove the whole remote-debugging-port param once we upgrade
- // to Electron v5, since this was fixes there (see electron/electron#17800).
- const randomPort = Math.floor(Math.random() * (9999 - 9000) + 9000);
-
const userDataDir = temp.mkdirSync('atom-user-data-dir');
const client = await webdriverio.remote({
host: 'localhost',
@@ -79,8 +69,7 @@ const buildAtomClient = async (args, env) => {
.join(' ')}`,
'dev',
'safe',
- `user-data-dir=${userDataDir}`,
- `remote-debugging-port=${randomPort}`
+ `user-data-dir=${userDataDir}`
]
}
}
diff --git a/spec/main-process/atom-application.test.js b/spec/main-process/atom-application.test.js
index 179d486a3..6601740d5 100644
--- a/spec/main-process/atom-application.test.js
+++ b/spec/main-process/atom-application.test.js
@@ -724,7 +724,7 @@ describe('AtomApplication', function() {
});
it('opens a file to a specific line number and column', async function() {
- await scenario.open(parseCommandLine('b/2.md:12:5'));
+ await scenario.open(parseCommandLine(['b/2.md:12:5']));
await scenario.assert('[_ 2.md]');
const w = scenario.getWindow(0);
@@ -750,7 +750,7 @@ describe('AtomApplication', function() {
});
it('truncates trailing whitespace and colons', async function() {
- await scenario.open(parseCommandLine('b/2.md:: '));
+ await scenario.open(parseCommandLine(['b/2.md:: ']));
await scenario.assert('[_ 2.md]');
const w = scenario.getWindow(0);
@@ -796,6 +796,7 @@ describe('AtomApplication', function() {
app = scenario.getApplication(0);
app.removeWindow(w);
sinon.stub(app, 'promptForPathToOpen');
+ global.atom = { workspace: { getActiveTextEditor() {} } };
});
it('opens a new file', function() {
diff --git a/spec/main-process/parse-command-line.test.js b/spec/main-process/parse-command-line.test.js
index e41feacf1..d46b80bc7 100644
--- a/spec/main-process/parse-command-line.test.js
+++ b/spec/main-process/parse-command-line.test.js
@@ -21,6 +21,65 @@ describe('parseCommandLine', () => {
]);
assert.deepEqual(args.pathsToOpen, ['/some/path']);
});
+
+ // The "underscore flag" with no "non-flag argument" after it
+ // is the minimal reproducer for the macOS Gatekeeper startup bug.
+ // By default, it causes the addition of boolean "true"s into yargs' "non-flag argument" array: `argv._`
+ // Whereas we do string-only operations on these arguments, expecting them to be paths or URIs.
+ describe('and --_ or -_ are passed', () => {
+ it('does not attempt to parse booleans as paths or URIs', () => {
+ const args = parseCommandLine([
+ '--_',
+ '/some/path',
+ '-_',
+ '-_',
+ 'some/other/path',
+ 'atom://test/url',
+ '--_',
+ 'atom://other/url',
+ '-_',
+ './another-path.file',
+ '-_',
+ '-_',
+ '-_'
+ ]);
+ assert.deepEqual(args.urlsToOpen, [
+ 'atom://test/url',
+ 'atom://other/url'
+ ]);
+ assert.deepEqual(args.pathsToOpen, [
+ '/some/path',
+ 'some/other/path',
+ './another-path.file'
+ ]);
+ });
+ });
+
+ describe('and a non-flag number is passed as an argument', () => {
+ it('does not attempt to parse numbers as paths or URIs', () => {
+ const args = parseCommandLine([
+ '43',
+ '/some/path',
+ '22',
+ '97',
+ 'some/other/path',
+ 'atom://test/url',
+ '885',
+ 'atom://other/url',
+ '42',
+ './another-path.file'
+ ]);
+ assert.deepEqual(args.urlsToOpen, [
+ 'atom://test/url',
+ 'atom://other/url'
+ ]);
+ assert.deepEqual(args.pathsToOpen, [
+ '/some/path',
+ 'some/other/path',
+ './another-path.file'
+ ]);
+ });
+ });
});
describe('when --uri-handler is passed', () => {
@@ -41,4 +100,33 @@ describe('parseCommandLine', () => {
assert.deepEqual(args.pathsToOpen, []);
});
});
+
+ describe('when evil macOS Gatekeeper flag "-psn_0_[six or seven digits here]" is passed', () => {
+ it('ignores any arguments starting with "-psn_"', () => {
+ const getPsnFlag = () => {
+ return `-psn_0_${Math.floor(Math.random() * 10_000_000)}`;
+ };
+ const args = parseCommandLine([
+ getPsnFlag(),
+ '/some/path',
+ getPsnFlag(),
+ getPsnFlag(),
+ 'some/other/path',
+ 'atom://test/url',
+ getPsnFlag(),
+ 'atom://other/url',
+ '-psn_ Any argument starting with "-psn_" should be ignored, even this one.',
+ './another-path.file'
+ ]);
+ assert.deepEqual(args.urlsToOpen, [
+ 'atom://test/url',
+ 'atom://other/url'
+ ]);
+ assert.deepEqual(args.pathsToOpen, [
+ '/some/path',
+ 'some/other/path',
+ './another-path.file'
+ ]);
+ });
+ });
});
diff --git a/spec/menu-manager-spec.js b/spec/menu-manager-spec.js
index 730943a43..3b78e42b6 100644
--- a/spec/menu-manager-spec.js
+++ b/spec/menu-manager-spec.js
@@ -19,7 +19,11 @@ describe('MenuManager', function() {
{ label: 'A', submenu: [{ label: 'B', command: 'b' }] }
]);
expect(menu.template).toEqual([
- { label: 'A', submenu: [{ label: 'B', command: 'b' }] }
+ {
+ label: 'A',
+ id: 'A',
+ submenu: [{ label: 'B', id: 'B', command: 'b' }]
+ }
]);
disposable.dispose();
expect(menu.template).toEqual([]);
@@ -45,13 +49,15 @@ describe('MenuManager', function() {
expect(menu.template).toEqual([
{
label: 'A',
+ id: 'A',
submenu: [
- { label: 'B', command: 'b' },
+ { label: 'B', id: 'B', command: 'b' },
{
label: 'C',
+ id: 'C',
submenu: [
- { label: 'D', command: 'd' },
- { label: 'E', command: 'e' }
+ { label: 'D', id: 'D', command: 'd' },
+ { label: 'E', id: 'E', command: 'e' }
]
}
]
@@ -62,16 +68,25 @@ describe('MenuManager', function() {
expect(menu.template).toEqual([
{
label: 'A',
+ id: 'A',
submenu: [
- { label: 'B', command: 'b' },
- { label: 'C', submenu: [{ label: 'D', command: 'd' }] }
+ { label: 'B', id: 'B', command: 'b' },
+ {
+ label: 'C',
+ id: 'C',
+ submenu: [{ label: 'D', id: 'D', command: 'd' }]
+ }
]
}
]);
disposable2.dispose();
expect(menu.template).toEqual([
- { label: 'A', submenu: [{ label: 'B', command: 'b' }] }
+ {
+ label: 'A',
+ id: 'A',
+ submenu: [{ label: 'B', id: 'B', command: 'b' }]
+ }
]);
disposable1.dispose();
@@ -84,7 +99,8 @@ describe('MenuManager', function() {
menu.add([{ label: 'A', submenu: [{ label: 'B', command: 'b' }] }]);
expect(menu.template[originalItemCount]).toEqual({
label: 'A',
- submenu: [{ label: 'B', command: 'b' }]
+ id: 'A',
+ submenu: [{ label: 'B', id: 'B', command: 'b' }]
});
});
});
diff --git a/spec/menu-sort-helpers-spec.js b/spec/menu-sort-helpers-spec.js
index 2ac0b23d0..1299f8a6b 100644
--- a/spec/menu-sort-helpers-spec.js
+++ b/spec/menu-sort-helpers-spec.js
@@ -15,7 +15,7 @@ describe('contextMenu', () => {
expect(sortMenuItems(items)).toEqual(expected);
});
- it('preserves separators at the begining of set two', () => {
+ it('preserves separators at the beginning of set two', () => {
const items = [
{ command: 'core:one' },
{ type: 'separator' },
diff --git a/spec/package-spec.js b/spec/package-spec.js
index 59025efaa..a31c2141c 100644
--- a/spec/package-spec.js
+++ b/spec/package-spec.js
@@ -45,6 +45,20 @@ describe('Package', function() {
);
});
+ it('detects the package as incompatible even if .node file is loaded conditionally', function() {
+ const packagePath = atom.project
+ .getDirectories()[0]
+ .resolve(
+ 'packages/package-with-incompatible-native-module-loaded-conditionally'
+ );
+ const pack = buildPackage(packagePath);
+ expect(pack.isCompatible()).toBe(false);
+ expect(pack.incompatibleModules[0].name).toBe('native-module');
+ expect(pack.incompatibleModules[0].path).toBe(
+ path.join(packagePath, 'node_modules', 'native-module')
+ );
+ });
+
it("utilizes _atomModuleCache if present to determine the package's native dependencies", function() {
let packagePath = atom.project
.getDirectories()[0]
diff --git a/spec/pane-container-element-spec.js b/spec/pane-container-element-spec.js
index b50e0c6c1..b4e5f78b7 100644
--- a/spec/pane-container-element-spec.js
+++ b/spec/pane-container-element-spec.js
@@ -42,14 +42,14 @@ describe('PaneContainerElement', function() {
]);
paneAxis.removeChild(paneAxis.getChildren()[2]);
- return expect(childTagNames()).toEqual([
+ expect(childTagNames()).toEqual([
'atom-pane-axis',
'atom-pane-resize-handle',
'atom-pane-axis'
]);
});
- return it('transfers focus to the next pane if a focused pane is removed', function() {
+ it('transfers focus to the next pane if a focused pane is removed', function() {
const container = new PaneContainer(params);
const containerElement = container.getElement();
const leftPane = container.getActivePane();
@@ -62,7 +62,8 @@ describe('PaneContainerElement', function() {
expect(document.activeElement).toBe(rightPaneElement);
rightPane.destroy();
- return expect(document.activeElement).toBe(leftPaneElement);
+ expect(containerElement).toHaveClass('panes');
+ expect(document.activeElement).toBe(leftPaneElement);
});
});
@@ -94,7 +95,7 @@ describe('PaneContainerElement', function() {
);
expect(verticalPanes.length).toBe(2);
expect(verticalPanes[0]).toBe(pane2.getElement());
- return expect(verticalPanes[1]).toBe(pane3.getElement());
+ expect(verticalPanes[1]).toBe(pane3.getElement());
}));
describe('when the resize element is dragged ', function() {
@@ -103,9 +104,7 @@ describe('PaneContainerElement', function() {
beforeEach(function() {
container = new PaneContainer(params);
containerElement = container.getElement();
- return document
- .querySelector('#jasmine-content')
- .appendChild(containerElement);
+ document.querySelector('#jasmine-content').appendChild(containerElement);
});
const dragElementToPosition = function(element, clientX) {
@@ -125,7 +124,7 @@ describe('PaneContainerElement', function() {
})
);
- return element.dispatchEvent(
+ element.dispatchEvent(
new MouseEvent('mouseup', {
iew: window,
bubbles: true,
@@ -180,7 +179,7 @@ describe('PaneContainerElement', function() {
runs(() => expectPaneScale([leftPane, 0.44], [rightPane, 1.55]));
waitsForPromise(() => leftPane.close());
- return runs(() => expectPaneScale([rightPane, 1]));
+ runs(() => expectPaneScale([rightPane, 1]));
});
it('splits or closes panes in orthogonal direction that the pane is being dragged', function() {
@@ -206,7 +205,7 @@ describe('PaneContainerElement', function() {
// dynamically close pane, the pane's flexscale will recover to origin value
waitsForPromise(() => lowerPane.close());
- return runs(() => expectPaneScale([leftPane, 0.5], [rightPane, 1.5]));
+ runs(() => expectPaneScale([leftPane, 0.5], [rightPane, 1.5]));
});
it('unsubscribes from mouse events when the pane is detached', function() {
@@ -226,19 +225,19 @@ describe('PaneContainerElement', function() {
waitsFor(() => document.addEventListener.callCount === 2);
- return runs(function() {
+ runs(function() {
expect(element.resizeStopped.callCount).toBe(0);
container.destroy();
expect(element.resizeStopped.callCount).toBe(1);
- return expect(document.removeEventListener.callCount).toBe(2);
+ expect(document.removeEventListener.callCount).toBe(2);
});
});
- return it('does not throw an error when resized to fit content in a detached state', function() {
+ it('does not throw an error when resized to fit content in a detached state', function() {
container.getActivePane().splitRight();
const element = getResizeElement(0);
element.remove();
- return expect(() => element.resizeToFitContent()).not.toThrow();
+ expect(() => element.resizeToFitContent()).not.toThrow();
});
});
@@ -248,7 +247,7 @@ describe('PaneContainerElement', function() {
beforeEach(function() {
const container = new PaneContainer(params);
leftPane = container.getActivePane();
- return (rightPane = leftPane.splitRight());
+ rightPane = leftPane.splitRight();
});
describe('when pane:increase-size is triggered', () =>
@@ -262,10 +261,10 @@ describe('PaneContainerElement', function() {
atom.commands.dispatch(rightPane.getElement(), 'pane:increase-size');
expect(leftPane.getFlexScale()).toBe(1.1);
- return expect(rightPane.getFlexScale()).toBe(1.1);
+ expect(rightPane.getFlexScale()).toBe(1.1);
}));
- return describe('when pane:decrease-size is triggered', () =>
+ describe('when pane:decrease-size is triggered', () =>
it('decreases the size of the pane', function() {
expect(leftPane.getFlexScale()).toBe(1);
expect(rightPane.getFlexScale()).toBe(1);
@@ -276,16 +275,16 @@ describe('PaneContainerElement', function() {
atom.commands.dispatch(rightPane.getElement(), 'pane:decrease-size');
expect(leftPane.getFlexScale()).toBe(1 / 1.1);
- return expect(rightPane.getFlexScale()).toBe(1 / 1.1);
+ expect(rightPane.getFlexScale()).toBe(1 / 1.1);
}));
});
- return describe('when only a single pane is present', function() {
+ describe('when only a single pane is present', function() {
let [singlePane] = [];
beforeEach(function() {
const container = new PaneContainer(params);
- return (singlePane = container.getActivePane());
+ singlePane = container.getActivePane();
});
describe('when pane:increase-size is triggered', () =>
@@ -296,10 +295,10 @@ describe('PaneContainerElement', function() {
expect(singlePane.getFlexScale()).toBe(1);
atom.commands.dispatch(singlePane.getElement(), 'pane:increase-size');
- return expect(singlePane.getFlexScale()).toBe(1);
+ expect(singlePane.getFlexScale()).toBe(1);
}));
- return describe('when pane:decrease-size is triggered', () =>
+ describe('when pane:decrease-size is triggered', () =>
it('does not decreases the size of the pane', function() {
expect(singlePane.getFlexScale()).toBe(1);
@@ -307,7 +306,7 @@ describe('PaneContainerElement', function() {
expect(singlePane.getFlexScale()).toBe(1);
atom.commands.dispatch(singlePane.getElement(), 'pane:decrease-size');
- return expect(singlePane.getFlexScale()).toBe(1);
+ expect(singlePane.getFlexScale()).toBe(1);
}));
});
});
diff --git a/spec/pane-container-spec.js b/spec/pane-container-spec.js
index a21c3fd9c..d96f759b1 100644
--- a/spec/pane-container-spec.js
+++ b/spec/pane-container-spec.js
@@ -391,7 +391,7 @@ describe('PaneContainer', () => {
});
});
- describe('::onWillDestroyPaneItem() and ::onDidDestroyPaneItem', () => {
+ describe('::onWillDestroyPaneItem() and ::onDidDestroyPaneItem()', () => {
it('invokes the given callbacks when an item will be destroyed on any pane', async () => {
const container = new PaneContainer(params);
const pane1 = container.getRoot();
@@ -409,14 +409,37 @@ describe('PaneContainer', () => {
await pane2.destroyItem(item3);
await pane2.destroyItem(item2);
- expect(events).toEqual([
- ['will', { item: item1, pane: pane1, index: 0 }],
- ['did', { item: item1, pane: pane1, index: 0 }],
- ['will', { item: item3, pane: pane2, index: 1 }],
- ['did', { item: item3, pane: pane2, index: 1 }],
- ['will', { item: item2, pane: pane2, index: 0 }],
- ['did', { item: item2, pane: pane2, index: 0 }]
+ expect(events.length).toBe(6);
+ expect(events[1]).toEqual([
+ 'did',
+ { item: item1, pane: pane1, index: 0 }
]);
+ expect(events[3]).toEqual([
+ 'did',
+ { item: item3, pane: pane2, index: 1 }
+ ]);
+ expect(events[5]).toEqual([
+ 'did',
+ { item: item2, pane: pane2, index: 0 }
+ ]);
+
+ expect(events[0][0]).toEqual('will');
+ expect(events[0][1].item).toEqual(item1);
+ expect(events[0][1].pane).toEqual(pane1);
+ expect(events[0][1].index).toEqual(0);
+ expect(typeof events[0][1].prevent).toEqual('function');
+
+ expect(events[2][0]).toEqual('will');
+ expect(events[2][1].item).toEqual(item3);
+ expect(events[2][1].pane).toEqual(pane2);
+ expect(events[2][1].index).toEqual(1);
+ expect(typeof events[2][1].prevent).toEqual('function');
+
+ expect(events[4][0]).toEqual('will');
+ expect(events[4][1].item).toEqual(item2);
+ expect(events[4][1].pane).toEqual(pane2);
+ expect(events[4][1].index).toEqual(0);
+ expect(typeof events[4][1].prevent).toEqual('function');
});
});
diff --git a/spec/pane-spec.js b/spec/pane-spec.js
index 6fcb1fa1d..7482f9662 100644
--- a/spec/pane-spec.js
+++ b/spec/pane-spec.js
@@ -399,9 +399,8 @@ describe('Pane', () => {
const pendingSpy = jasmine.createSpy('onItemDidTerminatePendingState');
const destroySpy = jasmine.createSpy('onWillDestroyItem');
- await atom.workspace.open('sample.txt', { pending: true }).then(() => {
- pane = atom.workspace.getActivePane();
- });
+ await atom.workspace.open('sample.txt', { pending: true });
+ pane = atom.workspace.getActivePane();
pane.onItemDidTerminatePendingState(pendingSpy);
pane.onWillDestroyItem(destroySpy);
@@ -569,6 +568,32 @@ describe('Pane', () => {
expect(pane.getActiveItem()).toBeUndefined();
});
+ it('does nothing if prevented', () => {
+ const container = new PaneContainer({
+ config: atom.config,
+ deserializerManager: atom.deserializers,
+ applicationDelegate: atom.applicationDelegate
+ });
+
+ pane.setContainer(container);
+ container.onWillDestroyPaneItem(e => e.prevent());
+ pane.itemStack = [item2, item3, item1];
+
+ pane.activateItem(item1);
+ expect(pane.getActiveItem()).toBe(item1);
+ pane.destroyItem(item3);
+ expect(pane.itemStack).toEqual([item2, item3, item1]);
+ expect(pane.getActiveItem()).toBe(item1);
+
+ pane.destroyItem(item1);
+ expect(pane.itemStack).toEqual([item2, item3, item1]);
+ expect(pane.getActiveItem()).toBe(item1);
+
+ pane.destroyItem(item2);
+ expect(pane.itemStack).toEqual([item2, item3, item1]);
+ expect(pane.getActiveItem()).toBe(item1);
+ });
+
it('invokes ::onWillDestroyItem() and PaneContainer::onWillDestroyPaneItem observers before destroying the item', async () => {
jasmine.useRealClock();
pane.container = new PaneContainer({ config: atom.config, confirm });
@@ -590,10 +615,16 @@ describe('Pane', () => {
await pane.destroyItem(item2);
expect(item2.isDestroyed()).toBe(true);
- expect(events).toEqual([
- ['will-destroy-item', { item: item2, index: 1 }],
- ['will-destroy-pane-item', { item: item2, index: 1, pane }]
- ]);
+
+ expect(events[0][0]).toEqual('will-destroy-item');
+ expect(events[0][1].item).toEqual(item2);
+ expect(events[0][1].index).toEqual(1);
+
+ expect(events[1][0]).toEqual('will-destroy-pane-item');
+ expect(events[1][1].item).toEqual(item2);
+ expect(events[1][1].index).toEqual(1);
+ expect(typeof events[1][1].prevent).toEqual('function');
+ expect(events[1][1].pane).toEqual(pane);
});
it('invokes ::onWillRemoveItem() observers', () => {
diff --git a/spec/panel-container-element-spec.js b/spec/panel-container-element-spec.js
index 649b5414d..e8ff50b23 100644
--- a/spec/panel-container-element-spec.js
+++ b/spec/panel-container-element-spec.js
@@ -9,7 +9,7 @@ describe('PanelContainerElement', () => {
class TestPanelContainerItem {}
class TestPanelContainerItemElement_ extends HTMLElement {
- createdCallback() {
+ connectedCallback() {
this.classList.add('test-root');
}
initialize(model) {
@@ -19,16 +19,20 @@ describe('PanelContainerElement', () => {
focus() {}
}
- const TestPanelContainerItemElement = document.registerElement(
+ window.customElements.define(
'atom-test-container-item-element',
- { prototype: TestPanelContainerItemElement_.prototype }
+ TestPanelContainerItemElement_
+ );
+
+ const TestPanelContainerItemElement = document.createElement(
+ 'atom-test-container-item-element'
);
beforeEach(() => {
jasmineContent = document.body.querySelector('#jasmine-content');
atom.views.addViewProvider(TestPanelContainerItem, model =>
- new TestPanelContainerItemElement().initialize(model)
+ TestPanelContainerItemElement.initialize(model)
);
container = new PanelContainer({
diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee
index bcf7ad386..48a63e235 100644
--- a/spec/spec-helper.coffee
+++ b/spec/spec-helper.coffee
@@ -254,7 +254,8 @@ addCustomMatchers = (spec) ->
element = @actual
element = element.get(0) if element.jquery
@message = -> return "Expected element '#{element}' or its descendants #{toOrNotTo} show."
- element.style.display in ['block', 'inline-block', 'static', 'fixed']
+ computedStyle = getComputedStyle(element)
+ computedStyle.display isnt 'none' and computedStyle.visibility is 'visible' and not element.hidden
toEqualPath: (expected) ->
actualPath = path.normalize(@actual)
@@ -262,6 +263,14 @@ addCustomMatchers = (spec) ->
@message = -> return "Expected path '#{actualPath}' to be equal to '#{expectedPath}'."
actualPath is expectedPath
+ toBeNear: (expected, acceptedError = 1, actual) ->
+ return (typeof expected is 'number') and (typeof acceptedError is 'number') and (typeof @actual is 'number') and (expected - acceptedError <= @actual) and (@actual <= expected + acceptedError)
+
+ toHaveNearPixels: (expected, acceptedError = 1, actual) ->
+ expectedNumber = parseFloat(expected)
+ actualNumber = parseFloat(@actual)
+ return (typeof expected is 'string') and (typeof acceptedError is 'number') and (typeof @actual is 'string') and (expected.indexOf('px') >= 1) and (@actual.indexOf('px') >= 1) and (expectedNumber - acceptedError <= actualNumber) and (actualNumber <= expectedNumber + acceptedError)
+
window.waitsForPromise = (args...) ->
label = null
if args.length > 1
diff --git a/spec/styles-element-spec.js b/spec/styles-element-spec.js
index effe1443e..7c3a9aaa5 100644
--- a/spec/styles-element-spec.js
+++ b/spec/styles-element-spec.js
@@ -1,4 +1,4 @@
-const StylesElement = require('../src/styles-element');
+const { createStylesElement } = require('../src/styles-element');
describe('StylesElement', function() {
let [
@@ -9,7 +9,7 @@ describe('StylesElement', function() {
] = [];
beforeEach(function() {
- element = new StylesElement();
+ element = createStylesElement();
element.initialize(atom.styles);
document.querySelector('#jasmine-content').appendChild(element);
addedStyleElements = [];
diff --git a/spec/text-editor-component-spec.js b/spec/text-editor-component-spec.js
index d6769dd59..7caf26282 100644
--- a/spec/text-editor-component-spec.js
+++ b/spec/text-editor-component-spec.js
@@ -18,15 +18,18 @@ const SAMPLE_TEXT = fs.readFileSync(
'utf8'
);
-document.registerElement('text-editor-component-test-element', {
- prototype: Object.create(HTMLElement.prototype, {
- attachedCallback: {
- value: function() {
- this.didAttach();
- }
- }
- })
-});
+class DummyElement extends HTMLElement {
+ connectedCallback() {
+ this.didAttach();
+ }
+}
+
+window.customElements.define(
+ 'text-editor-component-test-element',
+ DummyElement
+);
+
+document.createElement('text-editor-component-test-element');
const editors = [];
let verticalScrollbarWidth, horizontalScrollbarHeight;
@@ -239,8 +242,9 @@ describe('TextEditorComponent', () => {
editor.setText('a\n'.repeat(30));
await component.getNextUpdatePromise();
expect(component.refs.content.offsetHeight).toBeGreaterThan(100);
- expect(component.refs.content.offsetHeight).toBe(
- component.getContentHeight()
+ expect(component.refs.content.offsetHeight).toBeNear(
+ component.getContentHeight(),
+ 2
);
});
@@ -302,7 +306,7 @@ describe('TextEditorComponent', () => {
const lineNumberGutterElement =
component.refs.gutterContainer.refs.lineNumberGutter.element;
- expect(lineNumberGutterElement.offsetHeight).toBe(
+ expect(lineNumberGutterElement.offsetHeight).toBeNear(
component.getScrollHeight()
);
@@ -319,7 +323,7 @@ describe('TextEditorComponent', () => {
editor.setText('x\n'.repeat(99));
await component.getNextUpdatePromise();
- expect(lineNumberGutterElement.offsetHeight).toBe(
+ expect(lineNumberGutterElement.offsetHeight).toBeNear(
component.getScrollHeight()
);
for (const child of lineNumberGutterElement.children) {
@@ -412,8 +416,12 @@ describe('TextEditorComponent', () => {
});
const verticalScrollbar = component.refs.verticalScrollbar.element;
const horizontalScrollbar = component.refs.horizontalScrollbar.element;
- expect(verticalScrollbar.scrollHeight).toBe(component.getContentHeight());
- expect(horizontalScrollbar.scrollWidth).toBe(component.getContentWidth());
+ expect(verticalScrollbar.scrollHeight).toBeNear(
+ component.getContentHeight()
+ );
+ expect(horizontalScrollbar.scrollWidth).toBeNear(
+ component.getContentWidth()
+ );
expect(getVerticalScrollbarWidth(component)).toBeGreaterThan(0);
expect(getHorizontalScrollbarHeight(component)).toBeGreaterThan(0);
expect(verticalScrollbar.style.bottom).toBe(
@@ -479,18 +487,20 @@ describe('TextEditorComponent', () => {
TextEditor.didUpdateScrollbarStyles();
await component.getNextUpdatePromise();
- expect(getHorizontalScrollbarHeight(component)).toBe(10);
- expect(getVerticalScrollbarWidth(component)).toBe(10);
- expect(component.refs.horizontalScrollbar.element.style.right).toBe(
- '10px'
+ expect(getHorizontalScrollbarHeight(component)).toBeNear(10);
+ expect(getVerticalScrollbarWidth(component)).toBeNear(10);
+ expect(
+ component.refs.horizontalScrollbar.element.style.right
+ ).toHaveNearPixels('10px');
+ expect(
+ component.refs.verticalScrollbar.element.style.bottom
+ ).toHaveNearPixels('10px');
+ expect(component.refs.horizontalScrollbar.element.scrollLeft).toBeNear(
+ 10
);
- expect(component.refs.verticalScrollbar.element.style.bottom).toBe(
- '10px'
- );
- expect(component.refs.horizontalScrollbar.element.scrollLeft).toBe(10);
- expect(component.refs.verticalScrollbar.element.scrollTop).toBe(20);
- expect(component.getScrollContainerClientHeight()).toBe(100 - 10);
- expect(component.getScrollContainerClientWidth()).toBe(
+ expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(20);
+ expect(component.getScrollContainerClientHeight()).toBeNear(100 - 10);
+ expect(component.getScrollContainerClientWidth()).toBeNear(
100 - component.getGutterContainerWidth() - 10
);
@@ -498,18 +508,20 @@ describe('TextEditorComponent', () => {
element.remove();
jasmine.attachToDOM(element);
- expect(getHorizontalScrollbarHeight(component)).toBe(10);
- expect(getVerticalScrollbarWidth(component)).toBe(10);
- expect(component.refs.horizontalScrollbar.element.style.right).toBe(
- '10px'
+ expect(getHorizontalScrollbarHeight(component)).toBeNear(10);
+ expect(getVerticalScrollbarWidth(component)).toBeNear(10);
+ expect(
+ component.refs.horizontalScrollbar.element.style.right
+ ).toHaveNearPixels('10px');
+ expect(
+ component.refs.verticalScrollbar.element.style.bottom
+ ).toHaveNearPixels('10px');
+ expect(component.refs.horizontalScrollbar.element.scrollLeft).toBeNear(
+ 10
);
- expect(component.refs.verticalScrollbar.element.style.bottom).toBe(
- '10px'
- );
- expect(component.refs.horizontalScrollbar.element.scrollLeft).toBe(10);
- expect(component.refs.verticalScrollbar.element.scrollTop).toBe(20);
- expect(component.getScrollContainerClientHeight()).toBe(100 - 10);
- expect(component.getScrollContainerClientWidth()).toBe(
+ expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(20);
+ expect(component.getScrollContainerClientHeight()).toBeNear(100 - 10);
+ expect(component.getScrollContainerClientWidth()).toBeNear(
100 - component.getGutterContainerWidth() - 10
);
@@ -596,8 +608,8 @@ describe('TextEditorComponent', () => {
it('blinks cursors when the editor is focused and the cursors are not moving', async () => {
assertDocumentFocused();
const { component, element, editor } = buildComponent();
- component.props.cursorBlinkPeriod = 40;
- component.props.cursorBlinkResumeDelay = 40;
+ component.props.cursorBlinkPeriod = 30;
+ component.props.cursorBlinkResumeDelay = 30;
editor.addCursorAtScreenPosition([1, 0]);
element.focus();
@@ -723,7 +735,7 @@ describe('TextEditorComponent', () => {
expect(hiddenInput.getBoundingClientRect().top).toBe(
clientTopForLine(component, 7)
);
- expect(Math.round(hiddenInput.getBoundingClientRect().left)).toBe(
+ expect(Math.round(hiddenInput.getBoundingClientRect().left)).toBeNear(
clientLeftForCharacter(component, 7, 4)
);
});
@@ -752,14 +764,6 @@ describe('TextEditorComponent', () => {
' right = [];'
);
- await setEditorWidthInCharacters(component, 45);
- expect(lineNodeForScreenRow(component, 3).textContent).toBe(
- ' var pivot = items.shift(), current, left '
- );
- expect(lineNodeForScreenRow(component, 4).textContent).toBe(
- ' = [], right = [];'
- );
-
const { scrollContainer } = component.refs;
expect(scrollContainer.clientWidth).toBe(scrollContainer.scrollWidth);
});
@@ -815,7 +819,7 @@ describe('TextEditorComponent', () => {
verticalScrollbarWidth +
2 * editorPadding
);
- expect(initialHeight).toBe(
+ expect(initialHeight).toBeNear(
component.getContentHeight() +
horizontalScrollbarHeight +
2 * editorPadding
@@ -836,7 +840,7 @@ describe('TextEditorComponent', () => {
// When autoHeight is enabled, height adjusts to content
editor.insertText('\n'.repeat(5));
await component.getNextUpdatePromise();
- expect(element.offsetHeight).toBe(
+ expect(element.offsetHeight).toBeNear(
component.getContentHeight() +
horizontalScrollbarHeight +
2 * editorPadding
@@ -854,7 +858,7 @@ describe('TextEditorComponent', () => {
it('does not render the line numbers but still renders the line number gutter if showLineNumbers is false', async () => {
function checkScrollContainerLeft(component) {
const { scrollContainer, gutterContainer } = component.refs;
- expect(scrollContainer.getBoundingClientRect().left).toBe(
+ expect(scrollContainer.getBoundingClientRect().left).toBeNear(
Math.round(gutterContainer.element.getBoundingClientRect().right)
);
}
@@ -956,6 +960,7 @@ describe('TextEditorComponent', () => {
'0',
'1',
'2',
+ '2',
'3',
'3',
'4',
@@ -992,7 +997,8 @@ describe('TextEditorComponent', () => {
'15',
'16',
'17',
- '18'
+ '18',
+ '19'
]);
}
@@ -1010,6 +1016,7 @@ describe('TextEditorComponent', () => {
'1',
'2',
'3',
+ '3',
'4',
'4',
'5',
@@ -1047,7 +1054,8 @@ describe('TextEditorComponent', () => {
'16',
'17',
'18',
- '19'
+ '19',
+ '20'
]);
}
});
@@ -1394,20 +1402,20 @@ describe('TextEditorComponent', () => {
editor.scrollToScreenRange([[4, 0], [6, 0]]);
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(6 + 1 + editor.verticalScrollMargin) * component.getLineHeight()
);
editor.scrollToScreenPosition([8, 0]);
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(8 + 1 + editor.verticalScrollMargin) *
component.measurements.lineHeight
);
editor.scrollToScreenPosition([3, 0]);
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTop()).toBeNear(
(3 - editor.verticalScrollMargin) * component.measurements.lineHeight
);
@@ -1430,25 +1438,25 @@ describe('TextEditorComponent', () => {
editor.scrollToScreenPosition([6, 0]);
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(6 + 1 + scrollMarginInLines) * component.measurements.lineHeight
);
editor.scrollToScreenPosition([6, 4]);
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(6 + 1 + scrollMarginInLines) * component.measurements.lineHeight
);
editor.scrollToScreenRange([[4, 4], [6, 4]]);
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTop()).toBeNear(
(4 - scrollMarginInLines) * component.measurements.lineHeight
);
editor.scrollToScreenRange([[4, 4], [6, 4]], { reversed: false });
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(6 + 1 + scrollMarginInLines) * component.measurements.lineHeight
);
});
@@ -1483,7 +1491,7 @@ describe('TextEditorComponent', () => {
lineNodeForScreenRow(component, 1).getBoundingClientRect().left -
editor.horizontalScrollMargin *
component.measurements.baseCharacterWidth;
- expect(component.getScrollLeft()).toBeCloseTo(expectedScrollLeft, 0);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
editor.scrollToScreenRange([[1, 12], [2, 28]], { reversed: false });
await component.getNextUpdatePromise();
@@ -1494,7 +1502,7 @@ describe('TextEditorComponent', () => {
editor.horizontalScrollMargin *
component.measurements.baseCharacterWidth -
component.getScrollContainerClientWidth();
- expect(component.getScrollLeft()).toBeCloseTo(expectedScrollLeft, 0);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
});
it('does not horizontally autoscroll by more than half of the visible "base-width" characters if the editor is narrower than twice the scroll margin', async () => {
@@ -1516,7 +1524,7 @@ describe('TextEditorComponent', () => {
Math.floor((editorWidthInChars - 1) / 2) *
component.getBaseCharacterWidth()
);
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
});
it('correctly autoscrolls after inserting a line that exceeds the current content width', async () => {
@@ -1531,7 +1539,7 @@ describe('TextEditorComponent', () => {
editor.insertText('x'.repeat(100));
await component.getNextUpdatePromise();
- expect(component.getScrollLeft()).toBe(
+ expect(component.getScrollLeft()).toBeNear(
component.getScrollWidth() - component.getScrollContainerClientWidth()
);
});
@@ -1545,7 +1553,7 @@ describe('TextEditorComponent', () => {
editor.scrollToBufferPosition([11, 5]);
editor.getBuffer().deleteRows(11, 12);
await component.getNextUpdatePromise();
- expect(component.getScrollBottom()).toBe(
+ expect(component.getScrollBottom()).toBeNear(
(10 + 1) * component.measurements.lineHeight
);
});
@@ -1562,10 +1570,10 @@ describe('TextEditorComponent', () => {
editor.insertText('\n\n' + 'x'.repeat(100));
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTop()).toBeNear(
component.getScrollHeight() - component.getScrollContainerClientHeight()
);
- expect(component.getScrollLeft()).toBe(
+ expect(component.getScrollLeft()).toBeNear(
component.getScrollWidth() - component.getScrollContainerClientWidth()
);
@@ -1592,36 +1600,36 @@ describe('TextEditorComponent', () => {
// Assigns the scrollTop based on the logical position when attached
jasmine.attachToDOM(element);
const expectedScrollTop = Math.round(6 * component.getLineHeight());
- expect(component.getScrollTopRow()).toBe(6);
- expect(component.getScrollTop()).toBe(expectedScrollTop);
+ expect(component.getScrollTopRow()).toBeNear(6);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
expect(component.refs.content.style.transform).toBe(
`translate(0px, -${expectedScrollTop}px)`
);
// Allows the scrollTopRow to be updated while attached
component.setScrollTopRow(4);
- expect(component.getScrollTopRow()).toBe(4);
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTopRow()).toBeNear(4);
+ expect(component.getScrollTop()).toBeNear(
Math.round(4 * component.getLineHeight())
);
// Preserves the scrollTopRow when detached
element.remove();
- expect(component.getScrollTopRow()).toBe(4);
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTopRow()).toBeNear(4);
+ expect(component.getScrollTop()).toBeNear(
Math.round(4 * component.getLineHeight())
);
component.setScrollTopRow(6);
- expect(component.getScrollTopRow()).toBe(6);
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTopRow()).toBeNear(6);
+ expect(component.getScrollTop()).toBeNear(
Math.round(6 * component.getLineHeight())
);
jasmine.attachToDOM(element);
element.style.height = '60px';
- expect(component.getScrollTopRow()).toBe(6);
- expect(component.getScrollTop()).toBe(
+ expect(component.getScrollTopRow()).toBeNear(6);
+ expect(component.getScrollTop()).toBeNear(
Math.round(6 * component.getLineHeight())
);
});
@@ -1691,8 +1699,8 @@ describe('TextEditorComponent', () => {
wheelDeltaY: -20,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollTop()).toBe(expectedScrollTop);
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
expect(component.refs.content.style.transform).toBe(
`translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)`
);
@@ -1707,8 +1715,8 @@ describe('TextEditorComponent', () => {
wheelDeltaY: 10,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollTop()).toBe(expectedScrollTop);
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
expect(component.refs.content.style.transform).toBe(
`translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)`
);
@@ -1722,8 +1730,8 @@ describe('TextEditorComponent', () => {
wheelDeltaY: 10,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollTop()).toBe(expectedScrollTop);
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
expect(component.refs.content.style.transform).toBe(
`translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)`
);
@@ -1738,8 +1746,8 @@ describe('TextEditorComponent', () => {
wheelDeltaY: -8,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollTop()).toBe(expectedScrollTop);
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
expect(component.refs.content.style.transform).toBe(
`translate(${-expectedScrollLeft}px, ${-expectedScrollTop}px)`
);
@@ -1764,7 +1772,7 @@ describe('TextEditorComponent', () => {
wheelDeltaY: -20,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollTop()).toBe(expectedScrollTop);
+ expect(component.getScrollTop()).toBeNear(expectedScrollTop);
expect(component.refs.content.style.transform).toBe(
`translate(0px, -${expectedScrollTop}px)`
);
@@ -1779,7 +1787,7 @@ describe('TextEditorComponent', () => {
shiftKey: true,
preventDefault: eventPreventDefaultStub
});
- expect(component.getScrollLeft()).toBe(expectedScrollLeft);
+ expect(component.getScrollLeft()).toBeNear(expectedScrollLeft);
expect(component.refs.content.style.transform).toBe(
`translate(-${expectedScrollLeft}px, 0px)`
);
@@ -1913,20 +1921,20 @@ describe('TextEditorComponent', () => {
setScrollTop(component, NaN);
setScrollLeft(component, NaN);
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(initialScrollTop);
- expect(component.getScrollLeft()).toBe(initialScrollLeft);
+ expect(component.getScrollTop()).toBeNear(initialScrollTop);
+ expect(component.getScrollLeft()).toBeNear(initialScrollLeft);
setScrollTop(component, null);
setScrollLeft(component, null);
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(initialScrollTop);
- expect(component.getScrollLeft()).toBe(initialScrollLeft);
+ expect(component.getScrollTop()).toBeNear(initialScrollTop);
+ expect(component.getScrollLeft()).toBeNear(initialScrollLeft);
setScrollTop(component, undefined);
setScrollLeft(component, undefined);
await component.getNextUpdatePromise();
- expect(component.getScrollTop()).toBe(initialScrollTop);
- expect(component.getScrollLeft()).toBe(initialScrollLeft);
+ expect(component.getScrollTop()).toBeNear(initialScrollTop);
+ expect(component.getScrollLeft()).toBeNear(initialScrollLeft);
});
});
@@ -2247,10 +2255,10 @@ describe('TextEditorComponent', () => {
expect(regionRect.top).toBe(
lineNodeForScreenRow(component, 1).getBoundingClientRect().top
);
- expect(Math.round(regionRect.left)).toBe(
+ expect(Math.round(regionRect.left)).toBeNear(
clientLeftForCharacter(component, 1, 2)
);
- expect(Math.round(regionRect.right)).toBe(
+ expect(Math.round(regionRect.right)).toBeNear(
clientLeftForCharacter(component, 1, 10)
);
}
@@ -2268,10 +2276,10 @@ describe('TextEditorComponent', () => {
expect(regionRect.bottom).toBe(
lineNodeForScreenRow(component, 1).getBoundingClientRect().bottom
);
- expect(Math.round(regionRect.left)).toBe(
+ expect(Math.round(regionRect.left)).toBeNear(
clientLeftForCharacter(component, 1, 4)
);
- expect(Math.round(regionRect.right)).toBe(
+ expect(Math.round(regionRect.right)).toBeNear(
clientLeftForCharacter(component, 1, 8)
);
}
@@ -2296,24 +2304,24 @@ describe('TextEditorComponent', () => {
expect(region0Rect.bottom).toBe(
lineNodeForScreenRow(component, 2).getBoundingClientRect().bottom
);
- expect(Math.round(region0Rect.left)).toBe(
+ expect(Math.round(region0Rect.left)).toBeNear(
clientLeftForCharacter(component, 2, 4)
);
- expect(Math.round(region0Rect.right)).toBe(
+ expect(Math.round(region0Rect.right)).toBeNear(
component.refs.content.getBoundingClientRect().right
);
const region1Rect = regions[1].getBoundingClientRect();
- expect(region1Rect.top).toBe(
+ expect(region1Rect.top).toBeNear(
lineNodeForScreenRow(component, 3).getBoundingClientRect().top
);
- expect(region1Rect.bottom).toBe(
+ expect(region1Rect.bottom).toBeNear(
lineNodeForScreenRow(component, 3).getBoundingClientRect().bottom
);
- expect(Math.round(region1Rect.left)).toBe(
+ expect(Math.round(region1Rect.left)).toBeNear(
clientLeftForCharacter(component, 3, 0)
);
- expect(Math.round(region1Rect.right)).toBe(
+ expect(Math.round(region1Rect.right)).toBeNear(
clientLeftForCharacter(component, 3, 4)
);
}
@@ -2328,44 +2336,44 @@ describe('TextEditorComponent', () => {
expect(regions.length).toBe(3);
const region0Rect = regions[0].getBoundingClientRect();
- expect(region0Rect.top).toBe(
+ expect(region0Rect.top).toBeNear(
lineNodeForScreenRow(component, 2).getBoundingClientRect().top
);
- expect(region0Rect.bottom).toBe(
+ expect(region0Rect.bottom).toBeNear(
lineNodeForScreenRow(component, 2).getBoundingClientRect().bottom
);
- expect(Math.round(region0Rect.left)).toBe(
+ expect(Math.round(region0Rect.left)).toBeNear(
clientLeftForCharacter(component, 2, 4)
);
- expect(Math.round(region0Rect.right)).toBe(
+ expect(Math.round(region0Rect.right)).toBeNear(
component.refs.content.getBoundingClientRect().right
);
const region1Rect = regions[1].getBoundingClientRect();
- expect(region1Rect.top).toBe(
+ expect(region1Rect.top).toBeNear(
lineNodeForScreenRow(component, 3).getBoundingClientRect().top
);
- expect(region1Rect.bottom).toBe(
+ expect(region1Rect.bottom).toBeNear(
lineNodeForScreenRow(component, 5).getBoundingClientRect().top
);
- expect(Math.round(region1Rect.left)).toBe(
+ expect(Math.round(region1Rect.left)).toBeNear(
component.refs.content.getBoundingClientRect().left
);
- expect(Math.round(region1Rect.right)).toBe(
+ expect(Math.round(region1Rect.right)).toBeNear(
component.refs.content.getBoundingClientRect().right
);
const region2Rect = regions[2].getBoundingClientRect();
- expect(region2Rect.top).toBe(
+ expect(region2Rect.top).toBeNear(
lineNodeForScreenRow(component, 5).getBoundingClientRect().top
);
- expect(region2Rect.bottom).toBe(
+ expect(region2Rect.bottom).toBeNear(
lineNodeForScreenRow(component, 6).getBoundingClientRect().top
);
- expect(Math.round(region2Rect.left)).toBe(
+ expect(Math.round(region2Rect.left)).toBeNear(
component.refs.content.getBoundingClientRect().left
);
- expect(Math.round(region2Rect.right)).toBe(
+ expect(Math.round(region2Rect.right)).toBeNear(
clientLeftForCharacter(component, 5, 4)
);
}
@@ -2542,9 +2550,9 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
const regions = element.querySelectorAll('.highlight .region');
- expect(regions[0].offsetTop).toBe(3 * component.getLineHeight());
- expect(regions[0].offsetHeight).toBe(component.getLineHeight());
- expect(regions[1].offsetTop).toBe(4 * component.getLineHeight() + 30);
+ expect(regions[0].offsetTop).toBeNear(3 * component.getLineHeight());
+ expect(regions[0].offsetHeight).toBeNear(component.getLineHeight());
+ expect(regions[1].offsetTop).toBeNear(4 * component.getLineHeight() + 30);
});
});
@@ -2596,33 +2604,33 @@ describe('TextEditorComponent', () => {
const overlayWrapper = overlayElement.parentElement;
expect(overlayWrapper.classList.contains('a')).toBe(true);
- expect(overlayWrapper.getBoundingClientRect().top).toBe(
+ expect(overlayWrapper.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 5)
);
- expect(overlayWrapper.getBoundingClientRect().left).toBe(
+ expect(overlayWrapper.getBoundingClientRect().left).toBeNear(
clientLeftForCharacter(component, 4, 25)
);
// Updates the horizontal position on scroll
await setScrollLeft(component, 150);
- expect(overlayWrapper.getBoundingClientRect().left).toBe(
+ expect(overlayWrapper.getBoundingClientRect().left).toBeNear(
clientLeftForCharacter(component, 4, 25)
);
// Shifts the overlay horizontally to ensure the overlay element does not
// overflow the window
await setScrollLeft(component, 30);
- expect(overlayElement.getBoundingClientRect().right).toBe(
+ expect(overlayElement.getBoundingClientRect().right).toBeNear(
fakeWindow.getBoundingClientRect().right
);
await setScrollLeft(component, 280);
- expect(overlayElement.getBoundingClientRect().left).toBe(
+ expect(overlayElement.getBoundingClientRect().left).toBeNear(
fakeWindow.getBoundingClientRect().left
);
// Updates the vertical position on scroll
await setScrollTop(component, 60);
- expect(overlayWrapper.getBoundingClientRect().top).toBe(
+ expect(overlayWrapper.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 5)
);
@@ -2630,25 +2638,25 @@ describe('TextEditorComponent', () => {
// overflow the bottom of the window
setScrollLeft(component, 100);
await setScrollTop(component, 0);
- expect(overlayWrapper.getBoundingClientRect().bottom).toBe(
+ expect(overlayWrapper.getBoundingClientRect().bottom).toBeNear(
clientTopForLine(component, 4)
);
// Flips the overlay vertically on overlay resize if necessary
await setScrollTop(component, 20);
- expect(overlayWrapper.getBoundingClientRect().top).toBe(
+ expect(overlayWrapper.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 5)
);
overlayElement.style.height = 60 + 'px';
await overlayComponent.getNextUpdatePromise();
- expect(overlayWrapper.getBoundingClientRect().bottom).toBe(
+ expect(overlayWrapper.getBoundingClientRect().bottom).toBeNear(
clientTopForLine(component, 4)
);
// Does not flip the overlay vertically if it would overflow the top of the window
overlayElement.style.height = 80 + 'px';
await overlayComponent.getNextUpdatePromise();
- expect(overlayWrapper.getBoundingClientRect().top).toBe(
+ expect(overlayWrapper.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 5)
);
@@ -2721,7 +2729,7 @@ describe('TextEditorComponent', () => {
const { scrollContainer, gutterContainer } = component.refs;
function checkScrollContainerLeft() {
- expect(scrollContainer.getBoundingClientRect().left).toBe(
+ expect(scrollContainer.getBoundingClientRect().left).toBeNear(
Math.round(gutterContainer.element.getBoundingClientRect().right)
);
}
@@ -2829,19 +2837,19 @@ describe('TextEditorComponent', () => {
const [decorationNode3] = gutterB.getElement().firstChild.children;
expect(decorationNode1.className).toBe('decoration a');
- expect(decorationNode1.getBoundingClientRect().top).toBe(
+ expect(decorationNode1.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 2)
);
- expect(decorationNode1.getBoundingClientRect().bottom).toBe(
+ expect(decorationNode1.getBoundingClientRect().bottom).toBeNear(
clientTopForLine(component, 5)
);
expect(decorationNode1.firstChild).toBeNull();
expect(decorationNode2.className).toBe('decoration b');
- expect(decorationNode2.getBoundingClientRect().top).toBe(
+ expect(decorationNode2.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 6)
);
- expect(decorationNode2.getBoundingClientRect().bottom).toBe(
+ expect(decorationNode2.getBoundingClientRect().bottom).toBeNear(
clientTopForLine(component, 8)
);
expect(decorationNode2.firstChild).toBe(decorationElement1);
@@ -2851,10 +2859,10 @@ describe('TextEditorComponent', () => {
expect(decorationElement1.offsetWidth).toBe(decorationNode2.offsetWidth);
expect(decorationNode3.className).toBe('decoration');
- expect(decorationNode3.getBoundingClientRect().top).toBe(
+ expect(decorationNode3.getBoundingClientRect().top).toBeNear(
clientTopForLine(component, 9)
);
- expect(decorationNode3.getBoundingClientRect().bottom).toBe(
+ expect(decorationNode3.getBoundingClientRect().bottom).toBeNear(
clientTopForLine(component, 12) + component.getLineHeight()
);
expect(decorationNode3.firstChild).toBe(decorationElement2);
@@ -2992,7 +3000,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item1) +
getElementHeight(item2)
@@ -3039,7 +3047,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item1) +
getElementHeight(item2) +
@@ -3078,7 +3086,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3113,7 +3121,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3147,7 +3155,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3183,7 +3191,7 @@ describe('TextEditorComponent', () => {
);
expect(component.getRenderedStartRow()).toBe(3);
expect(component.getRenderedEndRow()).toBe(12);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3214,7 +3222,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3253,7 +3261,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3303,7 +3311,7 @@ describe('TextEditorComponent', () => {
await component.getNextUpdatePromise();
expect(component.getRenderedStartRow()).toBe(0);
expect(component.getRenderedEndRow()).toBe(9);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3341,7 +3349,7 @@ describe('TextEditorComponent', () => {
component.getRenderedStartRow() === 0 &&
component.getRenderedEndRow() === 13
);
- expect(component.getScrollHeight()).toBe(
+ expect(component.getScrollHeight()).toBeNear(
editor.getScreenLineCount() * component.getLineHeight() +
getElementHeight(item2) +
getElementHeight(item3) +
@@ -3832,16 +3840,16 @@ describe('TextEditorComponent', () => {
tile.tileStartRow
).parentElement;
const linesTileBoundingRect = linesTileElement.getBoundingClientRect();
- expect(linesTileBoundingRect.height).toBe(tile.height);
- expect(linesTileBoundingRect.top).toBe(top);
+ expect(linesTileBoundingRect.height).toBeNear(tile.height);
+ expect(linesTileBoundingRect.top).toBeNear(top);
const lineNumbersTileElement = lineNumberNodeForScreenRow(
component,
tile.tileStartRow
).parentElement;
const lineNumbersTileBoundingRect = lineNumbersTileElement.getBoundingClientRect();
- expect(lineNumbersTileBoundingRect.height).toBe(tile.height);
- expect(lineNumbersTileBoundingRect.top).toBe(top);
+ expect(lineNumbersTileBoundingRect.height).toBeNear(tile.height);
+ expect(lineNumbersTileBoundingRect.top).toBeNear(top);
top += tile.height;
}
@@ -3853,7 +3861,7 @@ describe('TextEditorComponent', () => {
for (let row = startRow; row < endRow; row++) {
const lineNode = lineNodeForScreenRow(component, row);
const lineNumberNode = lineNumberNodeForScreenRow(component, row);
- expect(lineNumberNode.getBoundingClientRect().top).toBe(
+ expect(lineNumberNode.getBoundingClientRect().top).toBeNear(
lineNode.getBoundingClientRect().top
);
}
@@ -3986,8 +3994,8 @@ describe('TextEditorComponent', () => {
element.style.height = 4 * component.getLineHeight() + 'px';
await component.getNextUpdatePromise();
await setScrollTop(component, 4 * component.getLineHeight());
- expect(component.getRenderedStartRow()).toBe(4);
- expect(component.getRenderedEndRow()).toBe(9);
+ expect(component.getRenderedStartRow()).toBeNear(4);
+ expect(component.getRenderedEndRow()).toBeNear(9);
const markerLayer = editor.addMarkerLayer();
const marker1 = markerLayer.markBufferRange([[0, 0], [4, 5]]);
@@ -4051,6 +4059,7 @@ describe('TextEditorComponent', () => {
describe('on the lines', () => {
describe('when there is only one cursor', () => {
it('positions the cursor on single-click or when middle-clicking', async () => {
+ atom.config.set('editor.selectionClipboard', true);
for (const button of [0, 1]) {
const { component, editor } = buildComponent();
const { lineHeight } = component.measurements;
@@ -4780,8 +4789,8 @@ describe('TextEditorComponent', () => {
didDrag({ clientX: 199, clientY: 199 });
didDrag({ clientX: 199, clientY: 199 });
didDrag({ clientX: 199, clientY: 199 });
- expect(component.getScrollTop()).toBe(maxScrollTop);
- expect(component.getScrollLeft()).toBe(maxScrollLeft);
+ expect(component.getScrollTop()).toBeNear(maxScrollTop);
+ expect(component.getScrollLeft()).toBeNear(maxScrollLeft);
});
});
@@ -4798,6 +4807,7 @@ describe('TextEditorComponent', () => {
const { component, editor } = buildComponent({ platform: 'linux' });
// Middle mouse pasting.
+ atom.config.set('editor.selectionClipboard', true);
editor.setSelectedBufferRange([[1, 6], [1, 10]]);
await conditionPromise(() => TextEditor.clipboard.read() === 'sort');
component.didMouseDownOnContent({
@@ -4809,7 +4819,19 @@ describe('TextEditorComponent', () => {
expect(editor.lineTextForBufferRow(10)).toBe('sort');
editor.undo();
+ // Doesn't paste when middle mouse button is clicked
+ atom.config.set('editor.selectionClipboard', false);
+ editor.setSelectedBufferRange([[1, 6], [1, 10]]);
+ component.didMouseDownOnContent({
+ button: 1,
+ clientX: clientLeftForCharacter(component, 10, 0),
+ clientY: clientTopForLine(component, 10)
+ });
+ expect(TextEditor.clipboard.read()).toBe('sort');
+ expect(editor.lineTextForBufferRow(10)).toBe('');
+
// Ensure left clicks don't interfere.
+ atom.config.set('editor.selectionClipboard', true);
editor.setSelectedBufferRange([[1, 2], [1, 5]]);
await conditionPromise(() => TextEditor.clipboard.read() === 'var');
component.didMouseDownOnContent({
@@ -5137,8 +5159,8 @@ describe('TextEditorComponent', () => {
didDrag({ clientX: 199, clientY: 199 });
didDrag({ clientX: 199, clientY: 199 });
didDrag({ clientX: 199, clientY: 199 });
- expect(component.getScrollTop()).toBe(maxScrollTop);
- expect(component.getScrollLeft()).toBe(maxScrollLeft);
+ expect(component.getScrollTop()).toBeNear(maxScrollTop);
+ expect(component.getScrollLeft()).toBeNear(maxScrollLeft);
});
});
@@ -5747,7 +5769,7 @@ describe('TextEditorComponent', () => {
expect(top).toBe(
clientTopForLine(referenceComponent, 0) - referenceContentRect.top
);
- expect(left).toBe(
+ expect(left).toBeNear(
clientLeftForCharacter(referenceComponent, 0, 5) -
referenceContentRect.left
);
@@ -5758,10 +5780,10 @@ describe('TextEditorComponent', () => {
row: 12,
column: 1
});
- expect(top).toBe(
+ expect(top).toBeNear(
clientTopForLine(referenceComponent, 12) - referenceContentRect.top
);
- expect(left).toBe(
+ expect(left).toBeNear(
clientLeftForCharacter(referenceComponent, 12, 1) -
referenceContentRect.left
);
@@ -5775,10 +5797,10 @@ describe('TextEditorComponent', () => {
row: 3,
column: 5
});
- expect(top).toBe(
+ expect(top).toBeNear(
clientTopForLine(referenceComponent, 3) - referenceContentRect.top
);
- expect(left).toBe(
+ expect(left).toBeNear(
clientLeftForCharacter(referenceComponent, 3, 5) -
referenceContentRect.left
);
@@ -5956,7 +5978,9 @@ describe('TextEditorComponent', () => {
'px';
await component.getNextUpdatePromise();
- expect(component.getMaxScrollTop() / component.getLineHeight()).toBe(9);
+ expect(component.getMaxScrollTop() / component.getLineHeight()).toBeNear(
+ 9
+ );
expect(component.refs.verticalScrollbar.element.scrollTop).toBe(
0 * component.getLineHeight()
);
@@ -5964,21 +5988,21 @@ describe('TextEditorComponent', () => {
editor.setFirstVisibleScreenRow(1);
expect(component.getFirstVisibleRow()).toBe(1);
await component.getNextUpdatePromise();
- expect(component.refs.verticalScrollbar.element.scrollTop).toBe(
+ expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(
1 * component.getLineHeight()
);
editor.setFirstVisibleScreenRow(5);
expect(component.getFirstVisibleRow()).toBe(5);
await component.getNextUpdatePromise();
- expect(component.refs.verticalScrollbar.element.scrollTop).toBe(
+ expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(
5 * component.getLineHeight()
);
editor.setFirstVisibleScreenRow(11);
expect(component.getFirstVisibleRow()).toBe(9);
await component.getNextUpdatePromise();
- expect(component.refs.verticalScrollbar.element.scrollTop).toBe(
+ expect(component.refs.verticalScrollbar.element.scrollTop).toBeNear(
9 * component.getLineHeight()
);
});
@@ -6184,7 +6208,7 @@ async function setEditorWidthInCharacters(component, widthInCharacters) {
function verifyCursorPosition(component, cursorNode, row, column) {
const rect = cursorNode.getBoundingClientRect();
- expect(Math.round(rect.top)).toBe(clientTopForLine(component, row));
+ expect(Math.round(rect.top)).toBeNear(clientTopForLine(component, row));
expect(Math.round(rect.left)).toBe(
Math.round(clientLeftForCharacter(component, row, column))
);
diff --git a/spec/text-editor-element-spec.js b/spec/text-editor-element-spec.js
index b370abfe7..fbe7af1f7 100644
--- a/spec/text-editor-element-spec.js
+++ b/spec/text-editor-element-spec.js
@@ -14,7 +14,7 @@ describe('TextEditorElement', () => {
});
function buildTextEditorElement(options = {}) {
- const element = new TextEditorElement();
+ const element = TextEditorElement.createTextEditorElement();
element.setUpdatedSynchronously(false);
if (options.attach !== false) jasmine.attachToDOM(element);
return element;
@@ -218,15 +218,16 @@ describe('TextEditorElement', () => {
});
describe('when focused while a parent node is being attached to the DOM', () => {
- class ElementThatFocusesChild extends HTMLDivElement {
- attachedCallback() {
+ class ElementThatFocusesChild extends HTMLElement {
+ connectedCallback() {
this.firstChild.focus();
}
}
- document.registerElement('element-that-focuses-child', {
- prototype: ElementThatFocusesChild.prototype
- });
+ window.customElements.define(
+ 'element-that-focuses-child',
+ ElementThatFocusesChild
+ );
it('proxies the focus event to the hidden input', () => {
const element = buildTextEditorElement();
@@ -438,12 +439,15 @@ describe('TextEditorElement', () => {
const bottom = 13 * editor.getLineHeightInPixels();
const left = Math.round(3 * editor.getDefaultCharWidth());
const right = Math.round(11 * editor.getDefaultCharWidth());
- expect(element.pixelRectForScreenRange([[2, 3], [13, 11]])).toEqual({
- top,
- left,
- height: bottom + editor.getLineHeightInPixels() - top,
- width: right - left
- });
+
+ const pixelRect = element.pixelRectForScreenRange([[2, 3], [13, 11]]);
+
+ expect(pixelRect.top).toEqual(top);
+ expect(pixelRect.left).toEqual(left);
+ expect(pixelRect.height).toEqual(
+ bottom + editor.getLineHeightInPixels() - top
+ );
+ expect(pixelRect.width).toBeNear(right - left);
});
});
diff --git a/spec/text-editor-registry-spec.js b/spec/text-editor-registry-spec.js
index 8b7dbf587..bc1850f80 100644
--- a/spec/text-editor-registry-spec.js
+++ b/spec/text-editor-registry-spec.js
@@ -91,6 +91,17 @@ describe('TextEditorRegistry', function() {
});
});
+ describe('.getActiveTextEditor', function() {
+ it('gets the currently focused text editor', function() {
+ const disposable = registry.add(editor);
+ var editorElement = editor.getElement();
+ jasmine.attachToDOM(editorElement);
+ editorElement.focus();
+ expect(registry.getActiveTextEditor()).toBe(editor);
+ disposable.dispose();
+ });
+ });
+
describe('.maintainConfig(editor)', function() {
it('does not update the editor when config settings change for unrelated scope selectors', async function() {
await atom.packages.activatePackage('language-javascript');
diff --git a/spec/text-editor-spec.js b/spec/text-editor-spec.js
index 009bdf0a3..11365d75d 100644
--- a/spec/text-editor-spec.js
+++ b/spec/text-editor-spec.js
@@ -3,6 +3,7 @@ const path = require('path');
const temp = require('temp').track();
const dedent = require('dedent');
const { clipboard } = require('electron');
+const os = require('os');
const TextEditor = require('../src/text-editor');
const TextBuffer = require('text-buffer');
const TextMateLanguageMode = require('../src/text-mate-language-mode');
@@ -2826,7 +2827,7 @@ describe('TextEditor', () => {
describe('when there is a single selection', () => {
describe('when the selection spans a single line', () => {
- describe('when there is no fold in the preceeding row', () =>
+ describe('when there is no fold in the preceding row', () =>
it('moves the line to the preceding row', () => {
expect(editor.lineTextForBufferRow(2)).toBe(
' if (items.length <= 1) return items;'
@@ -3049,8 +3050,8 @@ describe('TextEditor', () => {
});
});
- describe('when the preceeding row is a folded row', () => {
- it('moves the lines spanned by the selection to the preceeding row, but preserves the folded code', () => {
+ describe('when the preceding row is a folded row', () => {
+ it('moves the lines spanned by the selection to the preceding row, but preserves the folded code', () => {
expect(editor.lineTextForBufferRow(8)).toBe(
' return sort(left).concat(pivot).concat(sort(right));'
);
@@ -3583,7 +3584,7 @@ describe('TextEditor', () => {
});
describe('when the last line of selection does not end with a valid line ending', () => {
- it('appends line ending to last line and moves the lines spanned by the selection to the preceeding row', () => {
+ it('appends line ending to last line and moves the lines spanned by the selection to the preceding row', () => {
expect(editor.lineTextForBufferRow(9)).toBe(' };');
expect(editor.lineTextForBufferRow(10)).toBe('');
expect(editor.lineTextForBufferRow(11)).toBe(
@@ -5051,7 +5052,7 @@ describe('TextEditor', () => {
editor.cutSelectedText();
expect(buffer.lineForRow(0)).toBe('var = function () {');
expect(buffer.lineForRow(1)).toBe(' var = function(items) {');
- expect(clipboard.readText()).toBe('quicksort\nsort');
+ expect(clipboard.readText()).toBe(['quicksort', 'sort'].join(os.EOL));
});
describe('when no text is selected', () => {
@@ -5068,13 +5069,14 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(4)).toBe(
' current < pivot ? left.push(current) : right.push(current);'
);
+
expect(atom.clipboard.read()).toEqual(
[
'var quicksort = function () {',
'',
' current = items.shift();',
''
- ].join('\n')
+ ].join(os.EOL)
);
});
});
@@ -5087,7 +5089,9 @@ describe('TextEditor', () => {
[[1, 6], [1, 10]]
]);
editor.cutSelectedText();
- expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`);
+ expect(atom.clipboard.read()).toEqual(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
});
});
});
@@ -5115,7 +5119,9 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(2)).toBe(' if (items.length');
expect(buffer.lineForRow(3)).toBe(' var pivot = item');
expect(atom.clipboard.read()).toBe(
- ' <= 1) return items;\ns.shift(), current, left = [], right = [];'
+ ` <= 1) return items;${
+ os.EOL
+ }s.shift(), current, left = [], right = [];`
);
}));
@@ -5131,7 +5137,7 @@ describe('TextEditor', () => {
);
expect(buffer.lineForRow(3)).toBe(' var pivot = item');
expect(atom.clipboard.read()).toBe(
- ' <= 1) ret\ns.shift(), current, left = [], right = [];'
+ ` <= 1) ret${os.EOL}s.shift(), current, left = [], right = [];`
);
}));
});
@@ -5151,7 +5157,9 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(2)).toBe(' if (items.length');
expect(buffer.lineForRow(3)).toBe(' var pivot = item');
expect(atom.clipboard.read()).toBe(
- ' <= 1) return items;\ns.shift(), current, left = [], right = [];'
+ ` <= 1) return items;${
+ os.EOL
+ }s.shift(), current, left = [], right = [];`
);
});
});
@@ -5166,7 +5174,7 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(2)).toBe(' if (items.lengthurn items;');
expect(buffer.lineForRow(3)).toBe(' var pivot = item');
expect(atom.clipboard.read()).toBe(
- ' <= 1) ret\ns.shift(), current, left = [], right = [];'
+ ` <= 1) ret${os.EOL}s.shift(), current, left = [], right = [];`
);
});
});
@@ -5186,8 +5194,12 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(2)).toBe(
' if (items.length <= 1) return items;'
);
- expect(clipboard.readText()).toBe('quicksort\nsort\nitems');
- expect(atom.clipboard.read()).toEqual('quicksort\nsort\nitems');
+ expect(clipboard.readText()).toBe(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
+ expect(atom.clipboard.read()).toEqual(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
});
describe('when no text is selected', () => {
@@ -5202,9 +5214,9 @@ describe('TextEditor', () => {
editor.copySelectedText();
expect(atom.clipboard.read()).toEqual(
[
- ' var sort = function(items) {\n',
- ' current = items.shift();\n'
- ].join('\n')
+ ` var sort = function(items) {${os.EOL}`,
+ ` current = items.shift();${os.EOL}`
+ ].join(os.EOL)
);
expect(editor.getSelectedBufferRanges()).toEqual([
[[1, 5], [1, 5]],
@@ -5221,7 +5233,9 @@ describe('TextEditor', () => {
[[1, 6], [1, 10]]
]);
editor.copySelectedText();
- expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`);
+ expect(atom.clipboard.read()).toEqual(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
});
});
});
@@ -5241,8 +5255,12 @@ describe('TextEditor', () => {
expect(buffer.lineForRow(2)).toBe(
' if (items.length <= 1) return items;'
);
- expect(clipboard.readText()).toBe('quicksort\nsort\nitems');
- expect(atom.clipboard.read()).toEqual(`quicksort\nsort\nitems`);
+ expect(clipboard.readText()).toBe(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
+ expect(atom.clipboard.read()).toEqual(
+ ['quicksort', 'sort', 'items'].join(os.EOL)
+ );
});
});
@@ -5540,7 +5558,7 @@ describe('TextEditor', () => {
expect(editor.lineTextForBufferRow(5)).toBe(' a(x);');
expect(editor.lineTextForBufferRow(6)).toBe(' b(x);');
- expect(editor.buffer.lineEndingForRow(6)).toBe('\r\n');
+ expect(editor.buffer.lineEndingForRow(6)).toBe(os.EOL);
expect(editor.lineTextForBufferRow(7)).toBe('c(x);');
expect(editor.lineTextForBufferRow(8)).toBe(
' current = items.shift();'
diff --git a/spec/text-mate-language-mode-spec.js b/spec/text-mate-language-mode-spec.js
index 01f47a226..ad23d9114 100644
--- a/spec/text-mate-language-mode-spec.js
+++ b/spec/text-mate-language-mode-spec.js
@@ -1477,29 +1477,6 @@ describe('TextMateLanguageMode', () => {
]);
}));
- describe('.getNonWordCharacters', () => {
- it('merges the language mode non word characters with the globally set non word characters', () => {
- config.set('editor.nonWordCharacters', '»');
-
- const buffer = atom.project.bufferForPathSync('sample.js');
- const languageMode = new TextMateLanguageMode({
- buffer,
- config,
- grammar: atom.grammars.grammarForScopeName('source.js')
- });
-
- const scopedNonWords = config.getRawScopedValue(
- ['source.js'],
- 'editor.nonWordCharacters'
- );
- const globalNonWords = config.get('editor.nonWordCharacters');
-
- expect(languageMode.getNonWordCharacters([0, 0])).toEqual(
- `${scopedNonWords}${globalNonWords}`
- );
- });
- });
-
function simulateFold(ranges) {
buffer.transact(() => {
for (const range of ranges.reverse()) {
diff --git a/spec/tree-indenter-spec.js b/spec/tree-indenter-spec.js
new file mode 100644
index 000000000..8acc67f38
--- /dev/null
+++ b/spec/tree-indenter-spec.js
@@ -0,0 +1,142 @@
+const fs = require('fs');
+const path = require('path');
+const TreeSitterGrammar = require('../src/tree-sitter-grammar');
+const TreeSitterLanguageMode = require('../src/tree-sitter-language-mode');
+const TreeIndenter = require('../src/tree-indenter');
+
+const jsGrammarPath = require.resolve(
+ 'language-javascript/grammars/tree-sitter-javascript.cson'
+);
+
+const TAB_LENGTH = 2;
+
+const jsScopes = {
+ indent: {
+ array: true,
+ object: true,
+ arguments: true,
+ statement_block: true,
+ class_body: true,
+ parenthesized_expression: true,
+ jsx_element: true,
+ jsx_opening_element: true,
+ jsx_expression: true,
+ switch_body: true,
+ comment: true
+ },
+ indentExceptFirst: {
+ member_expression: true,
+ assignment_expression: true,
+ expression_statement: true,
+ variable_declarator: true,
+ lexical_declaration: true,
+ binary_expression: true,
+ jsx_self_closing_element: true
+ },
+ indentExceptFirstOrBlock: {
+ if_statement: true,
+ while_statement: true
+ },
+ types: {
+ indent: {},
+ outdent: {
+ else: true
+ }
+ }
+};
+
+describe('TreeIndenter', () => {
+ let editor, buffer, grammar;
+ let languageMode, treeIndenter;
+
+ beforeEach(async () => {
+ editor = await atom.workspace.open('');
+ buffer = editor.getBuffer();
+ editor.displayLayer.reset({ foldCharacter: '…' });
+
+ grammar = new TreeSitterGrammar(atom.grammars, jsGrammarPath, {
+ parser: 'tree-sitter-javascript'
+ });
+ });
+
+ /** load a file from disk and verify that our proposed indentation
+ is the same as it is in the file */
+ function compareFile(filename) {
+ const text = fs.readFileSync(filename);
+ buffer.setText(text);
+ languageMode = new TreeSitterLanguageMode({ buffer, grammar });
+ treeIndenter = new TreeIndenter(languageMode, jsScopes);
+
+ for (let row = 0; row < buffer.getLineCount(); row++) {
+ // get current (correct) indentation
+ const line = buffer.lineForRow(row);
+ const currentIndentation = languageMode.indentLevelForLine(
+ line,
+ TAB_LENGTH
+ );
+
+ // get suggested indentation
+ const indent = treeIndenter.suggestedIndentForBufferRow(
+ row,
+ TAB_LENGTH,
+ {}
+ );
+
+ // verify
+ if (indent !== currentIndentation) {
+ throw Error(
+ `failure in file row ${row +
+ 1}: suggested ${indent} but ${currentIndentation} is correct (${line})`
+ );
+ } else {
+ expect(indent).toEqual(currentIndentation);
+ }
+ }
+ }
+
+ describe('indentation', () => {
+ it('indents wrongly indented lines', () => {
+ buffer.setText(`if (true) {
+ a = {a: [
+ 1,
+ 'something'
+ ],
+ b: 2}
+ }`);
+ const correct = [0, 1, 3, 3, 2, 2, 0];
+ languageMode = new TreeSitterLanguageMode({ buffer, grammar });
+ treeIndenter = new TreeIndenter(languageMode, jsScopes);
+
+ for (let row = 0; row < buffer.getLineCount(); row++) {
+ // get suggested indentation
+ const indent = treeIndenter.suggestedIndentForBufferRow(
+ row,
+ TAB_LENGTH,
+ {}
+ );
+
+ // verify
+ if (indent !== correct[row]) {
+ const line = buffer.lineForRow(row).trim();
+ throw Error(
+ `failure in row ${row}: suggested ${indent} but ${
+ correct[row]
+ } is correct (${line})`
+ );
+ } else {
+ expect(indent).toEqual(correct[row]);
+ }
+ }
+ });
+
+ const fixtures = fs.readdirSync(
+ path.join(__dirname, 'fixtures', 'indentation')
+ );
+
+ fixtures.forEach(filename => {
+ it(`suggests correct indentations for ${filename}`, () => {
+ compareFile(path.join(__dirname, 'fixtures', 'indentation', filename));
+ });
+ });
+ });
+});
diff --git a/spec/tree-sitter-language-mode-spec.js b/spec/tree-sitter-language-mode-spec.js
index 18375a84e..46a38802a 100644
--- a/spec/tree-sitter-language-mode-spec.js
+++ b/spec/tree-sitter-language-mode-spec.js
@@ -831,6 +831,63 @@ describe('TreeSitterLanguageMode', () => {
]);
});
+ it('handles injections that are empty', async () => {
+ atom.grammars.addGrammar(jsGrammar);
+ atom.grammars.addGrammar(htmlGrammar);
+ buffer.setText('text = html');
+
+ const languageMode = new TreeSitterLanguageMode({
+ buffer,
+ grammar: jsGrammar,
+ grammars: atom.grammars
+ });
+ buffer.setLanguageMode(languageMode);
+
+ expectTokensToEqual(editor, [[{ text: 'text = html', scopes: [] }]]);
+
+ buffer.append(' ``;');
+ expectTokensToEqual(editor, [
+ [
+ { text: 'text = ', scopes: [] },
+ { text: 'html', scopes: ['function'] },
+ { text: ' ', scopes: [] },
+ { text: '``', scopes: ['string'] },
+ { text: ';', scopes: [] }
+ ]
+ ]);
+
+ buffer.insert(
+ { row: 0, column: buffer.getText().lastIndexOf('`') },
+ ''
+ );
+ await nextHighlightingUpdate(languageMode);
+ expectTokensToEqual(editor, [
+ [
+ { text: 'text = ', scopes: [] },
+ { text: 'html', scopes: ['function'] },
+ { text: ' ', scopes: [] },
+ { text: '`', scopes: ['string'] },
+ { text: '<', scopes: ['string', 'html'] },
+ { text: 'div', scopes: ['string', 'html', 'tag'] },
+ { text: '>', scopes: ['string', 'html'] },
+ { text: '`', scopes: ['string'] },
+ { text: ';', scopes: [] }
+ ]
+ ]);
+
+ buffer.undo();
+ await nextHighlightingUpdate(languageMode);
+ expectTokensToEqual(editor, [
+ [
+ { text: 'text = ', scopes: [] },
+ { text: 'html', scopes: ['function'] },
+ { text: ' ', scopes: [] },
+ { text: '``', scopes: ['string'] },
+ { text: ';', scopes: [] }
+ ]
+ ]);
+ });
+
it('terminates comment token at the end of an injection, so that the next injection is NOT a continuation of the comment', async () => {
const ejsGrammar = new TreeSitterGrammar(
atom.grammars,
@@ -1546,7 +1603,7 @@ describe('TreeSitterLanguageMode', () => {
type: 'else',
// There are double quotes around the `else` type. This indicates that
- // we're targetting an *anonymous* node in the syntax tree. The fold
+ // we're targeting an *anonymous* node in the syntax tree. The fold
// should start at the token representing the literal string "else",
// not at an `else` node.
start: { type: '"else"' }
diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js
index 78a798890..f99c961fa 100644
--- a/spec/update-process-env-spec.js
+++ b/spec/update-process-env-spec.js
@@ -7,7 +7,6 @@ import {
updateProcessEnv,
shouldGetEnvFromShell
} from '../src/update-process-env';
-import dedent from 'dedent';
import mockSpawn from 'mock-spawn';
const temp = require('temp').track();
@@ -259,19 +258,19 @@ describe('updateProcessEnv(launchEnv)', function() {
spawn.setDefault(
spawn.simple(
0,
- dedent`
- FOO=BAR=BAZ=QUUX
- TERM=xterm-something
- PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path
- `
+ 'FOO=BAR=BAZ=QUUX\0MULTILINE\nNAME=multiline\nvalue\0TERM=xterm-something\0PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path'
)
);
await updateProcessEnv(process.env);
expect(spawn.calls.length).toBe(1);
expect(spawn.calls[0].command).toBe('/my/custom/bash');
- expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']);
+ expect(spawn.calls[0].args).toEqual([
+ '-ilc',
+ 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\''
+ ]);
expect(process.env).toEqual({
FOO: 'BAR=BAZ=QUUX',
+ 'MULTILINE\nNAME': 'multiline\nvalue',
TERM: 'xterm-something',
PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path'
});
@@ -290,19 +289,19 @@ describe('updateProcessEnv(launchEnv)', function() {
spawn.setDefault(
spawn.simple(
0,
- dedent`
- FOO=BAR=BAZ=QUUX
- TERM=xterm-something
- PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path
- `
+ 'FOO=BAR=BAZ=QUUX\0MULTILINE\nNAME=multiline\nvalue\0TERM=xterm-something\0PATH=/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path'
)
);
await updateProcessEnv(process.env);
expect(spawn.calls.length).toBe(1);
expect(spawn.calls[0].command).toBe('/my/custom/bash');
- expect(spawn.calls[0].args).toEqual(['-ilc', 'command env']);
+ expect(spawn.calls[0].args).toEqual([
+ '-ilc',
+ 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\''
+ ]);
expect(process.env).toEqual({
FOO: 'BAR=BAZ=QUUX',
+ 'MULTILINE\nNAME': 'multiline\nvalue',
TERM: 'xterm-something',
PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/crazy/path'
});
diff --git a/src/application-delegate.js b/src/application-delegate.js
index faca76358..f3c4b60c9 100644
--- a/src/application-delegate.js
+++ b/src/application-delegate.js
@@ -46,7 +46,7 @@ module.exports = class ApplicationDelegate {
async getTemporaryWindowState() {
const stateJSON = await ipcHelpers.call('get-temporary-window-state');
- return JSON.parse(stateJSON);
+ return stateJSON && JSON.parse(stateJSON);
}
setTemporaryWindowState(state) {
@@ -231,7 +231,7 @@ module.exports = class ApplicationDelegate {
remote.dialog
.showMessageBox(remote.getCurrentWindow(), options)
.then(result => {
- callback(result.response);
+ callback(result.response, result.checkboxChecked);
});
} else {
// Legacy sync version: options can only have `message`,
diff --git a/src/atom-environment.js b/src/atom-environment.js
index 4d7e627a2..ac7196437 100644
--- a/src/atom-environment.js
+++ b/src/atom-environment.js
@@ -1036,7 +1036,12 @@ class AtomEnvironment {
commands: this.commands,
history: this.history,
config: this.config,
- open: paths => this.open({ pathsToOpen: paths })
+ open: paths =>
+ this.open({
+ pathsToOpen: paths,
+ safeMode: this.inSafeMode(),
+ devMode: this.inDevMode()
+ })
});
this.reopenProjectMenuManager.update();
});
diff --git a/src/babel.js b/src/babel.js
index 151fe732a..e8b50d7a4 100644
--- a/src/babel.js
+++ b/src/babel.js
@@ -1,13 +1,13 @@
'use strict';
-var crypto = require('crypto');
-var path = require('path');
-var defaultOptions = require('./babel.config.js');
+const crypto = require('crypto');
+const path = require('path');
+const defaultOptions = require('./babel.config.js');
-var babel = null;
-var babelVersionDirectory = null;
+let babel = null;
+let babelVersionDirectory = null;
-var PREFIXES = [
+const PREFIXES = [
'/** @babel */',
'"use babel"',
"'use babel'",
@@ -15,7 +15,7 @@ var PREFIXES = [
'// @flow'
];
-var PREFIX_LENGTH = Math.max.apply(
+const PREFIX_LENGTH = Math.max.apply(
Math,
PREFIXES.map(function(prefix) {
return prefix.length;
@@ -23,7 +23,7 @@ var PREFIX_LENGTH = Math.max.apply(
);
exports.shouldCompile = function(sourceCode) {
- var start = sourceCode.substr(0, PREFIX_LENGTH);
+ const start = sourceCode.substr(0, PREFIX_LENGTH);
return PREFIXES.some(function(prefix) {
return start.indexOf(prefix) === 0;
});
@@ -31,7 +31,7 @@ exports.shouldCompile = function(sourceCode) {
exports.getCachePath = function(sourceCode) {
if (babelVersionDirectory == null) {
- var babelVersion = require('@babel/core/package.json').version;
+ const babelVersion = require('@babel/core/package.json').version;
babelVersionDirectory = path.join(
'js',
'babel',
@@ -56,8 +56,8 @@ exports.compile = function(sourceCode, filePath) {
filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/');
}
- var options = { filename: filePath };
- for (var key in defaultOptions) {
+ const options = { filename: filePath };
+ for (const key in defaultOptions) {
options[key] = defaultOptions[key];
}
return babel.transformSync(sourceCode, options).code;
diff --git a/src/clipboard.js b/src/clipboard.js
index 9fe7938a0..e4f40851b 100644
--- a/src/clipboard.js
+++ b/src/clipboard.js
@@ -42,6 +42,8 @@ module.exports = class Clipboard {
// * `text` The {String} to store.
// * `metadata` (optional) The additional info to associate with the text.
write(text, metadata) {
+ text = text.replace(/\r?\n/g, process.platform === 'win32' ? '\r\n' : '\n');
+
this.signatureForMetadata = this.md5(text);
this.metadata = metadata;
clipboard.writeText(text);
diff --git a/src/coffee-script.js b/src/coffee-script.js
index 389ef5b3b..dcd93ca2e 100644
--- a/src/coffee-script.js
+++ b/src/coffee-script.js
@@ -1,8 +1,8 @@
'use strict';
-var crypto = require('crypto');
-var path = require('path');
-var CoffeeScript = null;
+const crypto = require('crypto');
+const path = require('path');
+let CoffeeScript = null;
exports.shouldCompile = function() {
return true;
@@ -20,7 +20,7 @@ exports.getCachePath = function(sourceCode) {
exports.compile = function(sourceCode, filePath) {
if (!CoffeeScript) {
- var previousPrepareStackTrace = Error.prepareStackTrace;
+ const previousPrepareStackTrace = Error.prepareStackTrace;
CoffeeScript = require('coffee-script');
// When it loads, coffee-script reassigns Error.prepareStackTrace. We have
@@ -33,7 +33,7 @@ exports.compile = function(sourceCode, filePath) {
filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/');
}
- var output = CoffeeScript.compile(sourceCode, {
+ const output = CoffeeScript.compile(sourceCode, {
filename: filePath,
sourceFiles: [filePath],
inlineMap: true
diff --git a/src/compile-cache.js b/src/compile-cache.js
index 2e35760ff..cf7e6711c 100644
--- a/src/compile-cache.js
+++ b/src/compile-cache.js
@@ -1,20 +1,17 @@
'use strict';
-// For now, we're not using babel or ES6 features like `let` and `const` in
-// this file, because `apm` requires this file directly in order to pre-warm
-// Atom's compile-cache when installing or updating packages, using an older
-// version of node.js
+// Atom's compile-cache when installing or updating packages, called by apm's Node-js
-var path = require('path');
-var fs = require('fs-plus');
-var sourceMapSupport = require('@atom/source-map-support');
+const path = require('path');
+const fs = require('fs-plus');
+const sourceMapSupport = require('@atom/source-map-support');
-var PackageTranspilationRegistry = require('./package-transpilation-registry');
-var CSON = null;
+const PackageTranspilationRegistry = require('./package-transpilation-registry');
+let CSON = null;
-var packageTranspilationRegistry = new PackageTranspilationRegistry();
+const packageTranspilationRegistry = new PackageTranspilationRegistry();
-var COMPILERS = {
+const COMPILERS = {
'.js': packageTranspilationRegistry.wrapTranspiler(require('./babel')),
'.ts': packageTranspilationRegistry.wrapTranspiler(require('./typescript')),
'.tsx': packageTranspilationRegistry.wrapTranspiler(require('./typescript')),
@@ -43,11 +40,11 @@ exports.removeTranspilerConfigForPath = function(packagePath) {
packageTranspilationRegistry.removeTranspilerConfigForPath(packagePath);
};
-var cacheStats = {};
-var cacheDirectory = null;
+const cacheStats = {};
+let cacheDirectory = null;
exports.setAtomHomeDirectory = function(atomHome) {
- var cacheDir = path.join(atomHome, 'compile-cache');
+ let cacheDir = path.join(atomHome, 'compile-cache');
if (
process.env.USER === 'root' &&
process.env.SUDO_USER &&
@@ -68,7 +65,7 @@ exports.getCacheDirectory = function() {
exports.addPathToCache = function(filePath, atomHome) {
this.setAtomHomeDirectory(atomHome);
- var extension = path.extname(filePath);
+ const extension = path.extname(filePath);
if (extension === '.cson') {
if (!CSON) {
@@ -77,7 +74,7 @@ exports.addPathToCache = function(filePath, atomHome) {
}
return CSON.readFileSync(filePath);
} else {
- var compiler = COMPILERS[extension];
+ const compiler = COMPILERS[extension];
if (compiler) {
return compileFileAtPath(compiler, filePath, extension);
}
@@ -98,10 +95,10 @@ exports.resetCacheStats = function() {
};
function compileFileAtPath(compiler, filePath, extension) {
- var sourceCode = fs.readFileSync(filePath, 'utf8');
+ const sourceCode = fs.readFileSync(filePath, 'utf8');
if (compiler.shouldCompile(sourceCode, filePath)) {
- var cachePath = compiler.getCachePath(sourceCode, filePath);
- var compiledCode = readCachedJavaScript(cachePath);
+ const cachePath = compiler.getCachePath(sourceCode, filePath);
+ let compiledCode = readCachedJavaScript(cachePath);
if (compiledCode != null) {
cacheStats[extension].hits++;
} else {
@@ -115,7 +112,7 @@ function compileFileAtPath(compiler, filePath, extension) {
}
function readCachedJavaScript(relativeCachePath) {
- var cachePath = path.join(cacheDirectory, relativeCachePath);
+ const cachePath = path.join(cacheDirectory, relativeCachePath);
if (fs.isFileSync(cachePath)) {
try {
return fs.readFileSync(cachePath, 'utf8');
@@ -125,11 +122,11 @@ function readCachedJavaScript(relativeCachePath) {
}
function writeCachedJavaScript(relativeCachePath, code) {
- var cachePath = path.join(cacheDirectory, relativeCachePath);
+ const cachePath = path.join(cacheDirectory, relativeCachePath);
fs.writeFileSync(cachePath, code, 'utf8');
}
-var INLINE_SOURCE_MAP_REGEXP = /\/\/[#@]\s*sourceMappingURL=([^'"\n]+)\s*$/gm;
+const INLINE_SOURCE_MAP_REGEXP = /\/\/[#@]\s*sourceMappingURL=([^'"\n]+)\s*$/gm;
exports.install = function(resourcesPath, nodeRequire) {
const snapshotSourceMapConsumer = {
@@ -166,7 +163,7 @@ exports.install = function(resourcesPath, nodeRequire) {
return null;
}
- var compiler = COMPILERS[path.extname(filePath)];
+ let compiler = COMPILERS[path.extname(filePath)];
if (!compiler) compiler = COMPILERS['.js'];
try {
@@ -182,7 +179,7 @@ exports.install = function(resourcesPath, nodeRequire) {
return null;
}
- var match, lastMatch;
+ let match, lastMatch;
INLINE_SOURCE_MAP_REGEXP.lastIndex = 0;
while ((match = INLINE_SOURCE_MAP_REGEXP.exec(fileData))) {
lastMatch = match;
@@ -191,8 +188,8 @@ exports.install = function(resourcesPath, nodeRequire) {
return null;
}
- var sourceMappingURL = lastMatch[1];
- var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);
+ const sourceMappingURL = lastMatch[1];
+ const rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);
try {
var sourceMap = JSON.parse(Buffer.from(rawData, 'base64'));
@@ -208,7 +205,7 @@ exports.install = function(resourcesPath, nodeRequire) {
}
});
- var prepareStackTraceWithSourceMapping = Error.prepareStackTrace;
+ const prepareStackTraceWithSourceMapping = Error.prepareStackTrace;
var prepareStackTrace = prepareStackTraceWithSourceMapping;
function prepareStackTraceWithRawStackAssignment(error, frames) {
@@ -245,13 +242,13 @@ exports.install = function(resourcesPath, nodeRequire) {
};
Object.keys(COMPILERS).forEach(function(extension) {
- var compiler = COMPILERS[extension];
+ const compiler = COMPILERS[extension];
Object.defineProperty(nodeRequire.extensions, extension, {
enumerable: true,
writable: false,
value: function(module, filePath) {
- var code = compileFileAtPath(compiler, filePath, extension);
+ const code = compileFileAtPath(compiler, filePath, extension);
return module._compile(code, filePath);
}
});
diff --git a/src/config-file.js b/src/config-file.js
index 798be4f5f..098178d42 100644
--- a/src/config-file.js
+++ b/src/config-file.js
@@ -5,7 +5,7 @@ const { Disposable, Emitter } = require('event-kit');
const { watchPath } = require('./path-watcher');
const CSON = require('season');
const Path = require('path');
-const async = require('async');
+const asyncQueue = require('async/queue');
const EVENT_TYPES = new Set(['created', 'modified', 'renamed']);
@@ -32,16 +32,16 @@ module.exports = class ConfigFile {
this.reloadCallbacks = [];
// Use a queue to prevent multiple concurrent write to the same file.
- const writeQueue = async.queue((data, callback) =>
+ const writeQueue = asyncQueue((data, callback) =>
CSON.writeFile(this.path, data, error => {
if (error) {
this.emitter.emit(
'did-error',
dedent`
- Failed to write \`${Path.basename(this.path)}\`.
+ Failed to write \`${Path.basename(this.path)}\`.
- ${error.message}
- `
+ ${error.message}
+ `
);
}
callback();
diff --git a/src/config-schema.js b/src/config-schema.js
index 07ddf4c13..f1a8ff3b7 100644
--- a/src/config-schema.js
+++ b/src/config-schema.js
@@ -660,4 +660,12 @@ if (process.platform === 'darwin') {
};
}
+if (process.platform === 'linux') {
+ configSchema.editor.properties.selectionClipboard = {
+ type: 'boolean',
+ default: true,
+ description: 'Enable pasting on middle mouse button click'
+ };
+}
+
module.exports = configSchema;
diff --git a/src/context-menu-manager.coffee b/src/context-menu-manager.coffee
index 99fc4e94c..78c7862c2 100644
--- a/src/context-menu-manager.coffee
+++ b/src/context-menu-manager.coffee
@@ -109,6 +109,7 @@ class ContextMenuManager
# with the following argument:
# * `event` The click event that deployed the context menu.
#
+ # * `id` (internal) A {String} containing the menu item's id.
# Returns a {Disposable} on which `.dispose()` can be called to remove the
# added menu items.
add: (itemsBySelector, throwOnInvalidSelector = true) ->
diff --git a/src/delegated-listener.js b/src/delegated-listener.js
index c977912e8..f2cd33b4d 100644
--- a/src/delegated-listener.js
+++ b/src/delegated-listener.js
@@ -1,7 +1,7 @@
const EventKit = require('event-kit');
module.exports = function listen(element, eventName, selector, handler) {
- var innerHandler = function(event) {
+ const innerHandler = function(event) {
if (selector) {
var currentTarget = event.target;
while (currentTarget) {
diff --git a/src/git-repository-provider.js b/src/git-repository-provider.js
index afd1d0682..37d811399 100644
--- a/src/git-repository-provider.js
+++ b/src/git-repository-provider.js
@@ -81,7 +81,7 @@ async function findGitDirectory(directory) {
if (
typeof gitDir.exists === 'function' &&
(await gitDir.exists()) &&
- isValidGitDirectory(gitDir)
+ (await isValidGitDirectory(gitDir))
) {
return gitDir;
} else if (directory.isRoot()) {
diff --git a/src/grammar-registry.js b/src/grammar-registry.js
index c5973e1aa..aa530b6a9 100644
--- a/src/grammar-registry.js
+++ b/src/grammar-registry.js
@@ -169,7 +169,7 @@ module.exports = class GrammarRegistry {
}
// Extended: Get the `languageId` that has been explicitly assigned to
- // to the given buffer, if any.
+ // the given buffer, if any.
//
// Returns a {String} id of the language
getAssignedLanguageId(buffer) {
diff --git a/src/history-manager.js b/src/history-manager.js
index ba9f291cc..fce540654 100644
--- a/src/history-manager.js
+++ b/src/history-manager.js
@@ -89,7 +89,7 @@ class HistoryManager {
}
getProject(paths) {
- for (var i = 0; i < this.projects.length; i++) {
+ for (let i = 0; i < this.projects.length; i++) {
if (arrayEquivalent(paths, this.projects[i].paths)) {
return this.projects[i];
}
@@ -121,7 +121,7 @@ class HistoryManager {
function arrayEquivalent(a, b) {
if (a.length !== b.length) return false;
- for (var i = 0; i < a.length; i++) {
+ for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return false;
}
return true;
diff --git a/src/initialize-test-window.coffee b/src/initialize-test-window.coffee
deleted file mode 100644
index 59a910c2b..000000000
--- a/src/initialize-test-window.coffee
+++ /dev/null
@@ -1,112 +0,0 @@
-ipcHelpers = require './ipc-helpers'
-
-cloneObject = (object) ->
- clone = {}
- clone[key] = value for key, value of object
- clone
-
-module.exports = ({blobStore}) ->
- {remote} = require 'electron'
-
- exitWithStatusCode = (status) ->
- remote.app.emit('will-quit')
- remote.process.exit(status)
-
- try
- path = require 'path'
- {ipcRenderer} = require 'electron'
- getWindowLoadSettings = require './get-window-load-settings'
- CompileCache = require './compile-cache'
- AtomEnvironment = require '../src/atom-environment'
- ApplicationDelegate = require '../src/application-delegate'
- Clipboard = require '../src/clipboard'
- TextEditor = require '../src/text-editor'
- {updateProcessEnv} = require('./update-process-env')
- require './electron-shims'
-
- ipcRenderer.on 'environment', (event, env) ->
- updateProcessEnv(env)
-
- {testRunnerPath, legacyTestRunnerPath, headless, logFile, testPaths, env} = getWindowLoadSettings()
-
- if headless
- # Install console functions that output to stdout and stderr.
- util = require 'util'
-
- Object.defineProperties process,
- stdout: {value: remote.process.stdout}
- stderr: {value: remote.process.stderr}
-
- console.log = (args...) -> process.stdout.write "#{util.format(args...)}\n"
- console.error = (args...) -> process.stderr.write "#{util.format(args...)}\n"
- else
- # Show window synchronously so a focusout doesn't fire on input elements
- # that are focused in the very first spec run.
- remote.getCurrentWindow().show()
-
- handleKeydown = (event) ->
- # Reload: cmd-r / ctrl-r
- if (event.metaKey or event.ctrlKey) and event.keyCode is 82
- ipcHelpers.call('window-method', 'reload')
-
- # Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows)
- if event.keyCode is 73 and (
- (process.platform is 'darwin' and event.metaKey and event.altKey) or
- (process.platform isnt 'darwin' and event.ctrlKey and event.shiftKey))
- ipcHelpers.call('window-method', 'toggleDevTools')
-
- # Close: cmd-w / ctrl-w
- if (event.metaKey or event.ctrlKey) and event.keyCode is 87
- ipcHelpers.call('window-method', 'close')
-
- # Copy: cmd-c / ctrl-c
- if (event.metaKey or event.ctrlKey) and event.keyCode is 67
- atom.clipboard.write(window.getSelection().toString())
-
- window.addEventListener('keydown', handleKeydown, {capture: true})
-
- # Add 'exports' to module search path.
- exportsPath = path.join(getWindowLoadSettings().resourcePath, 'exports')
- require('module').globalPaths.push(exportsPath)
- process.env.NODE_PATH = exportsPath # Set NODE_PATH env variable since tasks may need it.
-
- updateProcessEnv(env)
-
- # Set up optional transpilation for packages under test if any
- FindParentDir = require 'find-parent-dir'
- if packageRoot = FindParentDir.sync(testPaths[0], 'package.json')
- packageMetadata = require(path.join(packageRoot, 'package.json'))
- if packageMetadata.atomTranspilers
- CompileCache.addTranspilerConfigForPath(packageRoot, packageMetadata.name, packageMetadata, packageMetadata.atomTranspilers)
-
- document.title = "Spec Suite"
-
- clipboard = new Clipboard
- TextEditor.setClipboard(clipboard)
- TextEditor.viewForItem = (item) -> atom.views.getView(item)
-
- testRunner = require(testRunnerPath)
- legacyTestRunner = require(legacyTestRunnerPath)
- buildDefaultApplicationDelegate = -> new ApplicationDelegate()
- buildAtomEnvironment = (params) ->
- params = cloneObject(params)
- params.clipboard = clipboard unless params.hasOwnProperty("clipboard")
- params.blobStore = blobStore unless params.hasOwnProperty("blobStore")
- params.onlyLoadBaseStyleSheets = true unless params.hasOwnProperty("onlyLoadBaseStyleSheets")
- atomEnvironment = new AtomEnvironment(params)
- atomEnvironment.initialize(params)
- TextEditor.setScheduler(atomEnvironment.views)
- atomEnvironment
-
- promise = testRunner({
- logFile, headless, testPaths, buildAtomEnvironment, buildDefaultApplicationDelegate, legacyTestRunner
- })
-
- promise.then (statusCode) ->
- exitWithStatusCode(statusCode) if getWindowLoadSettings().headless
- catch error
- if getWindowLoadSettings().headless
- console.error(error.stack ? error)
- exitWithStatusCode(1)
- else
- throw error
diff --git a/src/initialize-test-window.js b/src/initialize-test-window.js
new file mode 100644
index 000000000..1d5098b4d
--- /dev/null
+++ b/src/initialize-test-window.js
@@ -0,0 +1,161 @@
+const ipcHelpers = require('./ipc-helpers');
+const { requireModule } = require('./module-utils');
+
+function cloneObject(object) {
+ const clone = {};
+ for (const key in object) {
+ clone[key] = object[key];
+ }
+ return clone;
+}
+
+module.exports = async function({ blobStore }) {
+ const { remote } = require('electron');
+ const getWindowLoadSettings = require('./get-window-load-settings');
+
+ const exitWithStatusCode = function(status) {
+ remote.app.emit('will-quit');
+ remote.process.exit(status);
+ };
+
+ try {
+ const path = require('path');
+ const { ipcRenderer } = require('electron');
+ const CompileCache = require('./compile-cache');
+ const AtomEnvironment = require('../src/atom-environment');
+ const ApplicationDelegate = require('../src/application-delegate');
+ const Clipboard = require('../src/clipboard');
+ const TextEditor = require('../src/text-editor');
+ const { updateProcessEnv } = require('./update-process-env');
+ require('./electron-shims');
+
+ ipcRenderer.on('environment', (event, env) => updateProcessEnv(env));
+
+ const {
+ testRunnerPath,
+ legacyTestRunnerPath,
+ headless,
+ logFile,
+ testPaths,
+ env
+ } = getWindowLoadSettings();
+
+ if (headless) {
+ // Install console functions that output to stdout and stderr.
+ const util = require('util');
+
+ Object.defineProperties(process, {
+ stdout: { value: remote.process.stdout },
+ stderr: { value: remote.process.stderr }
+ });
+
+ console.log = (...args) =>
+ process.stdout.write(`${util.format(...args)}\n`);
+ console.error = (...args) =>
+ process.stderr.write(`${util.format(...args)}\n`);
+ } else {
+ // Show window synchronously so a focusout doesn't fire on input elements
+ // that are focused in the very first spec run.
+ remote.getCurrentWindow().show();
+ }
+
+ const handleKeydown = function(event) {
+ // Reload: cmd-r / ctrl-r
+ if ((event.metaKey || event.ctrlKey) && event.keyCode === 82) {
+ ipcHelpers.call('window-method', 'reload');
+ }
+
+ // Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows)
+ if (
+ event.keyCode === 73 &&
+ ((process.platform === 'darwin' && event.metaKey && event.altKey) ||
+ (process.platform !== 'darwin' && event.ctrlKey && event.shiftKey))
+ ) {
+ ipcHelpers.call('window-method', 'toggleDevTools');
+ }
+
+ // Close: cmd-w / ctrl-w
+ if ((event.metaKey || event.ctrlKey) && event.keyCode === 87) {
+ ipcHelpers.call('window-method', 'close');
+ }
+
+ // Copy: cmd-c / ctrl-c
+ if ((event.metaKey || event.ctrlKey) && event.keyCode === 67) {
+ atom.clipboard.write(window.getSelection().toString());
+ }
+ };
+
+ window.addEventListener('keydown', handleKeydown, { capture: true });
+
+ // Add 'exports' to module search path.
+ const exportsPath = path.join(
+ getWindowLoadSettings().resourcePath,
+ 'exports'
+ );
+ require('module').globalPaths.push(exportsPath);
+ process.env.NODE_PATH = exportsPath; // Set NODE_PATH env variable since tasks may need it.
+
+ updateProcessEnv(env);
+
+ // Set up optional transpilation for packages under test if any
+ const FindParentDir = require('find-parent-dir');
+ const packageRoot = FindParentDir.sync(testPaths[0], 'package.json');
+ if (packageRoot) {
+ const packageMetadata = require(path.join(packageRoot, 'package.json'));
+ if (packageMetadata.atomTranspilers) {
+ CompileCache.addTranspilerConfigForPath(
+ packageRoot,
+ packageMetadata.name,
+ packageMetadata,
+ packageMetadata.atomTranspilers
+ );
+ }
+ }
+
+ document.title = 'Spec Suite';
+
+ const clipboard = new Clipboard();
+ TextEditor.setClipboard(clipboard);
+ TextEditor.viewForItem = item => atom.views.getView(item);
+
+ const testRunner = requireModule(testRunnerPath);
+ const legacyTestRunner = require(legacyTestRunnerPath);
+ const buildDefaultApplicationDelegate = () => new ApplicationDelegate();
+ const buildAtomEnvironment = function(params) {
+ params = cloneObject(params);
+ if (!params.hasOwnProperty('clipboard')) {
+ params.clipboard = clipboard;
+ }
+ if (!params.hasOwnProperty('blobStore')) {
+ params.blobStore = blobStore;
+ }
+ if (!params.hasOwnProperty('onlyLoadBaseStyleSheets')) {
+ params.onlyLoadBaseStyleSheets = true;
+ }
+ const atomEnvironment = new AtomEnvironment(params);
+ atomEnvironment.initialize(params);
+ TextEditor.setScheduler(atomEnvironment.views);
+ return atomEnvironment;
+ };
+
+ const statusCode = await testRunner({
+ logFile,
+ headless,
+ testPaths,
+ buildAtomEnvironment,
+ buildDefaultApplicationDelegate,
+ legacyTestRunner
+ });
+
+ if (getWindowLoadSettings().headless) {
+ exitWithStatusCode(statusCode);
+ }
+ } catch (error) {
+ if (getWindowLoadSettings().headless) {
+ console.error(error.stack || error);
+ exitWithStatusCode(1);
+ } else {
+ throw error;
+ }
+ }
+};
diff --git a/src/main-process/application-menu.js b/src/main-process/application-menu.js
index e2faa5e76..7a8d6d959 100644
--- a/src/main-process/application-menu.js
+++ b/src/main-process/application-menu.js
@@ -115,16 +115,16 @@ module.exports = class ApplicationMenu {
showUpdateMenuItem(state) {
const items = this.flattenMenuItems(this.menu);
const checkForUpdateItem = items.find(
- ({ label }) => label === 'Check for Update'
+ ({ id }) => id === 'Check for Update'
);
const checkingForUpdateItem = items.find(
- ({ label }) => label === 'Checking for Update'
+ ({ id }) => id === 'Checking for Update'
);
const downloadingUpdateItem = items.find(
- ({ label }) => label === 'Downloading Update'
+ ({ id }) => id === 'Downloading Update'
);
const installUpdateItem = items.find(
- ({ label }) => label === 'Restart and Install Update'
+ ({ id }) => id === 'Restart and Install Update'
);
if (
@@ -165,13 +165,16 @@ module.exports = class ApplicationMenu {
return [
{
label: 'Atom',
+ id: 'Atom',
submenu: [
{
label: 'Check for Update',
+ id: 'Check for Update',
metadata: { autoUpdate: true }
},
{
label: 'Reload',
+ id: 'Reload',
accelerator: 'Command+R',
click: () => {
const window = this.focusedWindow();
@@ -180,6 +183,7 @@ module.exports = class ApplicationMenu {
},
{
label: 'Close Window',
+ id: 'Close Window',
accelerator: 'Command+Shift+W',
click: () => {
const window = this.focusedWindow();
@@ -188,6 +192,7 @@ module.exports = class ApplicationMenu {
},
{
label: 'Toggle Dev Tools',
+ id: 'Toggle Dev Tools',
accelerator: 'Command+Alt+I',
click: () => {
const window = this.focusedWindow();
@@ -196,6 +201,7 @@ module.exports = class ApplicationMenu {
},
{
label: 'Quit',
+ id: 'Quit',
accelerator: 'Command+Q',
click: () => app.quit()
}
diff --git a/src/main-process/atom-application.js b/src/main-process/atom-application.js
index 5c9fbb253..f05d49244 100644
--- a/src/main-process/atom-application.js
+++ b/src/main-process/atom-application.js
@@ -102,17 +102,7 @@ const createSocketSecret = async atomVersion => {
const encryptOptions = (options, secret) => {
const message = JSON.stringify(options);
-
- // Even if the following IV is not cryptographically secure, there's a really good chance
- // it's going to be unique between executions which is the requirement for GCM.
- // We're not using `crypto.randomBytes()` because in electron v2, that API is really slow
- // on Windows machines, which affects the startup time of Atom.
- // TodoElectronIssue: Once we upgrade to electron v3 we can use `crypto.randomBytes()`
- const initVectorHash = crypto.createHash('sha1');
- initVectorHash.update(Date.now() + '');
- initVectorHash.update(Math.random() + '');
- const initVector = initVectorHash.digest();
-
+ const initVector = crypto.randomBytes(16); // AES uses 16 bytes for iV
const cipher = crypto.createCipheriv('aes-256-gcm', secret, initVector);
let content = cipher.update(message, 'utf8', 'hex');
@@ -143,6 +133,13 @@ const decryptOptions = (optionsMessage, secret) => {
return JSON.parse(message);
};
+ipcMain.handle('isDefaultProtocolClient', (_, { protocol, path, args }) => {
+ return app.isDefaultProtocolClient(protocol, path, args);
+});
+
+ipcMain.handle('setAsDefaultProtocolClient', (_, { protocol, path, args }) => {
+ return app.setAsDefaultProtocolClient(protocol, path, args);
+});
// The application's singleton class.
//
// It's the entry point into the Atom application and maintains the global state
@@ -259,16 +256,6 @@ module.exports = class AtomApplication extends EventEmitter {
global.atomApplication = this;
- // DEPRECATED: This can be removed at some point (added in 1.13)
- // It converts `useCustomTitleBar: true` to `titleBar: "custom"`
- if (
- process.platform === 'darwin' &&
- this.config.get('core.useCustomTitleBar')
- ) {
- this.config.unset('core.useCustomTitleBar');
- this.config.set('core.titleBar', 'custom');
- }
-
this.applicationMenu = new ApplicationMenu(
this.version,
this.autoUpdateManager
@@ -278,11 +265,6 @@ module.exports = class AtomApplication extends EventEmitter {
this.safeMode
);
- // Don't await for the following method to avoid delaying the opening of a new window.
- // (we await it just after opening it).
- // We need to do this because `listenForArgumentsFromNewProcess()` calls `crypto.randomBytes`,
- // which is really slow on Windows machines.
- // (TodoElectronIssue: This got fixed in electron v3: https://github.com/electron/electron/issues/2073).
let socketServerPromise;
if (options.test || options.benchmark || options.benchmarkTest) {
socketServerPromise = Promise.resolve();
@@ -290,11 +272,11 @@ module.exports = class AtomApplication extends EventEmitter {
socketServerPromise = this.listenForArgumentsFromNewProcess();
}
+ await socketServerPromise;
this.setupDockMenu();
const result = await this.launch(options);
this.autoUpdateManager.initialize();
- await socketServerPromise;
StartupTime.addMarker('main-process:atom-application:initialize:end');
@@ -454,14 +436,9 @@ module.exports = class AtomApplication extends EventEmitter {
// Public: Removes the {AtomWindow} from the global window list.
removeWindow(window) {
this.windowStack.removeWindow(window);
- if (this.getAllWindows().length === 0) {
- if (this.applicationMenu != null) {
- this.applicationMenu.enableWindowSpecificItems(false);
- }
- if (['win32', 'linux'].includes(process.platform)) {
- app.quit();
- return;
- }
+ if (this.getAllWindows().length === 0 && process.platform !== 'darwin') {
+ app.quit();
+ return;
}
if (!window.isSpec) this.saveCurrentWindowOptions(true);
}
@@ -610,7 +587,7 @@ module.exports = class AtomApplication extends EventEmitter {
shell.openExternal('http://flight-manual.atom.io')
);
this.on('application:open-discussions', () =>
- shell.openExternal('https://discuss.atom.io')
+ shell.openExternal('https://github.com/atom/atom/discussions')
);
this.on('application:open-faq', () =>
shell.openExternal('https://atom.io/faq')
@@ -639,6 +616,12 @@ module.exports = class AtomApplication extends EventEmitter {
if (process.platform === 'darwin') {
this.on('application:reopen-project', ({ paths }) => {
+ const focusedWindow = this.focusedWindow();
+ if (focusedWindow) {
+ const { safeMode, devMode } = focusedWindow;
+ this.openPaths({ pathsToOpen: paths, safeMode, devMode });
+ return;
+ }
this.openPaths({ pathsToOpen: paths });
});
@@ -773,6 +756,19 @@ module.exports = class AtomApplication extends EventEmitter {
})
);
+ // See: https://www.electronjs.org/docs/api/app#event-window-all-closed
+ this.disposable.add(
+ ipcHelpers.on(app, 'window-all-closed', () => {
+ if (this.applicationMenu != null) {
+ this.applicationMenu.enableWindowSpecificItems(false);
+ }
+ // Don't quit when the last window is closed on macOS.
+ if (process.platform !== 'darwin') {
+ app.quit();
+ }
+ })
+ );
+
// Triggered by the 'open-file' event from Electron:
// https://electronjs.org/docs/api/app#event-open-file-macos
// For example, this is fired when a file is dragged and dropped onto the Atom application icon in the dock.
@@ -809,11 +805,10 @@ module.exports = class AtomApplication extends EventEmitter {
);
this.disposable.add(
- ipcHelpers.on(ipcMain, 'resolve-proxy', (event, requestId, url) => {
- event.sender.session.resolveProxy(url, proxy => {
- if (!event.sender.isDestroyed())
- event.sender.send('did-resolve-proxy', requestId, proxy);
- });
+ ipcHelpers.on(ipcMain, 'resolve-proxy', async (event, requestId, url) => {
+ const proxy = await event.sender.session.resolveProxy(url);
+ if (!event.sender.isDestroyed())
+ event.sender.send('did-resolve-proxy', requestId, proxy);
})
);
@@ -1486,9 +1481,14 @@ module.exports = class AtomApplication extends EventEmitter {
async saveCurrentWindowOptions(allowEmpty = false) {
if (this.quitting) return;
+ const windows = this.getAllWindows();
+ const hasASpecWindow = windows.some(window => window.isSpec);
+
+ if (windows.length === 1 && hasASpecWindow) return;
+
const state = {
version: APPLICATION_STATE_VERSION,
- windows: this.getAllWindows()
+ windows: windows
.filter(window => !window.isSpec)
.map(window => ({ projectRoots: window.projectRoots }))
};
@@ -2022,7 +2022,13 @@ module.exports = class AtomApplication extends EventEmitter {
// File dialog defaults to project directory of currently active editor
if (path) openOptions.defaultPath = path;
- dialog.showOpenDialog(parentWindow, openOptions, callback);
+ dialog
+ .showOpenDialog(parentWindow, openOptions)
+ .then(({ filePaths, bookmarks }) => {
+ if (typeof callback === 'function') {
+ callback(filePaths, bookmarks);
+ }
+ });
}
async promptForRestart() {
diff --git a/src/main-process/atom-window.js b/src/main-process/atom-window.js
index 8b7d1ad51..47f41e6cb 100644
--- a/src/main-process/atom-window.js
+++ b/src/main-process/atom-window.js
@@ -1,4 +1,10 @@
-const { BrowserWindow, app, dialog, ipcMain } = require('electron');
+const {
+ BrowserWindow,
+ app,
+ dialog,
+ ipcMain,
+ nativeImage
+} = require('electron');
const getAppName = require('../get-app-name');
const path = require('path');
const url = require('url');
@@ -50,7 +56,10 @@ module.exports = class AtomWindow extends EventEmitter {
disableBlinkFeatures: 'Auxclick',
nodeIntegration: true,
webviewTag: true,
- // multi-threading
+
+ // TodoElectronIssue: remote module is deprecated https://www.electronjs.org/docs/breaking-changes#default-changed-enableremotemodule-defaults-to-false
+ enableRemoteModule: true,
+ // node support in threads
nodeIntegrationInWorker: true
},
simpleFullscreen: this.getSimpleFullscreen()
@@ -58,7 +67,8 @@ module.exports = class AtomWindow extends EventEmitter {
// Don't set icon on Windows so the exe's ico will be used as window and
// taskbar's icon. See https://github.com/atom/atom/issues/4811 for more.
- if (process.platform === 'linux') options.icon = ICON_PATH;
+ if (process.platform === 'linux')
+ options.icon = nativeImage.createFromPath(ICON_PATH);
if (this.shouldAddCustomTitleBar()) options.titleBarStyle = 'hidden';
if (this.shouldAddCustomInsetTitleBar())
options.titleBarStyle = 'hiddenInset';
@@ -226,7 +236,7 @@ module.exports = class AtomWindow extends EventEmitter {
if (result.response === 0) this.browserWindow.destroy();
});
- this.browserWindow.webContents.on('crashed', async () => {
+ this.browserWindow.webContents.on('render-process-gone', async () => {
if (this.headless) {
console.log('Renderer process crashed, exiting');
this.atomApplication.exit(100);
@@ -319,7 +329,19 @@ module.exports = class AtomWindow extends EventEmitter {
}
replaceEnvironment(env) {
- this.browserWindow.webContents.send('environment', env);
+ const {
+ NODE_ENV,
+ NODE_PATH,
+ ATOM_HOME,
+ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT
+ } = env;
+
+ this.browserWindow.webContents.send('environment', {
+ NODE_ENV,
+ NODE_PATH,
+ ATOM_HOME,
+ ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT
+ });
}
sendMessage(message, detail) {
@@ -463,13 +485,13 @@ module.exports = class AtomWindow extends EventEmitter {
options
);
+ let promise = dialog.showSaveDialog(this.browserWindow, options);
if (typeof callback === 'function') {
- // Async
- dialog.showSaveDialog(this.browserWindow, options, callback);
- } else {
- // Sync
- return dialog.showSaveDialog(this.browserWindow, options);
+ promise = promise.then(({ filePath, bookmark }) => {
+ callback(filePath, bookmark);
+ });
}
+ return promise;
}
toggleDevTools() {
diff --git a/src/main-process/context-menu.js b/src/main-process/context-menu.js
index b63830574..28af6cf35 100644
--- a/src/main-process/context-menu.js
+++ b/src/main-process/context-menu.js
@@ -16,7 +16,6 @@ module.exports = class ContextMenu {
if (item.command) {
if (!item.commandDetail) item.commandDetail = {};
item.commandDetail.contextCommand = true;
- item.commandDetail.atomWindow = this.atomWindow;
item.click = () => {
global.atomApplication.sendCommandToWindow(
item.command,
diff --git a/src/main-process/main.js b/src/main-process/main.js
index 4ccd361bd..28b6f3f26 100644
--- a/src/main-process/main.js
+++ b/src/main-process/main.js
@@ -12,14 +12,10 @@ const CSON = require('season');
const yargs = require('yargs');
const { app } = require('electron');
-const version = `Atom : ${app.getVersion()}
-Electron: ${process.versions.electron}
-Chrome : ${process.versions.chrome}
-Node : ${process.versions.node}`;
-
const args = yargs(process.argv)
- .alias('v', 'version')
- .version(version)
+ // Don't handle --help or --version here; they will be handled later.
+ .help(false)
+ .version(false)
.alias('d', 'dev')
.alias('t', 'test')
.alias('r', 'resource-path').argv;
diff --git a/src/main-process/parse-command-line.js b/src/main-process/parse-command-line.js
index d00464d43..e152ee7e8 100644
--- a/src/main-process/parse-command-line.js
+++ b/src/main-process/parse-command-line.js
@@ -5,7 +5,12 @@ const yargs = require('yargs');
const { app } = require('electron');
module.exports = function parseCommandLine(processArgs) {
- const options = yargs(processArgs).wrap(yargs.terminalWidth());
+ // macOS Gatekeeper adds a flag ("-psn_0_[six or seven digits here]") when it intercepts Atom launches.
+ // (This happens for fresh downloads, new installs, or first launches after upgrading).
+ // We don't need this flag, and yargs interprets it as many short flags. So, we filter it out.
+ const filteredArgs = processArgs.filter(arg => !arg.startsWith('-psn_'));
+
+ const options = yargs(filteredArgs).wrap(yargs.terminalWidth());
const version = app.getVersion();
options.usage(
dedent`Atom Editor v${version}
@@ -52,10 +57,7 @@ module.exports = function parseCommandLine(processArgs) {
.alias('f', 'foreground')
.boolean('f')
.describe('f', 'Keep the main process in the foreground.');
- options
- .alias('h', 'help')
- .boolean('h')
- .describe('h', 'Print this usage message.');
+ options.help('help', 'Print this usage message.').alias('h', 'help');
options
.alias('l', 'log-file')
.string('l')
@@ -131,7 +133,16 @@ module.exports = function parseCommandLine(processArgs) {
'Enable low-level logging messages from Electron.'
);
options.boolean('uri-handler');
+ options
+ .version(
+ dedent`Atom : ${version}
+ Electron: ${process.versions.electron}
+ Chrome : ${process.versions.chrome}
+ Node : ${process.versions.node}`
+ )
+ .alias('v', 'version');
+ // NB: if --help or --version are given, this also displays the relevant message and exits
let args = options.argv;
// If --uri-handler is set, then we parse NOTHING else
@@ -143,11 +154,6 @@ module.exports = function parseCommandLine(processArgs) {
};
}
- if (args.help) {
- process.stdout.write(options.help());
- process.exit(0);
- }
-
const addToLastWindow = args['add'];
const safeMode = args['safe'];
const benchmark = args['benchmark'];
@@ -187,6 +193,11 @@ module.exports = function parseCommandLine(processArgs) {
let devMode = args['dev'];
for (const path of args._) {
+ if (typeof path !== 'string') {
+ // Sometimes non-strings (such as numbers or boolean true) get into args._
+ // In the next block, .startsWith() only works on strings. So, skip non-string arguments.
+ continue;
+ }
if (path.startsWith('atom://')) {
urlsToOpen.push(path);
} else {
diff --git a/src/main-process/start.js b/src/main-process/start.js
index 9f0d58161..122c332f6 100644
--- a/src/main-process/start.js
+++ b/src/main-process/start.js
@@ -37,12 +37,18 @@ module.exports = function start(resourcePath, devResourcePath, startTime) {
}
});
- const previousConsoleLog = console.log;
- console.log = nslog;
+ // TodoElectronIssue this should be set to true before Electron 12 - https://github.com/electron/electron/issues/18397
+ app.allowRendererProcessReuse = false;
app.commandLine.appendSwitch('enable-experimental-web-platform-features');
const args = parseCommandLine(process.argv.slice(1));
+
+ // This must happen after parseCommandLine() because yargs uses console.log
+ // to display the usage message.
+ const previousConsoleLog = console.log;
+ console.log = nslog;
+
args.resourcePath = normalizeDriveLetterName(resourcePath);
args.devResourcePath = normalizeDriveLetterName(devResourcePath);
diff --git a/src/menu-helpers.js b/src/menu-helpers.js
index c9d87a625..d096f3f1c 100644
--- a/src/menu-helpers.js
+++ b/src/menu-helpers.js
@@ -36,6 +36,7 @@ function merge(menu, item, itemSpecificity = Infinity) {
}
function unmerge(menu, item) {
+ item = cloneMenuItem(item);
const matchingItemIndex = findMatchingItemIndex(menu, item);
if (matchingItemIndex === -1) {
return;
@@ -53,16 +54,13 @@ function unmerge(menu, item) {
}
}
-function findMatchingItemIndex(menu, { type, label, submenu }) {
+function findMatchingItemIndex(menu, { type, id, submenu }) {
if (type === 'separator') {
return -1;
}
for (let index = 0; index < menu.length; index++) {
const item = menu[index];
- if (
- normalizeLabel(item.label) === normalizeLabel(label) &&
- (item.submenu != null) === (submenu != null)
- ) {
+ if (item.id === id && (item.submenu != null) === (submenu != null)) {
return index;
}
}
@@ -81,6 +79,7 @@ function cloneMenuItem(item) {
item,
'type',
'label',
+ 'id',
'enabled',
'visible',
'command',
@@ -93,6 +92,9 @@ function cloneMenuItem(item) {
'beforeGroupContaining',
'afterGroupContaining'
);
+ if (item.id === null || item.id === undefined) {
+ item.id = normalizeLabel(item.label);
+ }
if (item.submenu != null) {
item.submenu = item.submenu.map(submenuItem => cloneMenuItem(submenuItem));
}
diff --git a/src/menu-manager.coffee b/src/menu-manager.coffee
index aef708029..b6b4720a3 100644
--- a/src/menu-manager.coffee
+++ b/src/menu-manager.coffee
@@ -78,7 +78,7 @@ class MenuManager
# atom.menu.add [
# {
# label: 'Hello'
- # submenu : [{label: 'World!', command: 'hello:world'}]
+ # submenu : [{label: 'World!', id: 'World!', command: 'hello:world'}]
# }
# ]
# ```
@@ -89,6 +89,7 @@ class MenuManager
# * `command` An optional {String} command to trigger when the item is
# clicked.
#
+ # * `id` (internal) A {String} containing the menu item's id.
# Returns a {Disposable} on which `.dispose()` can be called to remove the
# added menu items.
add: (items) ->
@@ -201,7 +202,7 @@ class MenuManager
[]
sortPackagesMenu: ->
- packagesMenu = _.find @template, ({label}) -> MenuHelpers.normalizeLabel(label) is 'Packages'
+ packagesMenu = _.find @template, ({id}) -> MenuHelpers.normalizeLabel(id) is 'Packages'
return unless packagesMenu?.submenu?
packagesMenu.submenu.sort (item1, item2) ->
diff --git a/src/module-cache.js b/src/module-cache.js
index a63b3bbb3..4caa11521 100644
--- a/src/module-cache.js
+++ b/src/module-cache.js
@@ -73,7 +73,7 @@ function loadDependencies(modulePath, rootPath, rootMetadata, moduleCache) {
const childMetadata = JSON.parse(fs.readFileSync(childMetadataPath));
if (childMetadata && childMetadata.version) {
- var mainPath;
+ let mainPath;
try {
mainPath = require.resolve(childPath);
} catch (error) {
@@ -281,25 +281,6 @@ function registerBuiltins(devMode) {
if (cache.builtins.atom == null) {
cache.builtins.atom = path.join(cache.resourcePath, 'exports', 'atom.js');
}
-
- const electronAsarRoot = path.join(process.resourcesPath, 'electron.asar');
-
- const commonRoot = path.join(electronAsarRoot, 'common', 'api');
- const commonBuiltins = ['clipboard', 'shell'];
- for (const builtin of commonBuiltins) {
- cache.builtins[builtin] = path.join(commonRoot, `${builtin}.js`);
- }
-
- const rendererRoot = path.join(electronAsarRoot, 'renderer', 'api');
- const rendererBuiltins = [
- 'crash-reporter',
- 'ipc-renderer',
- 'remote'
- // 'screen' Deprecated https://www.electronjs.org/docs/breaking-changes#api-changed-electronscreen-in-the-renderer-process-should-be-accessed-via-remote
- ];
- for (const builtin of rendererBuiltins) {
- cache.builtins[builtin] = path.join(rendererRoot, `${builtin}.js`);
- }
}
exports.create = function(modulePath) {
diff --git a/src/native-compile-cache.js b/src/native-compile-cache.js
index 422fbccd9..3f82e108e 100644
--- a/src/native-compile-cache.js
+++ b/src/native-compile-cache.js
@@ -38,12 +38,11 @@ class NativeCompileCache {
}
runInThisContext(code, filename) {
- // TodoElectronIssue: produceCachedData is deprecated after Node 10.6, so we'll
- // will need to update this for Electron v4 to use script.createCachedData().
- const script = new vm.Script(code, { filename, produceCachedData: true });
+ const script = new vm.Script(code, filename);
+ const cachedData = script.createCachedData();
return {
result: script.runInThisContext(),
- cacheBuffer: script.cachedDataProduced ? script.cachedData : null
+ cacheBuffer: typeof cachedData !== 'undefined' ? cachedData : null
};
}
diff --git a/src/notification-manager.js b/src/notification-manager.js
index 8ee7ad659..482515304 100644
--- a/src/notification-manager.js
+++ b/src/notification-manager.js
@@ -147,6 +147,7 @@ module.exports = class NotificationManager {
// in the notification header. Defaults to `'flame'`.
// * `stack` (optional) A preformatted {String} with stack trace
// information describing the location of the error.
+ // Requires `detail` to be set.
//
// Returns the {Notification} that was added.
addError(message, options) {
@@ -177,6 +178,7 @@ module.exports = class NotificationManager {
// in the notification header. Defaults to `'bug'`.
// * `stack` (optional) A preformatted {String} with stack trace
// information describing the location of the error.
+ // Requires `detail` to be set.
//
// Returns the {Notification} that was added.
addFatalError(message, options) {
diff --git a/src/package-manager.js b/src/package-manager.js
index 4e1bd5a29..163e3ca9d 100644
--- a/src/package-manager.js
+++ b/src/package-manager.js
@@ -531,7 +531,7 @@ module.exports = class PackageManager {
) => {
for (const packageName of packageNames) {
if (!disabledPackageNames.has(packageName)) {
- var pack = this.getLoadedPackage(packageName);
+ const pack = this.getLoadedPackage(packageName);
if (pack != null) {
action(pack);
}
diff --git a/src/package.js b/src/package.js
index 169d763c2..06f312661 100644
--- a/src/package.js
+++ b/src/package.js
@@ -1,5 +1,5 @@
const path = require('path');
-const async = require('async');
+const asyncEach = require('async/each');
const CSON = require('season');
const fs = require('fs-plus');
const { Emitter, CompositeDisposable } = require('event-kit');
@@ -726,14 +726,14 @@ module.exports = class Package {
this.packageManager.packagesCache[this.name]
) {
const { grammarPaths } = this.packageManager.packagesCache[this.name];
- return async.each(grammarPaths, loadGrammar, () => resolve());
+ return asyncEach(grammarPaths, loadGrammar, () => resolve());
} else {
const grammarsDirPath = path.join(this.path, 'grammars');
fs.exists(grammarsDirPath, grammarsDirExists => {
if (!grammarsDirExists) return resolve();
fs.list(grammarsDirPath, ['json', 'cson'], (error, grammarPaths) => {
if (error || !grammarPaths) return resolve();
- async.each(grammarPaths, loadGrammar, () => resolve());
+ asyncEach(grammarPaths, loadGrammar, () => resolve());
});
});
}
@@ -779,7 +779,7 @@ module.exports = class Package {
if (!settingsDirExists) return resolve();
fs.list(settingsDirPath, ['json', 'cson'], (error, settingsPaths) => {
if (error || !settingsPaths) return resolve();
- async.each(settingsPaths, loadSettingsFile, () => resolve());
+ asyncEach(settingsPaths, loadSettingsFile, () => resolve());
});
});
});
@@ -917,6 +917,10 @@ module.exports = class Package {
this.getCanDeferMainModuleRequireStorageKey(),
'true'
);
+ } else {
+ localStorage.removeItem(
+ this.getCanDeferMainModuleRequireStorageKey()
+ );
}
return this.mainModule;
}
@@ -1147,46 +1151,60 @@ module.exports = class Package {
// Does the given module path contain native code?
isNativeModule(modulePath) {
try {
- return (
- fs.listSync(path.join(modulePath, 'build', 'Release'), ['.node'])
- .length > 0
- );
+ return this.getModulePathNodeFiles(modulePath).length > 0;
} catch (error) {
return false;
}
}
- // Get an array of all the native modules that this package depends on.
+ // get the list of `.node` files for the given module path
+ getModulePathNodeFiles(modulePath) {
+ try {
+ const modulePathNodeFiles = fs.listSync(
+ path.join(modulePath, 'build', 'Release'),
+ ['.node']
+ );
+ return modulePathNodeFiles;
+ } catch (error) {
+ return [];
+ }
+ }
+
+ // Get a Map of all the native modules => the `.node` files that this package depends on.
//
// First try to get this information from
// @metadata._atomModuleCache.extensions. If @metadata._atomModuleCache doesn't
// exist, recurse through all dependencies.
- getNativeModuleDependencyPaths() {
- const nativeModulePaths = [];
+ getNativeModuleDependencyPathsMap() {
+ const nativeModulePaths = new Map();
if (this.metadata._atomModuleCache) {
+ const nodeFilePaths = [];
const relativeNativeModuleBindingPaths =
(this.metadata._atomModuleCache.extensions &&
this.metadata._atomModuleCache.extensions['.node']) ||
[];
for (let relativeNativeModuleBindingPath of relativeNativeModuleBindingPaths) {
- const nativeModulePath = path.join(
+ const nodeFilePath = path.join(
this.path,
relativeNativeModuleBindingPath,
'..',
'..',
'..'
);
- nativeModulePaths.push(nativeModulePath);
+ nodeFilePaths.push(nodeFilePath);
}
+ nativeModulePaths.set(this.path, nodeFilePaths);
return nativeModulePaths;
}
- var traversePath = nodeModulesPath => {
+ const traversePath = nodeModulesPath => {
try {
for (let modulePath of fs.listSync(nodeModulesPath)) {
- if (this.isNativeModule(modulePath))
- nativeModulePaths.push(modulePath);
+ const modulePathNodeFiles = this.getModulePathNodeFiles(modulePath);
+ if (modulePathNodeFiles) {
+ nativeModulePaths.set(modulePath, modulePathNodeFiles);
+ }
traversePath(path.join(modulePath, 'node_modules'));
}
} catch (error) {}
@@ -1197,6 +1215,12 @@ module.exports = class Package {
return nativeModulePaths;
}
+ // Get an array of all the native modules that this package depends on.
+ // See `getNativeModuleDependencyPathsMap` for more information
+ getNativeModuleDependencyPaths() {
+ return [...this.getNativeModuleDependencyPathsMap().keys()];
+ }
+
/*
Section: Native Module Compatibility
*/
@@ -1298,8 +1322,7 @@ module.exports = class Package {
}
// Get the incompatible native modules that this package depends on.
- // This recurses through all dependencies and requires all modules that
- // contain a `.node` file.
+ // This recurses through all dependencies and requires all `.node` files.
//
// This information is cached in local storage on a per package/version basis
// to minimize the impact on startup time.
@@ -1314,9 +1337,13 @@ module.exports = class Package {
}
const incompatibleNativeModules = [];
- for (let nativeModulePath of this.getNativeModuleDependencyPaths()) {
+ const nativeModulePaths = this.getNativeModuleDependencyPathsMap();
+ for (const [nativeModulePath, nodeFilesPaths] of nativeModulePaths) {
try {
- require(nativeModulePath);
+ // require each .node file
+ for (const nodeFilePath of nodeFilesPaths) {
+ require(nodeFilePath);
+ }
} catch (error) {
let version;
try {
diff --git a/src/pane-axis-element.coffee b/src/pane-axis-element.coffee
deleted file mode 100644
index 86615b2c6..000000000
--- a/src/pane-axis-element.coffee
+++ /dev/null
@@ -1,71 +0,0 @@
-{CompositeDisposable} = require 'event-kit'
-PaneResizeHandleElement = require './pane-resize-handle-element'
-
-class PaneAxisElement extends HTMLElement
- attachedCallback: ->
- @subscriptions ?= @subscribeToModel()
- @childAdded({child, index}) for child, index in @model.getChildren()
-
- detachedCallback: ->
- @subscriptions.dispose()
- @subscriptions = null
- @childRemoved({child}) for child in @model.getChildren()
-
- initialize: (@model, @viewRegistry) ->
- @subscriptions ?= @subscribeToModel()
- @childAdded({child, index}) for child, index in @model.getChildren()
-
- switch @model.getOrientation()
- when 'horizontal'
- @classList.add('horizontal', 'pane-row')
- when 'vertical'
- @classList.add('vertical', 'pane-column')
- this
-
- subscribeToModel: ->
- subscriptions = new CompositeDisposable
- subscriptions.add @model.onDidAddChild(@childAdded.bind(this))
- subscriptions.add @model.onDidRemoveChild(@childRemoved.bind(this))
- subscriptions.add @model.onDidReplaceChild(@childReplaced.bind(this))
- subscriptions.add @model.observeFlexScale(@flexScaleChanged.bind(this))
- subscriptions
-
- isPaneResizeHandleElement: (element) ->
- element?.nodeName.toLowerCase() is 'atom-pane-resize-handle'
-
- childAdded: ({child, index}) ->
- view = @viewRegistry.getView(child)
- @insertBefore(view, @children[index * 2])
-
- prevElement = view.previousSibling
- # if previous element is not pane resize element, then insert new resize element
- if prevElement? and not @isPaneResizeHandleElement(prevElement)
- resizeHandle = document.createElement('atom-pane-resize-handle')
- @insertBefore(resizeHandle, view)
-
- nextElement = view.nextSibling
- # if next element isnot resize element, then insert new resize element
- if nextElement? and not @isPaneResizeHandleElement(nextElement)
- resizeHandle = document.createElement('atom-pane-resize-handle')
- @insertBefore(resizeHandle, nextElement)
-
- childRemoved: ({child}) ->
- view = @viewRegistry.getView(child)
- siblingView = view.previousSibling
- # make sure next sibling view is pane resize view
- if siblingView? and @isPaneResizeHandleElement(siblingView)
- siblingView.remove()
- view.remove()
-
- childReplaced: ({index, oldChild, newChild}) ->
- focusedElement = document.activeElement if @hasFocus()
- @childRemoved({child: oldChild, index})
- @childAdded({child: newChild, index})
- focusedElement?.focus() if document.activeElement is document.body
-
- flexScaleChanged: (flexScale) -> @style.flexGrow = flexScale
-
- hasFocus: ->
- this is document.activeElement or @contains(document.activeElement)
-
-module.exports = PaneAxisElement = document.registerElement 'atom-pane-axis', prototype: PaneAxisElement.prototype
diff --git a/src/pane-axis-element.js b/src/pane-axis-element.js
new file mode 100644
index 000000000..1a620f9df
--- /dev/null
+++ b/src/pane-axis-element.js
@@ -0,0 +1,126 @@
+const { CompositeDisposable } = require('event-kit');
+require('./pane-resize-handle-element');
+
+class PaneAxisElement extends HTMLElement {
+ connectedCallback() {
+ if (this.subscriptions == null) {
+ this.subscriptions = this.subscribeToModel();
+ }
+ this.model
+ .getChildren()
+ .map((child, index) => this.childAdded({ child, index }));
+ }
+
+ disconnectedCallback() {
+ this.subscriptions.dispose();
+ this.subscriptions = null;
+ this.model.getChildren().map(child => this.childRemoved({ child }));
+ }
+
+ initialize(model, viewRegistry) {
+ this.model = model;
+ this.viewRegistry = viewRegistry;
+ if (this.subscriptions == null) {
+ this.subscriptions = this.subscribeToModel();
+ }
+ const iterable = this.model.getChildren();
+ for (let index = 0; index < iterable.length; index++) {
+ const child = iterable[index];
+ this.childAdded({ child, index });
+ }
+
+ switch (this.model.getOrientation()) {
+ case 'horizontal':
+ this.classList.add('horizontal', 'pane-row');
+ break;
+ case 'vertical':
+ this.classList.add('vertical', 'pane-column');
+ break;
+ }
+ return this;
+ }
+
+ subscribeToModel() {
+ const subscriptions = new CompositeDisposable();
+ subscriptions.add(this.model.onDidAddChild(this.childAdded.bind(this)));
+ subscriptions.add(
+ this.model.onDidRemoveChild(this.childRemoved.bind(this))
+ );
+ subscriptions.add(
+ this.model.onDidReplaceChild(this.childReplaced.bind(this))
+ );
+ subscriptions.add(
+ this.model.observeFlexScale(this.flexScaleChanged.bind(this))
+ );
+ return subscriptions;
+ }
+
+ isPaneResizeHandleElement(element) {
+ return (
+ (element != null ? element.nodeName.toLowerCase() : undefined) ===
+ 'atom-pane-resize-handle'
+ );
+ }
+
+ childAdded({ child, index }) {
+ let resizeHandle;
+ const view = this.viewRegistry.getView(child);
+ this.insertBefore(view, this.children[index * 2]);
+
+ const prevElement = view.previousSibling;
+ // if previous element is not pane resize element, then insert new resize element
+ if (prevElement != null && !this.isPaneResizeHandleElement(prevElement)) {
+ resizeHandle = document.createElement('atom-pane-resize-handle');
+ this.insertBefore(resizeHandle, view);
+ }
+
+ const nextElement = view.nextSibling;
+ // if next element isnot resize element, then insert new resize element
+ if (nextElement != null && !this.isPaneResizeHandleElement(nextElement)) {
+ resizeHandle = document.createElement('atom-pane-resize-handle');
+ return this.insertBefore(resizeHandle, nextElement);
+ }
+ }
+
+ childRemoved({ child }) {
+ const view = this.viewRegistry.getView(child);
+ const siblingView = view.previousSibling;
+ // make sure next sibling view is pane resize view
+ if (siblingView != null && this.isPaneResizeHandleElement(siblingView)) {
+ siblingView.remove();
+ }
+ return view.remove();
+ }
+
+ childReplaced({ index, oldChild, newChild }) {
+ let focusedElement;
+ if (this.hasFocus()) {
+ focusedElement = document.activeElement;
+ }
+ this.childRemoved({ child: oldChild, index });
+ this.childAdded({ child: newChild, index });
+ if (document.activeElement === document.body) {
+ return focusedElement != null ? focusedElement.focus() : undefined;
+ }
+ }
+
+ flexScaleChanged(flexScale) {
+ this.style.flexGrow = flexScale;
+ }
+
+ hasFocus() {
+ return (
+ this === document.activeElement || this.contains(document.activeElement)
+ );
+ }
+}
+
+window.customElements.define('atom-pane-axis', PaneAxisElement);
+
+function createPaneAxisElement() {
+ return document.createElement('atom-pane-axis');
+}
+
+module.exports = {
+ createPaneAxisElement
+};
diff --git a/src/pane-axis.js b/src/pane-axis.js
index 8abe6641f..08afa2351 100644
--- a/src/pane-axis.js
+++ b/src/pane-axis.js
@@ -1,7 +1,7 @@
const { Emitter, CompositeDisposable } = require('event-kit');
const { flatten } = require('underscore-plus');
const Model = require('./model');
-const PaneAxisElement = require('./pane-axis-element');
+const { createPaneAxisElement } = require('./pane-axis-element');
class PaneAxis extends Model {
static deserialize(state, { deserializers, views }) {
@@ -40,7 +40,10 @@ class PaneAxis extends Model {
getElement() {
if (!this.element) {
- this.element = new PaneAxisElement().initialize(this, this.viewRegistry);
+ this.element = createPaneAxisElement().initialize(
+ this,
+ this.viewRegistry
+ );
}
return this.element;
}
diff --git a/src/pane-container-element.js b/src/pane-container-element.js
index bff5b29c7..f435ceef5 100644
--- a/src/pane-container-element.js
+++ b/src/pane-container-element.js
@@ -1,9 +1,9 @@
const { CompositeDisposable } = require('event-kit');
class PaneContainerElement extends HTMLElement {
- createdCallback() {
+ constructor() {
+ super();
this.subscriptions = new CompositeDisposable();
- this.classList.add('panes');
}
initialize(model, { views }) {
@@ -18,6 +18,10 @@ class PaneContainerElement extends HTMLElement {
return this;
}
+ connectedCallback() {
+ this.classList.add('panes');
+ }
+
rootChanged(root) {
const focusedElement = this.hasFocus() ? document.activeElement : null;
if (this.firstChild != null) {
@@ -39,6 +43,12 @@ class PaneContainerElement extends HTMLElement {
}
}
-module.exports = document.registerElement('atom-pane-container', {
- prototype: PaneContainerElement.prototype
-});
+window.customElements.define('atom-pane-container', PaneContainerElement);
+
+function createPaneContainerElement() {
+ return document.createElement('atom-pane-container');
+}
+
+module.exports = {
+ createPaneContainerElement
+};
diff --git a/src/pane-container.js b/src/pane-container.js
index 4cd76dcda..bc2f2a6f6 100644
--- a/src/pane-container.js
+++ b/src/pane-container.js
@@ -2,7 +2,7 @@ const { find } = require('underscore-plus');
const { Emitter, CompositeDisposable } = require('event-kit');
const Pane = require('./pane');
const ItemRegistry = require('./item-registry');
-const PaneContainerElement = require('./pane-container-element');
+const { createPaneContainerElement } = require('./pane-container-element');
const SERIALIZATION_VERSION = 1;
const STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY = 100;
@@ -44,7 +44,7 @@ module.exports = class PaneContainer {
getElement() {
return this.element != null
? this.element
- : (this.element = new PaneContainerElement().initialize(this, {
+ : (this.element = createPaneContainerElement().initialize(this, {
views: this.viewRegistry
}));
}
diff --git a/src/pane-element.js b/src/pane-element.js
index ac2ef71d1..60b8cf5d0 100644
--- a/src/pane-element.js
+++ b/src/pane-element.js
@@ -2,15 +2,17 @@ const path = require('path');
const { CompositeDisposable } = require('event-kit');
class PaneElement extends HTMLElement {
- createdCallback() {
+ constructor() {
+ super();
this.attached = false;
this.subscriptions = new CompositeDisposable();
this.inlineDisplayStyles = new WeakMap();
- this.initializeContent();
this.subscribeToDOMEvents();
+ this.itemViews = document.createElement('div');
}
- attachedCallback() {
+ connectedCallback() {
+ this.initializeContent();
this.attached = true;
if (this.model.isFocused()) {
this.focus();
@@ -24,7 +26,6 @@ class PaneElement extends HTMLElement {
initializeContent() {
this.setAttribute('class', 'pane');
this.setAttribute('tabindex', -1);
- this.itemViews = document.createElement('div');
this.appendChild(this.itemViews);
this.itemViews.setAttribute('class', 'item-views');
}
@@ -148,6 +149,7 @@ class PaneElement extends HTMLElement {
});
}
}
+
if (!this.itemViews.contains(itemView)) {
this.itemViews.appendChild(itemView);
}
@@ -213,6 +215,12 @@ class PaneElement extends HTMLElement {
}
}
-module.exports = document.registerElement('atom-pane', {
- prototype: PaneElement.prototype
-});
+function createPaneElement() {
+ return document.createElement('atom-pane');
+}
+
+window.customElements.define('atom-pane', PaneElement);
+
+module.exports = {
+ createPaneElement
+};
diff --git a/src/pane-resize-handle-element.coffee b/src/pane-resize-handle-element.coffee
deleted file mode 100644
index e7ea5480a..000000000
--- a/src/pane-resize-handle-element.coffee
+++ /dev/null
@@ -1,80 +0,0 @@
-class PaneResizeHandleElement extends HTMLElement
- createdCallback: ->
- @resizePane = @resizePane.bind(this)
- @resizeStopped = @resizeStopped.bind(this)
- @subscribeToDOMEvents()
-
- subscribeToDOMEvents: ->
- @addEventListener 'dblclick', @resizeToFitContent.bind(this)
- @addEventListener 'mousedown', @resizeStarted.bind(this)
-
- attachedCallback: ->
- # For some reason Chromium 58 is firing the attached callback after the
- # element has been detached, so we ignore the callback when a parent element
- # can't be found.
- if @parentElement
- @isHorizontal = @parentElement.classList.contains("horizontal")
- @classList.add if @isHorizontal then 'horizontal' else 'vertical'
-
- detachedCallback: ->
- @resizeStopped()
-
- resizeToFitContent: ->
- # clear flex-grow css style of both pane
- @previousSibling?.model.setFlexScale(1)
- @nextSibling?.model.setFlexScale(1)
-
- resizeStarted: (e) ->
- e.stopPropagation()
- if not @overlay
- @overlay = document.createElement('div')
- @overlay.classList.add('atom-pane-cursor-overlay')
- @overlay.classList.add(if @isHorizontal then 'horizontal' else 'vertical')
- @appendChild @overlay
- document.addEventListener 'mousemove', @resizePane
- document.addEventListener 'mouseup', @resizeStopped
-
- resizeStopped: ->
- document.removeEventListener 'mousemove', @resizePane
- document.removeEventListener 'mouseup', @resizeStopped
- if @overlay
- @removeChild @overlay
- @overlay = undefined
-
- calcRatio: (ratio1, ratio2, total) ->
- allRatio = ratio1 + ratio2
- [total * ratio1 / allRatio, total * ratio2 / allRatio]
-
- setFlexGrow: (prevSize, nextSize) ->
- @prevModel = @previousSibling.model
- @nextModel = @nextSibling.model
- totalScale = @prevModel.getFlexScale() + @nextModel.getFlexScale()
- flexGrows = @calcRatio(prevSize, nextSize, totalScale)
- @prevModel.setFlexScale flexGrows[0]
- @nextModel.setFlexScale flexGrows[1]
-
- fixInRange: (val, minValue, maxValue) ->
- Math.min(Math.max(val, minValue), maxValue)
-
- resizePane: ({clientX, clientY, which}) ->
- return @resizeStopped() unless which is 1
- return @resizeStopped() unless @previousSibling? and @nextSibling?
-
- if @isHorizontal
- totalWidth = @previousSibling.clientWidth + @nextSibling.clientWidth
- #get the left and right width after move the resize view
- leftWidth = clientX - @previousSibling.getBoundingClientRect().left
- leftWidth = @fixInRange(leftWidth, 0, totalWidth)
- rightWidth = totalWidth - leftWidth
- # set the flex grow by the ratio of left width and right width
- # to change pane width
- @setFlexGrow(leftWidth, rightWidth)
- else
- totalHeight = @previousSibling.clientHeight + @nextSibling.clientHeight
- topHeight = clientY - @previousSibling.getBoundingClientRect().top
- topHeight = @fixInRange(topHeight, 0, totalHeight)
- bottomHeight = totalHeight - topHeight
- @setFlexGrow(topHeight, bottomHeight)
-
-module.exports = PaneResizeHandleElement =
-document.registerElement 'atom-pane-resize-handle', prototype: PaneResizeHandleElement.prototype
diff --git a/src/pane-resize-handle-element.js b/src/pane-resize-handle-element.js
new file mode 100644
index 000000000..ede61042f
--- /dev/null
+++ b/src/pane-resize-handle-element.js
@@ -0,0 +1,120 @@
+class PaneResizeHandleElement extends HTMLElement {
+ constructor() {
+ super();
+ this.resizePane = this.resizePane.bind(this);
+ this.resizeStopped = this.resizeStopped.bind(this);
+ this.subscribeToDOMEvents();
+ }
+
+ subscribeToDOMEvents() {
+ this.addEventListener('dblclick', this.resizeToFitContent.bind(this));
+ this.addEventListener('mousedown', this.resizeStarted.bind(this));
+ }
+
+ connectedCallback() {
+ // For some reason Chromium 58 is firing the attached callback after the
+ // element has been detached, so we ignore the callback when a parent element
+ // can't be found.
+ if (this.parentElement) {
+ this.isHorizontal = this.parentElement.classList.contains('horizontal');
+ this.classList.add(this.isHorizontal ? 'horizontal' : 'vertical');
+ }
+ }
+
+ disconnectedCallback() {
+ this.resizeStopped();
+ }
+
+ resizeToFitContent() {
+ // clear flex-grow css style of both pane
+ if (this.previousSibling != null) {
+ this.previousSibling.model.setFlexScale(1);
+ }
+ return this.nextSibling != null
+ ? this.nextSibling.model.setFlexScale(1)
+ : undefined;
+ }
+
+ resizeStarted(e) {
+ e.stopPropagation();
+ if (!this.overlay) {
+ this.overlay = document.createElement('div');
+ this.overlay.classList.add('atom-pane-cursor-overlay');
+ this.overlay.classList.add(this.isHorizontal ? 'horizontal' : 'vertical');
+ this.appendChild(this.overlay);
+ }
+ document.addEventListener('mousemove', this.resizePane);
+ document.addEventListener('mouseup', this.resizeStopped);
+ }
+
+ resizeStopped() {
+ document.removeEventListener('mousemove', this.resizePane);
+ document.removeEventListener('mouseup', this.resizeStopped);
+ if (this.overlay) {
+ this.removeChild(this.overlay);
+ this.overlay = undefined;
+ }
+ }
+
+ calcRatio(ratio1, ratio2, total) {
+ const allRatio = ratio1 + ratio2;
+ return [(total * ratio1) / allRatio, (total * ratio2) / allRatio];
+ }
+
+ setFlexGrow(prevSize, nextSize) {
+ this.prevModel = this.previousSibling.model;
+ this.nextModel = this.nextSibling.model;
+ const totalScale =
+ this.prevModel.getFlexScale() + this.nextModel.getFlexScale();
+ const flexGrows = this.calcRatio(prevSize, nextSize, totalScale);
+ this.prevModel.setFlexScale(flexGrows[0]);
+ this.nextModel.setFlexScale(flexGrows[1]);
+ }
+
+ fixInRange(val, minValue, maxValue) {
+ return Math.min(Math.max(val, minValue), maxValue);
+ }
+
+ resizePane({ clientX, clientY, which }) {
+ if (which !== 1) {
+ return this.resizeStopped();
+ }
+ if (this.previousSibling == null || this.nextSibling == null) {
+ return this.resizeStopped();
+ }
+
+ if (this.isHorizontal) {
+ const totalWidth =
+ this.previousSibling.clientWidth + this.nextSibling.clientWidth;
+ // get the left and right width after move the resize view
+ let leftWidth =
+ clientX - this.previousSibling.getBoundingClientRect().left;
+ leftWidth = this.fixInRange(leftWidth, 0, totalWidth);
+ const rightWidth = totalWidth - leftWidth;
+ // set the flex grow by the ratio of left width and right width
+ // to change pane width
+ this.setFlexGrow(leftWidth, rightWidth);
+ } else {
+ const totalHeight =
+ this.previousSibling.clientHeight + this.nextSibling.clientHeight;
+ let topHeight =
+ clientY - this.previousSibling.getBoundingClientRect().top;
+ topHeight = this.fixInRange(topHeight, 0, totalHeight);
+ const bottomHeight = totalHeight - topHeight;
+ this.setFlexGrow(topHeight, bottomHeight);
+ }
+ }
+}
+
+window.customElements.define(
+ 'atom-pane-resize-handle',
+ PaneResizeHandleElement
+);
+
+function createPaneResizeHandleElement() {
+ return document.createElement('atom-pane-resize-handle');
+}
+
+module.exports = {
+ createPaneResizeHandleElement
+};
diff --git a/src/pane.js b/src/pane.js
index 431ab91c4..a55575ae0 100644
--- a/src/pane.js
+++ b/src/pane.js
@@ -2,7 +2,7 @@ const Grim = require('grim');
const { CompositeDisposable, Emitter } = require('event-kit');
const PaneAxis = require('./pane-axis');
const TextEditor = require('./text-editor');
-const PaneElement = require('./pane-element');
+const { createPaneElement } = require('./pane-element');
let nextInstanceId = 1;
@@ -98,7 +98,7 @@ module.exports = class Pane {
getElement() {
if (!this.element) {
- this.element = new PaneElement().initialize(this, {
+ this.element = createPaneElement().initialize(this, {
views: this.viewRegistry,
applicationDelegate: this.applicationDelegate
});
@@ -814,6 +814,9 @@ module.exports = class Pane {
// last item, the pane will be destroyed if the `core.destroyEmptyPanes` config
// setting is `true`.
//
+ // This action can be prevented by onWillDestroyPaneItem callbacks in which
+ // case nothing happens.
+ //
// * `item` Item to destroy
// * `force` (optional) {Boolean} Destroy the item without prompting to save
// it, even if the item's `isPermanentDockItem` method returns true.
@@ -844,7 +847,16 @@ module.exports = class Pane {
'will-destroy-pane-item'
) > 0
) {
- await this.container.willDestroyPaneItem({ item, index, pane: this });
+ let preventClosing = false;
+ await this.container.willDestroyPaneItem({
+ item,
+ index,
+ pane: this,
+ prevent: () => {
+ preventClosing = true;
+ }
+ });
+ if (preventClosing) return false;
}
if (
diff --git a/src/panel-container-element.js b/src/panel-container-element.js
index 230b957d4..4e7f6024f 100644
--- a/src/panel-container-element.js
+++ b/src/panel-container-element.js
@@ -4,11 +4,12 @@ const { createFocusTrap } = require('focus-trap');
const { CompositeDisposable } = require('event-kit');
class PanelContainerElement extends HTMLElement {
- createdCallback() {
+ constructor() {
+ super();
this.subscriptions = new CompositeDisposable();
}
- attachedCallback() {
+ connectedCallback() {
if (this.model.dock) {
this.model.dock.elementAttached();
}
@@ -111,6 +112,12 @@ class PanelContainerElement extends HTMLElement {
}
}
-module.exports = document.registerElement('atom-panel-container', {
- prototype: PanelContainerElement.prototype
-});
+window.customElements.define('atom-panel-container', PanelContainerElement);
+
+function createPanelContainerElement() {
+ return document.createElement('atom-panel-container');
+}
+
+module.exports = {
+ createPanelContainerElement
+};
diff --git a/src/panel-container.js b/src/panel-container.js
index 16e81bbe1..5a003f3f8 100644
--- a/src/panel-container.js
+++ b/src/panel-container.js
@@ -1,7 +1,7 @@
'use strict';
const { Emitter, CompositeDisposable } = require('event-kit');
-const PanelContainerElement = require('./panel-container-element');
+const { createPanelContainerElement } = require('./panel-container-element');
module.exports = class PanelContainer {
constructor({ location, dock, viewRegistry } = {}) {
@@ -24,7 +24,7 @@ module.exports = class PanelContainer {
getElement() {
if (!this.element) {
- this.element = new PanelContainerElement().initialize(
+ this.element = createPanelContainerElement().initialize(
this,
this.viewRegistry
);
diff --git a/src/path-watcher.js b/src/path-watcher.js
index 2fed722c5..11064eaf2 100644
--- a/src/path-watcher.js
+++ b/src/path-watcher.js
@@ -294,8 +294,14 @@ class NSFWNativeWatcher extends NativeWatcher {
if (event.file) {
payload.path = path.join(event.directory, event.file);
} else {
- payload.oldPath = path.join(event.directory, event.oldFile);
- payload.path = path.join(event.directory, event.newFile);
+ payload.oldPath = path.join(
+ event.directory,
+ typeof event.oldFile === 'undefined' ? '' : event.oldFile
+ );
+ payload.path = path.join(
+ event.directory,
+ typeof event.newFile === 'undefined' ? '' : event.newFile
+ );
}
return payload;
diff --git a/src/project.js b/src/project.js
index 002408863..d917c6fe8 100644
--- a/src/project.js
+++ b/src/project.js
@@ -350,7 +350,13 @@ module.exports = class Project extends Model {
// Public: Get an {Array} of {String}s containing the paths of the project's
// directories.
getPaths() {
- return this.rootDirectories.map(rootDirectory => rootDirectory.getPath());
+ try {
+ return this.rootDirectories.map(rootDirectory => rootDirectory.getPath());
+ } catch (e) {
+ atom.notifications.addError(
+ "Please clear Atom's window state with: atom --clear-window-state"
+ );
+ }
}
// Public: Set the paths of the project's directories.
diff --git a/src/protocol-handler-installer.js b/src/protocol-handler-installer.js
index 2f3c0740d..6b904fc7a 100644
--- a/src/protocol-handler-installer.js
+++ b/src/protocol-handler-installer.js
@@ -1,4 +1,4 @@
-const { remote } = require('electron');
+const { ipcRenderer } = require('electron');
const SETTING = 'core.uriHandlerRegistration';
const PROMPT = 'prompt';
@@ -10,26 +10,28 @@ module.exports = class ProtocolHandlerInstaller {
return ['win32', 'darwin'].includes(process.platform);
}
- isDefaultProtocolClient() {
- return remote.app.isDefaultProtocolClient('atom', process.execPath, [
- '--uri-handler',
- '--'
- ]);
+ async isDefaultProtocolClient() {
+ return ipcRenderer.invoke('isDefaultProtocolClient', {
+ protocol: 'atom',
+ path: process.execPath,
+ args: ['--uri-handler', '--']
+ });
}
- setAsDefaultProtocolClient() {
+ async setAsDefaultProtocolClient() {
// This Electron API is only available on Windows and macOS. There might be some
// hacks to make it work on Linux; see https://github.com/electron/electron/issues/6440
return (
this.isSupported() &&
- remote.app.setAsDefaultProtocolClient('atom', process.execPath, [
- '--uri-handler',
- '--'
- ])
+ ipcRenderer.invoke('setAsDefaultProtocolClient', {
+ protocol: 'atom',
+ path: process.execPath,
+ args: ['--uri-handler', '--']
+ })
);
}
- initialize(config, notifications) {
+ async initialize(config, notifications) {
if (!this.isSupported()) {
return;
}
@@ -37,12 +39,12 @@ module.exports = class ProtocolHandlerInstaller {
const behaviorWhenNotProtocolClient = config.get(SETTING);
switch (behaviorWhenNotProtocolClient) {
case PROMPT:
- if (!this.isDefaultProtocolClient()) {
+ if (await !this.isDefaultProtocolClient()) {
this.promptToBecomeProtocolClient(config, notifications);
}
break;
case ALWAYS:
- if (!this.isDefaultProtocolClient()) {
+ if (await !this.isDefaultProtocolClient()) {
this.setAsDefaultProtocolClient();
}
break;
diff --git a/src/reopen-project-menu-manager.js b/src/reopen-project-menu-manager.js
index 9dd695b45..d1d553957 100644
--- a/src/reopen-project-menu-manager.js
+++ b/src/reopen-project-menu-manager.js
@@ -68,7 +68,7 @@ module.exports = class ReopenProjectMenuManager {
async applyWindowsJumpListRemovals() {
if (process.platform !== 'win32') return;
if (this.app === undefined) {
- this.app = require('remote').app;
+ this.app = require('electron').remote.app;
}
const removed = this.app
@@ -89,7 +89,7 @@ module.exports = class ReopenProjectMenuManager {
updateWindowsJumpList() {
if (process.platform !== 'win32') return;
if (this.app === undefined) {
- this.app = require('remote').app;
+ this.app = require('electron').remote.app;
}
this.app.setJumpList([
@@ -146,9 +146,11 @@ module.exports = class ReopenProjectMenuManager {
static createProjectsMenu(projects) {
return {
label: 'File',
+ id: 'File',
submenu: [
{
label: 'Reopen Project',
+ id: 'Reopen Project',
submenu: projects.map((project, index) => ({
label: this.createLabel(project),
command: 'application:reopen-project',
diff --git a/src/state-store.js b/src/state-store.js
index e8e51afff..840ec1831 100644
--- a/src/state-store.js
+++ b/src/state-store.js
@@ -13,6 +13,13 @@ module.exports = class StateStore {
const dbOpenRequest = indexedDB.open(this.databaseName, this.version);
dbOpenRequest.onupgradeneeded = event => {
let db = event.target.result;
+ db.onerror = error => {
+ atom.notifications.addFatalError('Error loading database', {
+ stack: new Error('Error loading database').stack,
+ dismissable: true
+ });
+ console.error('Error loading database', error);
+ };
db.createObjectStore('states');
};
dbOpenRequest.onsuccess = () => {
@@ -20,6 +27,10 @@ module.exports = class StateStore {
resolve(dbOpenRequest.result);
};
dbOpenRequest.onerror = error => {
+ atom.notifications.addFatalError('Could not connect to indexedDB', {
+ stack: new Error('Could not connect to indexedDB').stack,
+ dismissable: true
+ });
console.error('Could not connect to indexedDB', error);
this.connected = false;
resolve(null);
@@ -43,7 +54,7 @@ module.exports = class StateStore {
this.dbPromise.then(db => {
if (db == null) return resolve();
- var request = db
+ const request = db
.transaction(['states'], 'readwrite')
.objectStore('states')
.put({ value: value, storedAt: new Date().toString() }, key);
@@ -59,7 +70,7 @@ module.exports = class StateStore {
if (!db) return;
return new Promise((resolve, reject) => {
- var request = db
+ const request = db
.transaction(['states'])
.objectStore('states')
.get(key);
@@ -83,7 +94,7 @@ module.exports = class StateStore {
this.dbPromise.then(db => {
if (db == null) return resolve();
- var request = db
+ const request = db
.transaction(['states'], 'readwrite')
.objectStore('states')
.delete(key);
@@ -99,7 +110,7 @@ module.exports = class StateStore {
if (!db) return;
return new Promise((resolve, reject) => {
- var request = db
+ const request = db
.transaction(['states'], 'readwrite')
.objectStore('states')
.clear();
@@ -115,7 +126,7 @@ module.exports = class StateStore {
if (!db) return;
return new Promise((resolve, reject) => {
- var request = db
+ const request = db
.transaction(['states'])
.objectStore('states')
.count();
diff --git a/src/style-manager.js b/src/style-manager.js
index f29393805..fa4d37981 100644
--- a/src/style-manager.js
+++ b/src/style-manager.js
@@ -4,7 +4,7 @@ const fs = require('fs-plus');
const path = require('path');
const postcss = require('postcss');
const selectorParser = require('postcss-selector-parser');
-const StylesElement = require('./styles-element');
+const { createStylesElement } = require('./styles-element');
const DEPRECATED_SYNTAX_SELECTORS = require('./deprecated-syntax-selectors');
// Extended: A singleton instance of this class available via `atom.styles`,
@@ -254,7 +254,7 @@ module.exports = class StyleManager {
}
buildStylesElement() {
- var stylesElement = new StylesElement();
+ const stylesElement = createStylesElement();
stylesElement.initialize(this);
return stylesElement;
}
diff --git a/src/styles-element.coffee b/src/styles-element.coffee
deleted file mode 100644
index 2c53300c2..000000000
--- a/src/styles-element.coffee
+++ /dev/null
@@ -1,82 +0,0 @@
-{Emitter, CompositeDisposable} = require 'event-kit'
-
-class StylesElement extends HTMLElement
- subscriptions: null
- context: null
-
- onDidAddStyleElement: (callback) ->
- @emitter.on 'did-add-style-element', callback
-
- onDidRemoveStyleElement: (callback) ->
- @emitter.on 'did-remove-style-element', callback
-
- onDidUpdateStyleElement: (callback) ->
- @emitter.on 'did-update-style-element', callback
-
- createdCallback: ->
- @subscriptions = new CompositeDisposable
- @emitter = new Emitter
- @styleElementClonesByOriginalElement = new WeakMap
-
- attachedCallback: ->
- @context = @getAttribute('context') ? undefined
-
- detachedCallback: ->
- @subscriptions.dispose()
- @subscriptions = new CompositeDisposable
-
- attributeChangedCallback: (attrName, oldVal, newVal) ->
- @contextChanged() if attrName is 'context'
-
- initialize: (@styleManager) ->
- throw new Error("Must pass a styleManager parameter when initializing a StylesElement") unless @styleManager?
-
- @subscriptions.add @styleManager.observeStyleElements(@styleElementAdded.bind(this))
- @subscriptions.add @styleManager.onDidRemoveStyleElement(@styleElementRemoved.bind(this))
- @subscriptions.add @styleManager.onDidUpdateStyleElement(@styleElementUpdated.bind(this))
-
- contextChanged: ->
- return unless @subscriptions?
-
- @styleElementRemoved(child) for child in Array::slice.call(@children)
- @context = @getAttribute('context')
- @styleElementAdded(styleElement) for styleElement in @styleManager.getStyleElements()
- return
-
- styleElementAdded: (styleElement) ->
- return unless @styleElementMatchesContext(styleElement)
-
- styleElementClone = styleElement.cloneNode(true)
- styleElementClone.sourcePath = styleElement.sourcePath
- styleElementClone.context = styleElement.context
- styleElementClone.priority = styleElement.priority
- @styleElementClonesByOriginalElement.set(styleElement, styleElementClone)
-
- priority = styleElement.priority
- if priority?
- for child in @children
- if child.priority > priority
- insertBefore = child
- break
-
- @insertBefore(styleElementClone, insertBefore)
- @emitter.emit 'did-add-style-element', styleElementClone
-
- styleElementRemoved: (styleElement) ->
- return unless @styleElementMatchesContext(styleElement)
-
- styleElementClone = @styleElementClonesByOriginalElement.get(styleElement) ? styleElement
- styleElementClone.remove()
- @emitter.emit 'did-remove-style-element', styleElementClone
-
- styleElementUpdated: (styleElement) ->
- return unless @styleElementMatchesContext(styleElement)
-
- styleElementClone = @styleElementClonesByOriginalElement.get(styleElement)
- styleElementClone.textContent = styleElement.textContent
- @emitter.emit 'did-update-style-element', styleElementClone
-
- styleElementMatchesContext: (styleElement) ->
- not @context? or styleElement.context is @context
-
-module.exports = StylesElement = document.registerElement 'atom-styles', prototype: StylesElement.prototype
diff --git a/src/styles-element.js b/src/styles-element.js
new file mode 100644
index 000000000..94c287dc0
--- /dev/null
+++ b/src/styles-element.js
@@ -0,0 +1,151 @@
+const { Emitter, CompositeDisposable } = require('event-kit');
+
+class StylesElement extends HTMLElement {
+ constructor() {
+ super();
+ this.subscriptions = new CompositeDisposable();
+ this.emitter = new Emitter();
+ this.styleElementClonesByOriginalElement = new WeakMap();
+ this.context = null;
+ }
+
+ onDidAddStyleElement(callback) {
+ this.emitter.on('did-add-style-element', callback);
+ }
+
+ onDidRemoveStyleElement(callback) {
+ this.emitter.on('did-remove-style-element', callback);
+ }
+
+ onDidUpdateStyleElement(callback) {
+ this.emitter.on('did-update-style-element', callback);
+ }
+
+ connectedCallback() {
+ let left;
+ this.context =
+ (left = this.getAttribute('context')) != null ? left : undefined;
+ }
+
+ disconnectedCallback() {
+ this.subscriptions.dispose();
+ this.subscriptions = new CompositeDisposable();
+ }
+
+ static get observedAttributes() {
+ return ['context'];
+ }
+
+ attributeChangedCallback(attrName) {
+ if (attrName === 'context') {
+ return this.contextChanged();
+ }
+ }
+
+ initialize(styleManager) {
+ this.styleManager = styleManager;
+ if (this.styleManager == null) {
+ throw new Error(
+ 'Must pass a styleManager parameter when initializing a StylesElement'
+ );
+ }
+
+ this.subscriptions.add(
+ this.styleManager.observeStyleElements(this.styleElementAdded.bind(this))
+ );
+ this.subscriptions.add(
+ this.styleManager.onDidRemoveStyleElement(
+ this.styleElementRemoved.bind(this)
+ )
+ );
+ this.subscriptions.add(
+ this.styleManager.onDidUpdateStyleElement(
+ this.styleElementUpdated.bind(this)
+ )
+ );
+ }
+
+ contextChanged() {
+ if (this.subscriptions == null) {
+ return;
+ }
+
+ for (let child of Array.from(Array.prototype.slice.call(this.children))) {
+ this.styleElementRemoved(child);
+ }
+ this.context = this.getAttribute('context');
+ for (let styleElement of Array.from(this.styleManager.getStyleElements())) {
+ this.styleElementAdded(styleElement);
+ }
+ }
+
+ styleElementAdded(styleElement) {
+ let insertBefore;
+ if (!this.styleElementMatchesContext(styleElement)) {
+ return;
+ }
+
+ const styleElementClone = styleElement.cloneNode(true);
+ styleElementClone.sourcePath = styleElement.sourcePath;
+ styleElementClone.context = styleElement.context;
+ styleElementClone.priority = styleElement.priority;
+ this.styleElementClonesByOriginalElement.set(
+ styleElement,
+ styleElementClone
+ );
+
+ const { priority } = styleElement;
+ if (priority != null) {
+ for (let child of this.children) {
+ if (child.priority > priority) {
+ insertBefore = child;
+ break;
+ }
+ }
+ }
+
+ this.insertBefore(styleElementClone, insertBefore);
+ this.emitter.emit('did-add-style-element', styleElementClone);
+ }
+
+ styleElementRemoved(styleElement) {
+ let left;
+ if (!this.styleElementMatchesContext(styleElement)) {
+ return;
+ }
+
+ const styleElementClone =
+ (left = this.styleElementClonesByOriginalElement.get(styleElement)) !=
+ null
+ ? left
+ : styleElement;
+ styleElementClone.remove();
+ this.emitter.emit('did-remove-style-element', styleElementClone);
+ }
+
+ styleElementUpdated(styleElement) {
+ if (!this.styleElementMatchesContext(styleElement)) {
+ return;
+ }
+
+ const styleElementClone = this.styleElementClonesByOriginalElement.get(
+ styleElement
+ );
+ styleElementClone.textContent = styleElement.textContent;
+ this.emitter.emit('did-update-style-element', styleElementClone);
+ }
+
+ styleElementMatchesContext(styleElement) {
+ return this.context == null || styleElement.context === this.context;
+ }
+}
+
+window.customElements.define('atom-styles', StylesElement);
+
+function createStylesElement() {
+ return document.createElement('atom-styles');
+}
+
+module.exports = {
+ createStylesElement
+};
diff --git a/src/task.coffee b/src/task.coffee
index 4f41cd02e..fa09c69f1 100644
--- a/src/task.coffee
+++ b/src/task.coffee
@@ -84,23 +84,17 @@ class Task
# Routes messages from the child to the appropriate event.
handleEvents: ->
- # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3.
- # Remove the argument when migrating to electron v4.
- @childProcess.removeAllListeners('message')
+ @childProcess.removeAllListeners()
@childProcess.on 'message', ({event, args}) =>
@emitter.emit(event, args) if @childProcess?
# Catch the errors that happened before task-bootstrap.
if @childProcess.stdout?
- # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3.
- # Remove the argument when migrating to electron v4.
- @childProcess.stdout.removeAllListeners('data')
+ @childProcess.stdout.removeAllListeners()
@childProcess.stdout.on 'data', (data) -> console.log data.toString()
if @childProcess.stderr?
- # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3.
- # Remove the argument when migrating to electron v4.
- @childProcess.stderr.removeAllListeners('data')
+ @childProcess.stderr.removeAllListeners()
@childProcess.stderr.on 'data', (data) -> console.error data.toString()
# Public: Starts the task.
@@ -153,11 +147,9 @@ class Task
terminate: ->
return false unless @childProcess?
- # TodoElectronIssue: removeAllListeners() without arguments does not work on electron v3.
- # Remove the argument when migrating to electron v4.
- @childProcess.removeAllListeners('message')
- @childProcess.stdout?.removeAllListeners('data')
- @childProcess.stderr?.removeAllListeners('data')
+ @childProcess.removeAllListeners()
+ @childProcess.stdout?.removeAllListeners()
+ @childProcess.stderr?.removeAllListeners()
@childProcess.kill()
@childProcess = null
diff --git a/src/text-editor-component.js b/src/text-editor-component.js
index 1281fa5a5..b00e16afa 100644
--- a/src/text-editor-component.js
+++ b/src/text-editor-component.js
@@ -67,7 +67,7 @@ module.exports = class TextEditorComponent {
} else {
if (!TextEditorElement)
TextEditorElement = require('./text-editor-element');
- this.element = new TextEditorElement();
+ this.element = TextEditorElement.createTextEditorElement();
}
this.element.initialize(this);
this.virtualNode = $('atom-text-editor');
@@ -306,7 +306,7 @@ module.exports = class TextEditorComponent {
this.remeasureAllBlockDecorations = false;
const decorations = this.props.model.getDecorations();
- for (var i = 0; i < decorations.length; i++) {
+ for (let i = 0; i < decorations.length; i++) {
const decoration = decorations[i];
const marker = decoration.getMarker();
if (marker.isValid() && decoration.getProperties().type === 'block') {
@@ -1656,15 +1656,6 @@ module.exports = class TextEditorComponent {
// Called by TextEditorElement so that focus events can be handled before
// the element is attached to the DOM.
didFocus() {
- // This element can be focused from a parent custom element's
- // attachedCallback before *its* attachedCallback is fired. This protects
- // against that case.
- if (!this.attached) this.didAttach();
-
- // The element can be focused before the intersection observer detects that
- // it has been shown for the first time. If this element is being focused,
- // it is necessarily visible, so we call `didShow` to ensure the hidden
- // input is rendered before we try to shift focus to it.
if (!this.visible) this.didShow();
if (!this.focused) {
@@ -1969,8 +1960,12 @@ module.exports = class TextEditorComponent {
// On Linux, pasting happens on middle click. A textInput event with the
// contents of the selection clipboard will be dispatched by the browser
- // automatically on mouseup.
- if (platform === 'linux' && this.isInputEnabled())
+ // automatically on mouseup if editor.selectionClipboard is set to true.
+ if (
+ platform === 'linux' &&
+ this.isInputEnabled() &&
+ atom.config.get('editor.selectionClipboard')
+ )
model.insertText(clipboard.readText('selection'));
return;
}
@@ -2174,7 +2169,7 @@ module.exports = class TextEditorComponent {
}
autoscrollOnMouseDrag({ clientX, clientY }, verticalOnly = false) {
- var {
+ let {
top,
bottom,
left,
@@ -4288,7 +4283,7 @@ class LinesTileComponent {
}
updateLines(oldProps, newProps) {
- var {
+ const {
screenLines,
tileStartRow,
lineDecorations,
@@ -4298,20 +4293,20 @@ class LinesTileComponent {
lineComponentsByScreenLineId
} = newProps;
- var oldScreenLines = oldProps.screenLines;
- var newScreenLines = screenLines;
- var oldScreenLinesEndIndex = oldScreenLines.length;
- var newScreenLinesEndIndex = newScreenLines.length;
- var oldScreenLineIndex = 0;
- var newScreenLineIndex = 0;
- var lineComponentIndex = 0;
+ const oldScreenLines = oldProps.screenLines;
+ const newScreenLines = screenLines;
+ const oldScreenLinesEndIndex = oldScreenLines.length;
+ const newScreenLinesEndIndex = newScreenLines.length;
+ let oldScreenLineIndex = 0;
+ let newScreenLineIndex = 0;
+ let lineComponentIndex = 0;
while (
oldScreenLineIndex < oldScreenLinesEndIndex ||
newScreenLineIndex < newScreenLinesEndIndex
) {
- var oldScreenLine = oldScreenLines[oldScreenLineIndex];
- var newScreenLine = newScreenLines[newScreenLineIndex];
+ const oldScreenLine = oldScreenLines[oldScreenLineIndex];
+ const newScreenLine = newScreenLines[newScreenLineIndex];
if (oldScreenLineIndex >= oldScreenLinesEndIndex) {
var newScreenLineComponent = new LineComponent({
@@ -4334,7 +4329,7 @@ class LinesTileComponent {
oldScreenLineIndex++;
} else if (oldScreenLine === newScreenLine) {
- var lineComponent = this.lineComponents[lineComponentIndex];
+ const lineComponent = this.lineComponents[lineComponentIndex];
lineComponent.update({
screenRow: tileStartRow + newScreenLineIndex,
lineDecoration: lineDecorations[newScreenLineIndex],
@@ -4345,17 +4340,17 @@ class LinesTileComponent {
newScreenLineIndex++;
lineComponentIndex++;
} else {
- var oldScreenLineIndexInNewScreenLines = newScreenLines.indexOf(
+ const oldScreenLineIndexInNewScreenLines = newScreenLines.indexOf(
oldScreenLine
);
- var newScreenLineIndexInOldScreenLines = oldScreenLines.indexOf(
+ const newScreenLineIndexInOldScreenLines = oldScreenLines.indexOf(
newScreenLine
);
if (
newScreenLineIndex < oldScreenLineIndexInNewScreenLines &&
oldScreenLineIndexInNewScreenLines < newScreenLinesEndIndex
) {
- var newScreenLineComponents = [];
+ const newScreenLineComponents = [];
while (newScreenLineIndex < oldScreenLineIndexInNewScreenLines) {
// eslint-disable-next-line no-redeclare
var newScreenLineComponent = new LineComponent({
@@ -4394,7 +4389,9 @@ class LinesTileComponent {
oldScreenLineIndex++;
}
} else {
- var oldScreenLineComponent = this.lineComponents[lineComponentIndex];
+ const oldScreenLineComponent = this.lineComponents[
+ lineComponentIndex
+ ];
// eslint-disable-next-line no-redeclare
var newScreenLineComponent = new LineComponent({
screenLine: newScreenLines[newScreenLineIndex],
@@ -4421,13 +4418,13 @@ class LinesTileComponent {
}
getFirstElementForScreenLine(oldProps, screenLine) {
- var blockDecorations = oldProps.blockDecorations
+ const blockDecorations = oldProps.blockDecorations
? oldProps.blockDecorations.get(screenLine.id)
: null;
if (blockDecorations) {
- var blockDecorationElementsBeforeOldScreenLine = [];
+ const blockDecorationElementsBeforeOldScreenLine = [];
for (let i = 0; i < blockDecorations.length; i++) {
- var decoration = blockDecorations[i];
+ const decoration = blockDecorations[i];
if (decoration.position !== 'after') {
blockDecorationElementsBeforeOldScreenLine.push(
TextEditor.viewForItem(decoration.item)
@@ -4440,7 +4437,7 @@ class LinesTileComponent {
i < blockDecorationElementsBeforeOldScreenLine.length;
i++
) {
- var blockDecorationElement =
+ const blockDecorationElement =
blockDecorationElementsBeforeOldScreenLine[i];
if (
!blockDecorationElementsBeforeOldScreenLine.includes(
@@ -4456,19 +4453,19 @@ class LinesTileComponent {
}
updateBlockDecorations(oldProps, newProps) {
- var { blockDecorations, lineComponentsByScreenLineId } = newProps;
+ const { blockDecorations, lineComponentsByScreenLineId } = newProps;
if (oldProps.blockDecorations) {
oldProps.blockDecorations.forEach((oldDecorations, screenLineId) => {
- var newDecorations = newProps.blockDecorations
+ const newDecorations = newProps.blockDecorations
? newProps.blockDecorations.get(screenLineId)
: null;
- for (var i = 0; i < oldDecorations.length; i++) {
- var oldDecoration = oldDecorations[i];
+ for (let i = 0; i < oldDecorations.length; i++) {
+ const oldDecoration = oldDecorations[i];
if (newDecorations && newDecorations.includes(oldDecoration))
continue;
- var element = TextEditor.viewForItem(oldDecoration.item);
+ const element = TextEditor.viewForItem(oldDecoration.item);
if (element.parentElement !== this.element) continue;
element.remove();
@@ -5130,11 +5127,11 @@ class NodePool {
}
getElement(type, className, style) {
- var element;
- var elementsByDepth = this.elementsByType[type];
+ let element;
+ const elementsByDepth = this.elementsByType[type];
if (elementsByDepth) {
while (elementsByDepth.length > 0) {
- var elements = elementsByDepth[elementsByDepth.length - 1];
+ const elements = elementsByDepth[elementsByDepth.length - 1];
if (elements && elements.length > 0) {
element = elements.pop();
if (elements.length === 0) elementsByDepth.pop();
@@ -5155,7 +5152,7 @@ class NodePool {
while (element.firstChild) element.firstChild.remove();
return element;
} else {
- var newElement = document.createElement(type);
+ const newElement = document.createElement(type);
if (className) newElement.className = className;
if (style) Object.assign(newElement.style, style);
return newElement;
@@ -5164,7 +5161,7 @@ class NodePool {
getTextNode(text) {
if (this.textNodes.length > 0) {
- var node = this.textNodes.pop();
+ const node = this.textNodes.pop();
node.textContent = text;
return node;
} else {
@@ -5173,24 +5170,24 @@ class NodePool {
}
release(node, depth = 0) {
- var { nodeName } = node;
+ const { nodeName } = node;
if (nodeName === '#text') {
this.textNodes.push(node);
} else {
- var elementsByDepth = this.elementsByType[nodeName];
+ let elementsByDepth = this.elementsByType[nodeName];
if (!elementsByDepth) {
elementsByDepth = [];
this.elementsByType[nodeName] = elementsByDepth;
}
- var elements = elementsByDepth[depth];
+ let elements = elementsByDepth[depth];
if (!elements) {
elements = [];
elementsByDepth[depth] = elements;
}
elements.push(node);
- for (var i = 0; i < node.childNodes.length; i++) {
+ for (let i = 0; i < node.childNodes.length; i++) {
this.release(node.childNodes[i], depth + 1);
}
}
diff --git a/src/text-editor-element.js b/src/text-editor-element.js
index 419767bd0..0ce67f7e6 100644
--- a/src/text-editor-element.js
+++ b/src/text-editor-element.js
@@ -29,7 +29,8 @@ class TextEditorElement extends HTMLElement {
return this;
}
- createdCallback() {
+ constructor() {
+ super();
this.emitter = new Emitter();
this.initialText = this.textContent;
if (this.tabIndex == null) this.tabIndex = -1;
@@ -39,16 +40,20 @@ class TextEditorElement extends HTMLElement {
this.addEventListener('blur', event => this.getComponent().didBlur(event));
}
- attachedCallback() {
+ connectedCallback() {
this.getComponent().didAttach();
this.emitter.emit('did-attach');
}
- detachedCallback() {
+ disconnectedCallback() {
this.emitter.emit('did-detach');
this.getComponent().didDetach();
}
+ static get observedAttributes() {
+ return ['mini', 'placeholder-text', 'gutter-hidden', 'readonly'];
+ }
+
attributeChangedCallback(name, oldValue, newValue) {
if (this.component) {
switch (name) {
@@ -352,8 +357,12 @@ class TextEditorElement extends HTMLElement {
getFirstVisibleScreenColumn() {
return this.getModel().getFirstVisibleScreenColumn();
}
+
+ static createTextEditorElement() {
+ return document.createElement('atom-text-editor');
+ }
}
-module.exports = document.registerElement('atom-text-editor', {
- prototype: TextEditorElement.prototype
-});
+window.customElements.define('atom-text-editor', TextEditorElement);
+
+module.exports = TextEditorElement;
diff --git a/src/text-editor-registry.js b/src/text-editor-registry.js
index ba62169a2..b5264fb5d 100644
--- a/src/text-editor-registry.js
+++ b/src/text-editor-registry.js
@@ -110,11 +110,33 @@ module.exports = class TextEditorRegistry {
//
// Returns a {Boolean} indicating whether the editor was successfully removed.
remove(editor) {
- var removed = this.editors.delete(editor);
+ const removed = this.editors.delete(editor);
editor.registered = false;
return removed;
}
+ // Gets the currently active text editor.
+ //
+ // Returns the currently active text editor, or `null` if there is none.
+ getActiveTextEditor() {
+ for (let ed of this.editors) {
+ // fast path, works as long as there's a shadow DOM inside the text editor
+ if (ed.getElement() === document.activeElement) {
+ return ed;
+ } else {
+ let editorElement = ed.getElement();
+ let current = document.activeElement;
+ while (current) {
+ if (current === editorElement) {
+ return ed;
+ }
+ current = current.parentNode;
+ }
+ }
+ }
+ return null;
+ }
+
// Invoke the given callback with all the current and future registered
// `TextEditors`.
//
diff --git a/src/text-editor.js b/src/text-editor.js
index 7debe33ce..ed6b0e68f 100644
--- a/src/text-editor.js
+++ b/src/text-editor.js
@@ -4578,10 +4578,20 @@ module.exports = class TextEditor {
);
}
- bufferRangeForScopeAtPosition(scopeSelector, position) {
+ // Extended: Get the range in buffer coordinates of all tokens surrounding the
+ // given position in buffer coordinates that match the given scope selector.
+ //
+ // For example, if you wanted to find the string surrounding the cursor, you
+ // could call `editor.bufferRangeForScopeAtPosition(".string.quoted", this.getCursorBufferPosition())`.
+ //
+ // * `scopeSelector` {String} selector. e.g. `'.source.ruby'`
+ // * `bufferPosition` A {Point} or {Array} of [row, column]
+ //
+ // Returns a {Range}.
+ bufferRangeForScopeAtPosition(scopeSelector, bufferPosition) {
return this.buffer
.getLanguageMode()
- .bufferRangeForScopeAtPosition(scopeSelector, position);
+ .bufferRangeForScopeAtPosition(scopeSelector, bufferPosition);
}
// Extended: Determine if the given row is entirely a comment
diff --git a/src/text-mate-language-mode.js b/src/text-mate-language-mode.js
index 8f7977e3e..13d5ed13f 100644
--- a/src/text-mate-language-mode.js
+++ b/src/text-mate-language-mode.js
@@ -70,9 +70,7 @@ class TextMateLanguageMode {
getNonWordCharacters(position) {
const scope = this.scopeDescriptorForPosition(position);
- const rawValue = this.config.getRawValue('editor.nonWordCharacters');
- const scopedValue = this.config.get('editor.nonWordCharacters', { scope });
- return `${scopedValue}${rawValue}`;
+ return this.config.get('editor.nonWordCharacters', { scope });
}
/*
@@ -331,7 +329,7 @@ class TextMateLanguageMode {
let rowsRemaining = this.chunkSize;
while (this.firstInvalidRow() != null && rowsRemaining > 0) {
- var endRow, filledRegion;
+ let endRow, filledRegion;
const startRow = this.invalidRows.shift();
const lastRow = this.buffer.getLastRow();
if (startRow > lastRow) continue;
diff --git a/src/tooltip.js b/src/tooltip.js
index 57d2e35e6..3d59f8036 100644
--- a/src/tooltip.js
+++ b/src/tooltip.js
@@ -7,9 +7,9 @@ const listen = require('./delegated-listener');
// This tooltip class is derived from Bootstrap 3, but modified to not require
// jQuery, which is an expensive dependency we want to eliminate.
-var followThroughTimer = null;
+let followThroughTimer = null;
-var Tooltip = function(element, options, viewRegistry) {
+const Tooltip = function(element, options, viewRegistry) {
this.options = null;
this.enabled = null;
this.timeout = null;
@@ -66,9 +66,9 @@ Tooltip.prototype.init = function(element, options) {
);
}
- var triggers = this.options.trigger.split(' ');
+ const triggers = this.options.trigger.split(' ');
- for (var i = triggers.length; i--; ) {
+ for (let i = triggers.length; i--; ) {
var trigger = triggers[i];
if (trigger === 'click') {
@@ -91,7 +91,7 @@ Tooltip.prototype.init = function(element, options) {
} else if (trigger === 'manual') {
this.show();
} else {
- var eventIn, eventOut;
+ let eventIn, eventOut;
if (trigger === 'hover') {
this.hideOnKeydownOutsideOfTooltip = () => this.hide();
@@ -175,12 +175,12 @@ Tooltip.prototype.getOptions = function(options) {
};
Tooltip.prototype.getDelegateOptions = function() {
- var options = {};
- var defaults = this.getDefaults();
+ const options = {};
+ const defaults = this.getDefaults();
if (this._options) {
- for (var key of Object.getOwnPropertyNames(this._options)) {
- var value = this._options[key];
+ for (const key of Object.getOwnPropertyNames(this._options)) {
+ const value = this._options[key];
if (defaults[key] !== value) options[key] = value;
}
}
@@ -223,7 +223,7 @@ Tooltip.prototype.enter = function(event) {
};
Tooltip.prototype.isInStateTrue = function() {
- for (var key in this.inState) {
+ for (const key in this.inState) {
if (this.inState[key]) return true;
}
@@ -272,9 +272,9 @@ Tooltip.prototype.show = function() {
);
}
- var tip = this.getTooltipElement();
+ const tip = this.getTooltipElement();
this.startObservingMutations();
- var tipId = this.getUID('tooltip');
+ const tipId = this.getUID('tooltip');
this.setContent();
tip.setAttribute('id', tipId);
@@ -282,13 +282,13 @@ Tooltip.prototype.show = function() {
if (this.options.animation) tip.classList.add('fade');
- var placement =
+ let placement =
typeof this.options.placement === 'function'
? this.options.placement.call(this, tip, this.element)
: this.options.placement;
- var autoToken = /\s?auto?\s?/i;
- var autoPlace = autoToken.test(placement);
+ const autoToken = /\s?auto?\s?/i;
+ const autoPlace = autoToken.test(placement);
if (autoPlace) placement = placement.replace(autoToken, '') || 'top';
tip.remove();
@@ -299,13 +299,13 @@ Tooltip.prototype.show = function() {
document.body.appendChild(tip);
- var pos = this.element.getBoundingClientRect();
- var actualWidth = tip.offsetWidth;
- var actualHeight = tip.offsetHeight;
+ const pos = this.element.getBoundingClientRect();
+ const actualWidth = tip.offsetWidth;
+ const actualHeight = tip.offsetHeight;
if (autoPlace) {
- var orgPlacement = placement;
- var viewportDim = this.viewport.getBoundingClientRect();
+ const orgPlacement = placement;
+ const viewportDim = this.viewport.getBoundingClientRect();
placement =
placement === 'bottom' && pos.bottom + actualHeight > viewportDim.bottom
@@ -322,7 +322,7 @@ Tooltip.prototype.show = function() {
tip.classList.add(placement);
}
- var calculatedOffset = this.getCalculatedOffset(
+ const calculatedOffset = this.getCalculatedOffset(
placement,
pos,
actualWidth,
@@ -331,7 +331,7 @@ Tooltip.prototype.show = function() {
this.applyPlacement(calculatedOffset, placement);
- var prevHoverState = this.hoverState;
+ const prevHoverState = this.hoverState;
this.hoverState = null;
if (prevHoverState === 'out') this.leave();
@@ -339,15 +339,15 @@ Tooltip.prototype.show = function() {
};
Tooltip.prototype.applyPlacement = function(offset, placement) {
- var tip = this.getTooltipElement();
+ const tip = this.getTooltipElement();
- var width = tip.offsetWidth;
- var height = tip.offsetHeight;
+ const width = tip.offsetWidth;
+ const height = tip.offsetHeight;
// manually read margins because getBoundingClientRect includes difference
- var computedStyle = window.getComputedStyle(tip);
- var marginTop = parseInt(computedStyle.marginTop, 10);
- var marginLeft = parseInt(computedStyle.marginLeft, 10);
+ const computedStyle = window.getComputedStyle(tip);
+ const marginTop = parseInt(computedStyle.marginTop, 10);
+ const marginLeft = parseInt(computedStyle.marginLeft, 10);
offset.top += marginTop;
offset.left += marginLeft;
@@ -358,14 +358,14 @@ Tooltip.prototype.applyPlacement = function(offset, placement) {
tip.classList.add('in');
// check to see if placing tip in new offset caused the tip to resize itself
- var actualWidth = tip.offsetWidth;
- var actualHeight = tip.offsetHeight;
+ const actualWidth = tip.offsetWidth;
+ const actualHeight = tip.offsetHeight;
if (placement === 'top' && actualHeight !== height) {
offset.top = offset.top + height - actualHeight;
}
- var delta = this.getViewportAdjustedDelta(
+ const delta = this.getViewportAdjustedDelta(
placement,
offset,
actualWidth,
@@ -375,11 +375,11 @@ Tooltip.prototype.applyPlacement = function(offset, placement) {
if (delta.left) offset.left += delta.left;
else offset.top += delta.top;
- var isVertical = /top|bottom/.test(placement);
- var arrowDelta = isVertical
+ const isVertical = /top|bottom/.test(placement);
+ const arrowDelta = isVertical
? delta.left * 2 - width + actualWidth
: delta.top * 2 - height + actualHeight;
- var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';
+ const arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';
tip.style.top = offset.top + 'px';
tip.style.left = offset.left + 'px';
@@ -388,8 +388,8 @@ Tooltip.prototype.applyPlacement = function(offset, placement) {
};
Tooltip.prototype.replaceArrow = function(delta, dimension, isVertical) {
- var arrow = this.getArrowElement();
- var amount = 50 * (1 - delta / dimension) + '%';
+ const arrow = this.getArrowElement();
+ const amount = 50 * (1 - delta / dimension) + '%';
if (isVertical) {
arrow.style.left = amount;
@@ -401,17 +401,17 @@ Tooltip.prototype.replaceArrow = function(delta, dimension, isVertical) {
};
Tooltip.prototype.setContent = function() {
- var tip = this.getTooltipElement();
+ const tip = this.getTooltipElement();
if (this.options.class) {
tip.classList.add(this.options.class);
}
- var inner = tip.querySelector('.tooltip-inner');
+ const inner = tip.querySelector('.tooltip-inner');
if (this.options.item) {
inner.appendChild(this.viewRegistry.getView(this.options.item));
} else {
- var title = this.getTitle();
+ const title = this.getTitle();
if (this.options.html) {
inner.innerHTML = title;
} else {
@@ -506,16 +506,16 @@ Tooltip.prototype.getViewportAdjustedDelta = function(
actualWidth,
actualHeight
) {
- var delta = { top: 0, left: 0 };
+ const delta = { top: 0, left: 0 };
if (!this.viewport) return delta;
- var viewportPadding =
+ const viewportPadding =
(this.options.viewport && this.options.viewport.padding) || 0;
- var viewportDimensions = this.viewport.getBoundingClientRect();
+ const viewportDimensions = this.viewport.getBoundingClientRect();
if (/right|left/.test(placement)) {
- var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll;
- var bottomEdgeOffset =
+ const topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll;
+ const bottomEdgeOffset =
pos.top + viewportPadding - viewportDimensions.scroll + actualHeight;
if (topEdgeOffset < viewportDimensions.top) {
// top overflow
@@ -529,8 +529,8 @@ Tooltip.prototype.getViewportAdjustedDelta = function(
viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;
}
} else {
- var leftEdgeOffset = pos.left - viewportPadding;
- var rightEdgeOffset = pos.left + viewportPadding + actualWidth;
+ const leftEdgeOffset = pos.left - viewportPadding;
+ const rightEdgeOffset = pos.left + viewportPadding + actualWidth;
if (leftEdgeOffset < viewportDimensions.left) {
// left overflow
delta.left = viewportDimensions.left - leftEdgeOffset;
@@ -545,7 +545,7 @@ Tooltip.prototype.getViewportAdjustedDelta = function(
};
Tooltip.prototype.getTitle = function() {
- var title = this.element.getAttribute('data-original-title');
+ const title = this.element.getAttribute('data-original-title');
if (title) {
return title;
} else {
@@ -617,7 +617,7 @@ Tooltip.prototype.destroy = function() {
};
Tooltip.prototype.getDelegateComponent = function(element) {
- var component = tooltipComponentsByElement.get(element);
+ let component = tooltipComponentsByElement.get(element);
if (!component) {
component = new Tooltip(
element,
@@ -630,26 +630,26 @@ Tooltip.prototype.getDelegateComponent = function(element) {
};
Tooltip.prototype.recalculatePosition = function() {
- var tip = this.getTooltipElement();
+ const tip = this.getTooltipElement();
- var placement =
+ let placement =
typeof this.options.placement === 'function'
? this.options.placement.call(this, tip, this.element)
: this.options.placement;
- var autoToken = /\s?auto?\s?/i;
- var autoPlace = autoToken.test(placement);
+ const autoToken = /\s?auto?\s?/i;
+ const autoPlace = autoToken.test(placement);
if (autoPlace) placement = placement.replace(autoToken, '') || 'top';
tip.classList.add(placement);
- var pos = this.element.getBoundingClientRect();
- var actualWidth = tip.offsetWidth;
- var actualHeight = tip.offsetHeight;
+ const pos = this.element.getBoundingClientRect();
+ const actualWidth = tip.offsetWidth;
+ const actualHeight = tip.offsetHeight;
if (autoPlace) {
- var orgPlacement = placement;
- var viewportDim = this.viewport.getBoundingClientRect();
+ const orgPlacement = placement;
+ const viewportDim = this.viewport.getBoundingClientRect();
placement =
placement === 'bottom' && pos.bottom + actualHeight > viewportDim.bottom
@@ -666,7 +666,7 @@ Tooltip.prototype.recalculatePosition = function() {
tip.classList.add(placement);
}
- var calculatedOffset = this.getCalculatedOffset(
+ const calculatedOffset = this.getCalculatedOffset(
placement,
pos,
actualWidth,
@@ -676,11 +676,11 @@ Tooltip.prototype.recalculatePosition = function() {
};
function extend() {
- var args = Array.prototype.slice.apply(arguments);
- var target = args.shift();
- var source = args.shift();
+ const args = Array.prototype.slice.apply(arguments);
+ const target = args.shift();
+ let source = args.shift();
while (source) {
- for (var key of Object.getOwnPropertyNames(source)) {
+ for (const key of Object.getOwnPropertyNames(source)) {
target[key] = source[key];
}
source = args.shift();
diff --git a/src/tree-indenter.js b/src/tree-indenter.js
new file mode 100644
index 000000000..c536edd48
--- /dev/null
+++ b/src/tree-indenter.js
@@ -0,0 +1,155 @@
+// const log = console.debug // in dev
+const log = () => {}; // in production
+
+module.exports = class TreeIndenter {
+ constructor(languageMode, scopes = undefined) {
+ this.languageMode = languageMode;
+ this.scopes =
+ scopes ||
+ languageMode.config.get('editor.scopes', {
+ scope: this.languageMode.rootScopeDescriptor
+ });
+ log('[TreeIndenter] constructor', this.scopes);
+ }
+
+ /** tree indenter is configured for this language */
+ get isConfigured() {
+ return !!this.scopes;
+ }
+
+ // Given a position, walk up the syntax tree, to find the highest level
+ // node that still starts here. This is to identify the column where this
+ // node (e.g., an HTML closing tag) ends.
+ _getHighestSyntaxNodeAtPosition(row, column = null) {
+ if (column == null) {
+ // Find the first character on the row that is not whitespace + 1
+ column = this.languageMode.buffer.lineForRow(row).search(/\S/);
+ }
+
+ let syntaxNode;
+ if (column >= 0) {
+ syntaxNode = this.languageMode.getSyntaxNodeAtPosition({ row, column });
+ while (
+ syntaxNode &&
+ syntaxNode.parent &&
+ syntaxNode.parent.startPosition.row === syntaxNode.startPosition.row &&
+ syntaxNode.parent.endPosition.row === syntaxNode.startPosition.row &&
+ syntaxNode.parent.startPosition.column ===
+ syntaxNode.startPosition.column
+ ) {
+ syntaxNode = syntaxNode.parent;
+ }
+ return syntaxNode;
+ }
+ }
+
+ /** Walk up the tree. Everytime we meet a scope type, check whether we
+ are coming from the first (resp. last) child. If so, we are opening
+ (resp. closing) that scope, i.e., do not count it. Otherwise, add 1.
+
+ This is the core function.
+
+ It might make more sense to reverse the direction of this walk, i.e.,
+ go from root to leaf instead.
+ */
+ _treeWalk(node, lastScope = null) {
+ if (node == null || node.parent == null) {
+ return 0;
+ } else {
+ let increment = 0;
+
+ const notFirstOrLastSibling =
+ node.previousSibling != null && node.nextSibling != null;
+
+ const isScope = this.scopes.indent[node.parent.type];
+ notFirstOrLastSibling && isScope && increment++;
+
+ const isScope2 = this.scopes.indentExceptFirst[node.parent.type];
+ !increment && isScope2 && node.previousSibling != null && increment++;
+
+ const isScope3 = this.scopes.indentExceptFirstOrBlock[node.parent.type];
+ !increment && isScope3 && node.previousSibling != null && increment++;
+
+ // apply current row, single line, type-based rules, e.g., 'else' or 'private:'
+ let typeDent = 0;
+ this.scopes.types.indent[node.type] && typeDent++;
+ this.scopes.types.outdent[node.type] && increment && typeDent--;
+ increment += typeDent;
+
+ // check whether the last (lower) indentation happened due to a scope that
+ // started on the same row and ends directly before this.
+ if (
+ lastScope &&
+ increment > 0 &&
+ // previous (lower) scope was a two-sided scope, reduce if starts on
+ // same row and ends right before
+ // TODO: this currently only works for scopes that have a single-character
+ // closing delimiter (like statement_blocks, but not HTML, for instance).
+ ((node.parent.startPosition.row === lastScope.node.startPosition.row &&
+ node.parent.endIndex <= lastScope.node.endIndex + 1) ||
+ // or this is a special scope (like if, while) and it's ends coincide
+ (isScope3 &&
+ (lastScope.node.endIndex === node.endIndex ||
+ node.parent.endIndex === node.endIndex)))
+ ) {
+ log('ignoring repeat', node.parent.type, lastScope);
+ increment = 0;
+ } else {
+ lastScope &&
+ log(
+ node.parent.startPosition.row,
+ lastScope.node.startPosition.row,
+ node.parent.endIndex,
+ lastScope.node.endIndex,
+ isScope3,
+ node.endIndex
+ );
+ }
+
+ log('treewalk', {
+ node,
+ notFirstOrLastSibling,
+ type: node.parent.type,
+ increment
+ });
+ const newLastScope =
+ isScope || isScope2 ? { node: node.parent } : lastScope;
+ return this._treeWalk(node.parent, newLastScope) + increment;
+ }
+ }
+
+ suggestedIndentForBufferRow(row, tabLength, options) {
+ // get current indentation for row
+ const line = this.languageMode.buffer.lineForRow(row);
+ const currentIndentation = this.languageMode.indentLevelForLine(
+ line,
+ tabLength
+ );
+
+ const syntaxNode = this._getHighestSyntaxNodeAtPosition(row);
+ if (!syntaxNode) {
+ const previousRow = Math.max(row - 1, 0);
+ const previousIndentation = this.languageMode.indentLevelForLine(
+ this.languageMode.indentLevelForLine(previousRow),
+ tabLength
+ );
+ return previousIndentation;
+ }
+ let indentation = this._treeWalk(syntaxNode);
+
+ // Special case for comments
+ if (
+ (syntaxNode.type === 'comment' || syntaxNode.type === 'description') &&
+ syntaxNode.startPosition.row < row &&
+ syntaxNode.endPosition.row > row
+ ) {
+ indentation += 1;
+ }
+
+ if (options && options.preserveLeadingWhitespace) {
+ indentation -= currentIndentation;
+ }
+
+ return indentation;
+ }
+};
diff --git a/src/tree-sitter-language-mode.js b/src/tree-sitter-language-mode.js
index cf296c250..3ffe4038e 100644
--- a/src/tree-sitter-language-mode.js
+++ b/src/tree-sitter-language-mode.js
@@ -7,6 +7,7 @@ const Token = require('./token');
const TokenizedLine = require('./tokenized-line');
const TextMateLanguageMode = require('./text-mate-language-mode');
const { matcherForSelector } = require('./selectors');
+const TreeIndenter = require('./tree-indenter');
let nextId = 0;
const MAX_RANGE = new Range(Point.ZERO, Point.INFINITY).freeze();
@@ -31,8 +32,7 @@ class TreeSitterLanguageMode {
this.grammar = grammar;
this.config = config;
this.grammarRegistry = grammars;
- this.parser = new Parser();
- this.rootLanguageLayer = new LanguageLayer(this, grammar, 0);
+ this.rootLanguageLayer = new LanguageLayer(null, this, grammar, 0);
this.injectionsMarkerLayer = buffer.addMarkerLayer();
if (syncTimeoutMicros != null) {
@@ -79,7 +79,6 @@ class TreeSitterLanguageMode {
destroy() {
this.injectionsMarkerLayer.destroy();
this.rootLanguageLayer = null;
- this.parser = null;
}
getLanguageId() {
@@ -145,7 +144,7 @@ class TreeSitterLanguageMode {
*/
buildHighlightIterator() {
- if (!this.rootLanguageLayer) return new NullHighlightIterator();
+ if (!this.rootLanguageLayer) return new NullLanguageModeHighlightIterator();
return new HighlightIterator(this);
}
@@ -196,13 +195,26 @@ class TreeSitterLanguageMode {
}
suggestedIndentForBufferRow(row, tabLength, options) {
- return this._suggestedIndentForLineWithScopeAtBufferRow(
- row,
- this.buffer.lineForRow(row),
- this.rootScopeDescriptor,
- tabLength,
- options
- );
+ if (!this.treeIndenter) {
+ this.treeIndenter = new TreeIndenter(this);
+ }
+
+ if (this.treeIndenter.isConfigured) {
+ const indent = this.treeIndenter.suggestedIndentForBufferRow(
+ row,
+ tabLength,
+ options
+ );
+ return indent;
+ } else {
+ return this._suggestedIndentForLineWithScopeAtBufferRow(
+ row,
+ this.buffer.lineForRow(row),
+ this.rootScopeDescriptor,
+ tabLength,
+ options
+ );
+ }
}
indentLevelForLine(line, tabLength) {
@@ -637,7 +649,8 @@ class TreeSitterLanguageMode {
}
class LanguageLayer {
- constructor(languageMode, grammar, depth) {
+ constructor(marker, languageMode, grammar, depth) {
+ this.marker = marker;
this.languageMode = languageMode;
this.grammar = grammar;
this.tree = null;
@@ -650,7 +663,7 @@ class LanguageLayer {
if (this.tree) {
return new LayerHighlightIterator(this, this.tree.walk());
} else {
- return new NullHighlightIterator();
+ return new NullLayerHighlightIterator();
}
}
@@ -687,10 +700,12 @@ class LanguageLayer {
}
destroy() {
+ this.tree = null;
+ this.destroyed = true;
+ this.marker.destroy();
for (const marker of this.languageMode.injectionsMarkerLayer.getMarkers()) {
if (marker.parentLanguageLayer === this) {
marker.languageLayer.destroy();
- marker.destroy();
}
}
}
@@ -726,8 +741,9 @@ class LanguageLayer {
if (nodeRangeSet) {
includedRanges = nodeRangeSet.getRanges(this.languageMode.buffer);
if (includedRanges.length === 0) {
- this.tree = null;
- this.destroyed = true;
+ const range = this.marker.getRange();
+ this.destroy();
+ this.languageMode.emitRangeUpdate(range);
return;
}
}
@@ -883,6 +899,7 @@ class LanguageLayer {
injectionRange
);
marker.languageLayer = new LanguageLayer(
+ marker,
this.languageMode,
grammar,
this.depth + 1
@@ -904,9 +921,8 @@ class LanguageLayer {
for (const marker of existingInjectionMarkers) {
if (!markersToUpdate.has(marker)) {
- marker.languageLayer.destroy();
this.languageMode.emitRangeUpdate(marker.getRange());
- marker.destroy();
+ marker.languageLayer.destroy();
}
}
@@ -1333,7 +1349,7 @@ class NodeCursorAdaptor {
}
}
-class NullHighlightIterator {
+class NullLanguageModeHighlightIterator {
seek() {
return [];
}
@@ -1352,6 +1368,25 @@ class NullHighlightIterator {
}
}
+class NullLayerHighlightIterator {
+ seek() {
+ return null;
+ }
+ compare() {
+ return 1;
+ }
+ moveToSuccessor() {}
+ getPosition() {
+ return Point.INFINITY;
+ }
+ getOpenScopeIds() {
+ return [];
+ }
+ getCloseScopeIds() {
+ return [];
+ }
+}
+
class NodeRangeSet {
constructor(previous, nodes, newlinesBetween, includeChildren) {
this.previous = previous;
diff --git a/src/typescript.js b/src/typescript.js
index f10410ea1..2995224b1 100644
--- a/src/typescript.js
+++ b/src/typescript.js
@@ -1,17 +1,17 @@
'use strict';
-var _ = require('underscore-plus');
-var crypto = require('crypto');
-var path = require('path');
+const _ = require('underscore-plus');
+const crypto = require('crypto');
+const path = require('path');
-var defaultOptions = {
+const defaultOptions = {
target: 1,
module: 'commonjs',
sourceMap: true
};
-var TypeScriptSimple = null;
-var typescriptVersionDir = null;
+let TypeScriptSimple = null;
+let typescriptVersionDir = null;
exports.shouldCompile = function() {
return true;
@@ -19,7 +19,7 @@ exports.shouldCompile = function() {
exports.getCachePath = function(sourceCode) {
if (typescriptVersionDir == null) {
- var version = require('typescript-simple/package.json').version;
+ const version = require('typescript-simple/package.json').version;
typescriptVersionDir = path.join(
'ts',
createVersionAndOptionsDigest(version, defaultOptions)
@@ -44,7 +44,7 @@ exports.compile = function(sourceCode, filePath) {
filePath = 'file:///' + path.resolve(filePath).replace(/\\/g, '/');
}
- var options = _.defaults({ filename: filePath }, defaultOptions);
+ const options = _.defaults({ filename: filePath }, defaultOptions);
return new TypeScriptSimple(options, false).compile(sourceCode, filePath);
};
diff --git a/src/update-process-env.js b/src/update-process-env.js
index cc2e444c2..21ea4552d 100644
--- a/src/update-process-env.js
+++ b/src/update-process-env.js
@@ -10,6 +10,12 @@ const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([
const PLATFORMS_KNOWN_TO_WORK = new Set(['darwin', 'linux']);
+// Shell command that returns env var=value lines separated by \0s so that
+// newlines are handled properly. Note: need to use %c to inject the \0s
+// to work with some non GNU awks.
+const ENV_COMMAND =
+ 'command awk \'BEGIN{for(v in ENVIRON) printf("%s=%s%c", v, ENVIRON[v], 0)}\'';
+
async function updateProcessEnv(launchEnv) {
let envToAssign;
if (launchEnv) {
@@ -78,7 +84,7 @@ async function getEnvFromShell(env) {
setTimeout(() => {
cleanup();
}, 5000);
- child = childProcess.spawn(env.SHELL, ['-ilc', 'command env'], {
+ child = childProcess.spawn(env.SHELL, ['-ilc', ENV_COMMAND], {
encoding: 'utf8',
detached: true,
stdio: ['ignore', 'pipe', process.stderr]
@@ -109,7 +115,9 @@ async function getEnvFromShell(env) {
console.log(
'warning: ' +
env.SHELL +
- ' -ilc "command env" failed with signal (' +
+ ' -ilc "' +
+ ENV_COMMAND +
+ '" failed with signal (' +
error.signal +
')'
);
@@ -121,22 +129,13 @@ async function getEnvFromShell(env) {
}
let result = {};
- let skip = false;
- for (let line of stdout.split('\n')) {
- // start of shell function definition: skip full definition
- if (line.includes('=() {')) {
- skip = true;
- }
- if (!skip && line.includes('=')) {
+ for (let line of stdout.split('\0')) {
+ if (line.includes('=')) {
let components = line.split('=');
let key = components.shift();
let value = components.join('=');
result[key] = value;
}
- // end of shell function definition
- if (line === '}') {
- skip = false;
- }
}
return result;
}
diff --git a/src/view-registry.js b/src/view-registry.js
index 5f70d7d37..698dbc325 100644
--- a/src/view-registry.js
+++ b/src/view-registry.js
@@ -259,13 +259,13 @@ module.exports = class ViewRegistry {
this.nextUpdatePromise = null;
this.resolveNextUpdatePromise = null;
- var writer = this.documentWriters.shift();
+ let writer = this.documentWriters.shift();
while (writer) {
writer();
writer = this.documentWriters.shift();
}
- var reader = this.documentReaders.shift();
+ let reader = this.documentReaders.shift();
this.documentReadInProgress = true;
while (reader) {
reader();
diff --git a/src/workspace-element.js b/src/workspace-element.js
index 155043e2b..9400ef028 100644
--- a/src/workspace-element.js
+++ b/src/workspace-element.js
@@ -8,13 +8,13 @@ const scrollbarStyle = require('scrollbar-style');
const _ = require('underscore-plus');
class WorkspaceElement extends HTMLElement {
- attachedCallback() {
+ connectedCallback() {
this.focus();
this.htmlElement = document.querySelector('html');
this.htmlElement.addEventListener('mouseleave', this.handleCenterLeave);
}
- detachedCallback() {
+ disconnectedCallback() {
this.subscriptions.dispose();
this.htmlElement.removeEventListener('mouseleave', this.handleCenterLeave);
}
@@ -466,10 +466,6 @@ class WorkspaceElement extends HTMLElement {
}
}
-module.exports = document.registerElement('atom-workspace', {
- prototype: WorkspaceElement.prototype
-});
-
function isTab(element) {
let el = element;
while (el != null) {
@@ -478,3 +474,13 @@ function isTab(element) {
}
return false;
}
+
+window.customElements.define('atom-workspace', WorkspaceElement);
+
+function createWorkspaceElement() {
+ return document.createElement('atom-workspace');
+}
+
+module.exports = {
+ createWorkspaceElement
+};
diff --git a/src/workspace.js b/src/workspace.js
index 88b911972..3b040c3b0 100644
--- a/src/workspace.js
+++ b/src/workspace.js
@@ -15,7 +15,7 @@ const Panel = require('./panel');
const PanelContainer = require('./panel-container');
const Task = require('./task');
const WorkspaceCenter = require('./workspace-center');
-const WorkspaceElement = require('./workspace-element');
+const { createWorkspaceElement } = require('./workspace-element');
const STOPPED_CHANGING_ACTIVE_PANE_ITEM_DELAY = 100;
const ALL_LOCATIONS = ['center', 'left', 'right', 'bottom'];
@@ -267,7 +267,7 @@ module.exports = class Workspace extends Model {
getElement() {
if (!this.element) {
- this.element = new WorkspaceElement().initialize(this, {
+ this.element = createWorkspaceElement().initialize(this, {
config: this.config,
project: this.project,
viewRegistry: this.viewRegistry,
@@ -1547,12 +1547,12 @@ module.exports = class Workspace extends Model {
// Essential: Get the active {Pane}'s active item.
//
- // Returns an pane item {Object}.
+ // Returns a pane item {Object}.
getActivePaneItem() {
return this.getActivePaneContainer().getActivePaneItem();
}
- // Essential: Get all text editors in the workspace.
+ // Essential: Get all text editors in the workspace, if they are pane items.
//
// Returns an {Array} of {TextEditor}s.
getTextEditors() {
diff --git a/static/core-ui/text-editor.less b/static/core-ui/text-editor.less
index aea0f70bd..8106db9eb 100644
--- a/static/core-ui/text-editor.less
+++ b/static/core-ui/text-editor.less
@@ -9,7 +9,7 @@
}
atom-text-editor {
- contain: @contain_but_size;
+ contain: @contain_except_size;
display: flex;
cursor: text;
font-family: var(--editor-font-family);
@@ -17,14 +17,14 @@ atom-text-editor {
line-height: var(--editor-line-height);
.gutter-container {
- contain: @contain_but_size;
+ contain: @contain_except_size;
width: min-content;
background-color: inherit;
cursor: default;
}
.gutter {
- contain: @contain_but_size;
+ contain: @contain_except_size;
overflow: hidden;
z-index: 0;
text-align: right;
@@ -36,7 +36,7 @@ atom-text-editor {
.gutter:hover {
.line-number.foldable .icon-right {
- contain: @contain_but_layout_size;
+ contain: @contain_except_layout_size;
visibility: visible;
&:hover {
@@ -47,7 +47,7 @@ atom-text-editor {
.gutter, .gutter:hover {
.line-number.folded .icon-right {
- contain: @contain_but_layout_size;
+ contain: @contain_except_layout_size;
.octicon(chevron-right, 0.8em);
visibility: visible;
@@ -60,20 +60,20 @@ atom-text-editor {
}
.line-numbers {
- contain: @contain_but_size;
+ contain: @contain_except_size;
width: max-content;
background-color: inherit;
}
.line-number {
- contain: @contain_but_size;
+ contain: @contain_except_size;
padding-left: .5em;
white-space: nowrap;
opacity: 0.6;
position: relative;
.icon-right {
- contain: @contain_but_layout_size;
+ contain: @contain_except_layout_size;
.octicon(chevron-down, 0.8em);
display: inline-block;
visibility: hidden;
@@ -87,20 +87,20 @@ atom-text-editor {
}
.highlight {
- contain: @contain_but_paint;
+ contain: @contain_except_paint;
background: none;
padding: 0;
}
.highlight .region {
- contain: @contain_but_paint;
+ contain: @contain_except_paint;
pointer-events: none;
z-index: -1;
}
.line {
white-space: pre;
- contain: @contain_but_size;
+ contain: @contain_except_size;
&.cursor-line .fold-marker::after {
opacity: 1;
@@ -120,7 +120,7 @@ atom-text-editor {
}
.placeholder-text {
- contain: @contain_but_size;
+ contain: @contain_except_size;
position: absolute;
color: @text-color-subtle;
}
@@ -132,7 +132,7 @@ atom-text-editor {
}
.indent-guide {
- contain: @contain_but_layout_size;
+ contain: @contain_except_layout_size;
display: inline-block;
box-shadow: inset 1px 0;
}
@@ -161,7 +161,7 @@ atom-text-editor {
}
atom-text-editor[mini] {
- contain: @contain_but_size;
+ contain: @contain_except_size;
font-size: @input-font-size;
line-height: @component-line-height;
max-height: @component-line-height + 2; // +2 for borders
@@ -169,7 +169,7 @@ atom-text-editor[mini] {
}
atom-overlay {
- contain: layout style;
+ contain: @contain_except_size_paint;
position: fixed;
display: block;
z-index: 4;
diff --git a/static/core-ui/utils.less b/static/core-ui/utils.less
index 7f9901b6a..d51615021 100644
--- a/static/core-ui/utils.less
+++ b/static/core-ui/utils.less
@@ -1,10 +1,10 @@
// CSS containment variables.
-// The words after `but` explicitly show the excluded/incompatible values.
+// The words after `except` explicitly show the excluded/incompatible values.
@contain_all: layout size paint style;
-@contain_but_layout: size paint style;
-@contain_but_size: layout paint style;
-@contain_but_paint: layout size style;
-@contain_but_layout_size: paint style;
-@contain_but_layout_paint: size style;
-@contain_but_size_paint: layout style;
+@contain_except_layout: size paint style;
+@contain_except_size: layout paint style;
+@contain_except_paint: layout size style;
+@contain_except_layout_size: paint style;
+@contain_except_layout_paint: size style;
+@contain_except_size_paint: layout style;
diff --git a/static/core-ui/workspace-view.less b/static/core-ui/workspace-view.less
index 3f6ee5b10..de4a5d60e 100644
--- a/static/core-ui/workspace-view.less
+++ b/static/core-ui/workspace-view.less
@@ -13,12 +13,12 @@ atom-workspace {
font-family: @font-family;
atom-workspace-axis {
- contain: @contain_but_layout_paint;
+ contain: @contain_except_layout_paint;
position: relative;
}
atom-workspace-axis.horizontal {
- contain: @contain_but_layout_paint;
+ contain: @contain_except_layout_paint;
display: flex;
flex: 1;
min-width: 0;
@@ -26,7 +26,7 @@ atom-workspace {
}
atom-workspace-axis.vertical {
- contain: @contain_but_layout_paint;
+ contain: @contain_except_layout_paint;
display: flex;
flex: 1;
flex-direction: column;
diff --git a/static/index.js b/static/index.js
index 75be58393..b68916144 100644
--- a/static/index.js
+++ b/static/index.js
@@ -145,6 +145,25 @@
? snapshotResult.customRequire('../src/crash-reporter-start.js')
: require('../src/crash-reporter-start');
+ useSnapshot
+ ? snapshotResult.customRequire(
+ '../node_modules/document-register-element/build/document-register-element.node.js'
+ )
+ : require('document-register-element');
+
+ const Grim = useSnapshot
+ ? snapshotResult.customRequire('../node_modules/grim/lib/grim.js')
+ : require('grim');
+ const documentRegisterElement = document.registerElement;
+
+ document.registerElement = (type, options) => {
+ Grim.deprecate(
+ 'Use `customElements.define` instead of `document.registerElement` see https://javascript.info/custom-elements'
+ );
+
+ return documentRegisterElement(type, options);
+ };
+
const { userSettings, appVersion } = getWindowLoadSettings();
const uploadToServer =
userSettings &&
diff --git a/vendor/jasmine.js b/vendor/jasmine.js
index 2cec4bf76..716fbeb7e 100644
--- a/vendor/jasmine.js
+++ b/vendor/jasmine.js
@@ -1190,16 +1190,6 @@ jasmine.Matchers = function(env, actual, spec, opt_isNot) {
this.reportWasCalled_ = false;
};
-// todo: @deprecated as of Jasmine 0.11, remove soon [xw]
-jasmine.Matchers.pp = function(str) {
- throw new Error("jasmine.Matchers.pp() is no longer supported, please use jasmine.pp() instead!");
-};
-
-// todo: @deprecated Deprecated as of Jasmine 0.10. Rewrite your custom matchers to return true or false. [xw]
-jasmine.Matchers.prototype.report = function(result, failing_message, details) {
- throw new Error("As of jasmine 0.11, custom matchers must be implemented differently -- please see jasmine docs");
-};
-
jasmine.Matchers.wrapInto_ = function(prototype, matchersClass) {
for (var methodName in prototype) {
if (methodName == 'report') continue;