From 23149cd7aade78709db627e0811770eb21e78ae8 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Fri, 11 Mar 2016 15:36:23 -0500 Subject: [PATCH] Collect .resolved and .from properties in getInstalledDependenciesTree. --- tools/isobuild/meteor-npm.js | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/tools/isobuild/meteor-npm.js b/tools/isobuild/meteor-npm.js index 7016d7c6cf..ceb27d8b00 100644 --- a/tools/isobuild/meteor-npm.js +++ b/tools/isobuild/meteor-npm.js @@ -460,13 +460,14 @@ var constructPackageJson = function (packageName, newPackageNpmDir, // } function getInstalledDependenciesTree(dir) { function ls(nodeModulesDir) { + let contents; try { - var contents = files.readdir(nodeModulesDir).sort(); - } catch (e) { - return; + contents = files.readdir(nodeModulesDir).sort(); + } finally { + if (! contents) return; } - const result = Object.create(null); + const result = {}; contents.forEach(item => { if (item.startsWith(".")) { @@ -476,17 +477,28 @@ function getInstalledDependenciesTree(dir) { const pkgDir = files.pathJoin(nodeModulesDir, item); const pkgJsonPath = files.pathJoin(pkgDir, "package.json"); + let pkg; try { - result[item] = { - version: JSON.parse(files.readFile(pkgJsonPath)).version - }; - } catch (e) { - return; + pkg = JSON.parse(files.readFile(pkgJsonPath)); + } finally { + if (! pkg) return; } + const info = result[item] = {}; + + function copy(name) { + if (pkg[name]) { + info[name] = pkg[name]; + } + } + + copy("version"); + copy("resolved"); + copy("from"); + const deps = ls(files.pathJoin(pkgDir, "node_modules")); if (deps && ! _.isEmpty(deps)) { - result[item].dependencies = deps; + info.dependencies = deps; } }); @@ -633,7 +645,9 @@ var ensureConnected = function () { // `npm shrinkwrap` function shrinkwrap(dir) { - const tree = getInstalledDependenciesTree(dir); + const tree = minimizeDependencyTree( + getInstalledDependenciesTree(dir) + ); files.writeFile( files.pathJoin(dir, "npm-shrinkwrap.json"),