OS path friendly, should address #8.

Also refactored code! Thanks Melon!
This commit is contained in:
Pierce 2019-04-26 18:04:32 -04:00
parent e207529dac
commit fd534159c8
3 changed files with 89 additions and 98 deletions

View file

@ -13,6 +13,7 @@ function downloadAsync (url, directory, name) {
const _request = request(url, {timeout: 10000}); const _request = request(url, {timeout: 10000});
_request.on('error', function(error) { _request.on('error', function(error) {
shelljs.rm(path.join(directory, name)); // Prevents duplicates.
resolve({ resolve({
failed: true, failed: true,
asset: { asset: {
@ -87,7 +88,7 @@ module.exports.getAssets = function (directory, version) {
const index = require(path.join(directory, 'assets', 'indexes',`${version.assetIndex.id}.json`)); const index = require(path.join(directory, 'assets', 'indexes',`${version.assetIndex.id}.json`));
const mainAssetsDownload = Object.keys(index.objects).map(async asset => { await Promise.all(Object.keys(index.objects).map(async asset => {
const hash = index.objects[asset].hash; const hash = index.objects[asset].hash;
const subhash = hash.substring(0,2); const subhash = hash.substring(0,2);
const assetDirectory = path.join(directory, 'assets', 'objects', subhash); const assetDirectory = path.join(directory, 'assets', 'objects', subhash);
@ -97,9 +98,7 @@ module.exports.getAssets = function (directory, version) {
if(download.failed) failed.push(download.asset); if(download.failed) failed.push(download.asset);
} }
}); }));
await Promise.all(mainAssetsDownload);
// why do we have this? B/c sometimes Minecraft's resource site times out! // why do we have this? B/c sometimes Minecraft's resource site times out!
if(failed) { if(failed) {
@ -108,7 +107,7 @@ module.exports.getAssets = function (directory, version) {
// Copy assets to legacy if it's an older Minecarft version. // Copy assets to legacy if it's an older Minecarft version.
if(version.assets === "legacy" || version.assets === "pre-1.6") { if(version.assets === "legacy" || version.assets === "pre-1.6") {
const legacyCopy = Object.keys(index.objects).map(async asset => { await Promise.all(Object.keys(index.objects).map(async asset => {
const hash = index.objects[asset].hash; const hash = index.objects[asset].hash;
const subhash = hash.substring(0,2); const subhash = hash.substring(0,2);
const assetDirectory = path.join(directory, 'assets', 'objects', subhash); const assetDirectory = path.join(directory, 'assets', 'objects', subhash);
@ -123,9 +122,7 @@ module.exports.getAssets = function (directory, version) {
if (!fs.existsSync(path.join(directory, 'assets', 'legacy', asset))) { if (!fs.existsSync(path.join(directory, 'assets', 'legacy', asset))) {
fs.copyFileSync(path.join(assetDirectory, hash), path.join(directory, 'assets', 'legacy', asset)) fs.copyFileSync(path.join(assetDirectory, hash), path.join(directory, 'assets', 'legacy', asset))
} }
}); }));
await Promise.all(legacyCopy);
} }
resolve(); resolve();
@ -143,7 +140,7 @@ module.exports.getNatives = function (root, version, os) {
shelljs.mkdir('-p', nativeDirectory); shelljs.mkdir('-p', nativeDirectory);
const download = version.libraries.map(async function (lib) { await Promise.all(version.libraries.map(async function (lib) {
if (!lib.downloads.classifiers) return; if (!lib.downloads.classifiers) return;
const type = `natives-${os}`; const type = `natives-${os}`;
const native = lib.downloads.classifiers[type]; const native = lib.downloads.classifiers[type];
@ -159,9 +156,7 @@ module.exports.getNatives = function (root, version, os) {
} }
shelljs.rm(path.join(nativeDirectory, name)); shelljs.rm(path.join(nativeDirectory, name));
} }
}); }));
await Promise.all(download);
} }
resolve(nativeDirectory); resolve(nativeDirectory);
@ -175,12 +170,11 @@ module.exports.getForgeDependencies = async function(root, version, forgeJarPath
await new zip(forgeJarPath).extractEntryTo('version.json', path.join(root, 'forge', `${version.id}`), false, true); await new zip(forgeJarPath).extractEntryTo('version.json', path.join(root, 'forge', `${version.id}`), false, true);
const forge = require(path.join(root, 'forge', `${version.id}`, 'version.json')); const forge = require(path.join(root, 'forge', `${version.id}`, 'version.json'));
const forgeLibs = forge.libraries;
const mavenUrl = 'http://files.minecraftforge.net/maven/'; const mavenUrl = 'http://files.minecraftforge.net/maven/';
const defaultRepo = 'https://libraries.minecraft.net/'; const defaultRepo = 'https://libraries.minecraft.net/';
const paths = []; const paths = [];
const download = forgeLibs.map(async library => { await Promise.all(forge.libraries.map(async library => {
const lib = library.name.split(':'); const lib = library.name.split(':');
if(lib[0] === 'net.minecraftforge' && lib[1].includes('forge')) return; if(lib[0] === 'net.minecraftforge' && lib[1].includes('forge')) return;
@ -200,17 +194,15 @@ module.exports.getForgeDependencies = async function(root, version, forgeJarPath
const downloadLink = `${url}${lib[0].replace(/\./g, '/')}/${lib[1]}/${lib[2]}/${lib[1]}-${lib[2]}.jar`; const downloadLink = `${url}${lib[0].replace(/\./g, '/')}/${lib[1]}/${lib[2]}/${lib[1]}-${lib[2]}.jar`;
if(fs.existsSync(path.join(jarPath, name))) { if(fs.existsSync(path.join(jarPath, name))) {
paths.push(`${jarPath}\\${name}`); paths.push(`${jarPath}${path.sep}${name}`);
return; return;
} }
if(!fs.existsSync(jarPath)) shelljs.mkdir('-p', jarPath); if(!fs.existsSync(jarPath)) shelljs.mkdir('-p', jarPath);
await downloadAsync(downloadLink, jarPath, name); await downloadAsync(downloadLink, jarPath, name);
paths.push(`${jarPath}\\${name}`); paths.push(`${jarPath}${path.sep}${name}`);
}); }));
await Promise.all(download);
return {paths, forge}; return {paths, forge};
}; };
@ -227,11 +219,11 @@ module.exports.getClasses = function (options, version) {
const jarPath = path.join(options.root, 'libraries', `${lib[0].replace(/\./g, '/')}/${lib[1]}/${lib[2]}`); const jarPath = path.join(options.root, 'libraries', `${lib[0].replace(/\./g, '/')}/${lib[1]}/${lib[2]}`);
const name = `${lib[1]}-${lib[2]}.jar`; const name = `${lib[1]}-${lib[2]}.jar`;
libs.push(`${jarPath}\\${name}`); libs.push(`${jarPath}/${name}`);
}) })
} }
const libraries = version.libraries.map(async (_lib) => { await Promise.all(version.libraries.map(async (_lib) => {
if(!_lib.downloads.artifact) return; if(!_lib.downloads.artifact) return;
const libraryPath = _lib.downloads.artifact.path; const libraryPath = _lib.downloads.artifact.path;
@ -239,17 +231,15 @@ module.exports.getClasses = function (options, version) {
const libraryDirectory = path.join(options.root, 'libraries', libraryPath); const libraryDirectory = path.join(options.root, 'libraries', libraryPath);
if(!fs.existsSync(libraryDirectory)) { if(!fs.existsSync(libraryDirectory)) {
let directory = libraryDirectory.split('\\'); let directory = libraryDirectory.split(path.sep);
const name = directory.pop(); const name = directory.pop();
directory = directory.join('\\'); directory = directory.join(path.sep);
await downloadAsync(libraryUrl, directory, name); await downloadAsync(libraryUrl, directory, name);
} }
libs.push(libraryDirectory); libs.push(libraryDirectory);
}); }));
await Promise.all(libraries);
resolve(libs) resolve(libs)
}); });

View file

@ -6,6 +6,7 @@ const fs = require('fs');
module.exports = async function (options) { module.exports = async function (options) {
options.root = path.normalize(options.root);
if(!fs.existsSync(options.root)) fs.mkdirSync(options.root); if(!fs.existsSync(options.root)) fs.mkdirSync(options.root);
if(options.clientPackage) { if(options.clientPackage) {

144
package-lock.json generated
View file

@ -1,6 +1,6 @@
{ {
"name": "mcclauncher", "name": "minecraft-launcher-core",
"version": "0.0.1", "version": "2.5.6",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -14,10 +14,10 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"requires": { "requires": {
"co": "4.6.0", "co": "^4.6.0",
"fast-deep-equal": "1.1.0", "fast-deep-equal": "^1.0.0",
"fast-json-stable-stringify": "2.0.0", "fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "0.3.1" "json-schema-traverse": "^0.3.0"
} }
}, },
"asn1": { "asn1": {
@ -25,7 +25,7 @@
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": { "requires": {
"safer-buffer": "2.1.2" "safer-buffer": "~2.1.0"
} }
}, },
"assert-plus": { "assert-plus": {
@ -59,7 +59,7 @@
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"optional": true, "optional": true,
"requires": { "requires": {
"tweetnacl": "0.14.5" "tweetnacl": "^0.14.3"
} }
}, },
"brace-expansion": { "brace-expansion": {
@ -67,7 +67,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": { "requires": {
"balanced-match": "1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
} }
}, },
@ -86,7 +86,7 @@
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
"requires": { "requires": {
"delayed-stream": "1.0.0" "delayed-stream": "~1.0.0"
} }
}, },
"concat-map": { "concat-map": {
@ -104,7 +104,7 @@
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"delayed-stream": { "delayed-stream": {
@ -118,8 +118,8 @@
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"optional": true, "optional": true,
"requires": { "requires": {
"jsbn": "0.1.1", "jsbn": "~0.1.0",
"safer-buffer": "2.1.2" "safer-buffer": "^2.1.0"
} }
}, },
"extend": { "extend": {
@ -152,9 +152,9 @@
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
"integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
"requires": { "requires": {
"asynckit": "0.4.0", "asynckit": "^0.4.0",
"combined-stream": "1.0.6", "combined-stream": "1.0.6",
"mime-types": "2.1.20" "mime-types": "^2.1.12"
}, },
"dependencies": { "dependencies": {
"combined-stream": { "combined-stream": {
@ -162,7 +162,7 @@
"resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
"integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"requires": { "requires": {
"delayed-stream": "1.0.0" "delayed-stream": "~1.0.0"
} }
} }
} }
@ -177,7 +177,7 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"glob": { "glob": {
@ -185,12 +185,12 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
"requires": { "requires": {
"fs.realpath": "1.0.0", "fs.realpath": "^1.0.0",
"inflight": "1.0.6", "inflight": "^1.0.4",
"inherits": "2.0.3", "inherits": "2",
"minimatch": "3.0.4", "minimatch": "^3.0.4",
"once": "1.4.0", "once": "^1.3.0",
"path-is-absolute": "1.0.1" "path-is-absolute": "^1.0.0"
} }
}, },
"har-schema": { "har-schema": {
@ -203,8 +203,8 @@
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz",
"integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==",
"requires": { "requires": {
"ajv": "5.5.2", "ajv": "^5.3.0",
"har-schema": "2.0.0" "har-schema": "^2.0.0"
} }
}, },
"http-signature": { "http-signature": {
@ -212,9 +212,9 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"jsprim": "1.4.1", "jsprim": "^1.2.2",
"sshpk": "1.14.2" "sshpk": "^1.7.0"
} }
}, },
"inflight": { "inflight": {
@ -222,8 +222,8 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": { "requires": {
"once": "1.4.0", "once": "^1.3.0",
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"inherits": { "inherits": {
@ -288,7 +288,7 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz",
"integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==",
"requires": { "requires": {
"mime-db": "1.36.0" "mime-db": "~1.36.0"
} }
}, },
"minimatch": { "minimatch": {
@ -296,7 +296,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": { "requires": {
"brace-expansion": "1.1.11" "brace-expansion": "^1.1.7"
} }
}, },
"node-fetch": { "node-fetch": {
@ -314,7 +314,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": { "requires": {
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"path-is-absolute": { "path-is-absolute": {
@ -352,7 +352,7 @@
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
"requires": { "requires": {
"resolve": "1.8.1" "resolve": "^1.1.6"
} }
}, },
"request": { "request": {
@ -360,26 +360,26 @@
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
"requires": { "requires": {
"aws-sign2": "0.7.0", "aws-sign2": "~0.7.0",
"aws4": "1.8.0", "aws4": "^1.8.0",
"caseless": "0.12.0", "caseless": "~0.12.0",
"combined-stream": "1.0.7", "combined-stream": "~1.0.6",
"extend": "3.0.2", "extend": "~3.0.2",
"forever-agent": "0.6.1", "forever-agent": "~0.6.1",
"form-data": "2.3.2", "form-data": "~2.3.2",
"har-validator": "5.1.0", "har-validator": "~5.1.0",
"http-signature": "1.2.0", "http-signature": "~1.2.0",
"is-typedarray": "1.0.0", "is-typedarray": "~1.0.0",
"isstream": "0.1.2", "isstream": "~0.1.2",
"json-stringify-safe": "5.0.1", "json-stringify-safe": "~5.0.1",
"mime-types": "2.1.20", "mime-types": "~2.1.19",
"oauth-sign": "0.9.0", "oauth-sign": "~0.9.0",
"performance-now": "2.1.0", "performance-now": "^2.1.0",
"qs": "6.5.2", "qs": "~6.5.2",
"safe-buffer": "5.1.2", "safe-buffer": "^5.1.2",
"tough-cookie": "2.4.3", "tough-cookie": "~2.4.3",
"tunnel-agent": "0.6.0", "tunnel-agent": "^0.6.0",
"uuid": "3.3.2" "uuid": "^3.3.2"
} }
}, },
"resolve": { "resolve": {
@ -387,7 +387,7 @@
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
"integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"requires": { "requires": {
"path-parse": "1.0.6" "path-parse": "^1.0.5"
} }
}, },
"safe-buffer": { "safe-buffer": {
@ -405,9 +405,9 @@
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz",
"integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==",
"requires": { "requires": {
"glob": "7.1.3", "glob": "^7.0.0",
"interpret": "1.1.0", "interpret": "^1.0.0",
"rechoir": "0.6.2" "rechoir": "^0.6.2"
} }
}, },
"sshpk": { "sshpk": {
@ -415,15 +415,15 @@
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
"integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
"requires": { "requires": {
"asn1": "0.2.4", "asn1": "~0.2.3",
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"bcrypt-pbkdf": "1.0.2", "bcrypt-pbkdf": "^1.0.0",
"dashdash": "1.14.1", "dashdash": "^1.12.0",
"ecc-jsbn": "0.1.2", "ecc-jsbn": "~0.1.1",
"getpass": "0.1.7", "getpass": "^0.1.1",
"jsbn": "0.1.1", "jsbn": "~0.1.0",
"safer-buffer": "2.1.2", "safer-buffer": "^2.0.2",
"tweetnacl": "0.14.5" "tweetnacl": "~0.14.0"
} }
}, },
"tough-cookie": { "tough-cookie": {
@ -431,8 +431,8 @@
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
"requires": { "requires": {
"psl": "1.1.29", "psl": "^1.1.24",
"punycode": "1.4.1" "punycode": "^1.4.1"
} }
}, },
"tunnel-agent": { "tunnel-agent": {
@ -440,7 +440,7 @@
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"requires": { "requires": {
"safe-buffer": "5.1.2" "safe-buffer": "^5.0.1"
} }
}, },
"tweetnacl": { "tweetnacl": {
@ -459,9 +459,9 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"extsprintf": "1.3.0" "extsprintf": "^1.2.0"
} }
}, },
"wrappy": { "wrappy": {