From 01e7f8c0480cd1328c2ff07f3b7f5e6f64134603 Mon Sep 17 00:00:00 2001 From: Zara Zaimeche Date: Fri, 9 Jan 2015 13:37:16 +0000 Subject: Add npm find_deps --- baserockimport/exts/npm.find_deps | 91 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 baserockimport/exts/npm.find_deps diff --git a/baserockimport/exts/npm.find_deps b/baserockimport/exts/npm.find_deps new file mode 100755 index 0000000..da2fc2c --- /dev/null +++ b/baserockimport/exts/npm.find_deps @@ -0,0 +1,91 @@ +#!/usr/bin/env node +// +// Copyright (C) 2014 Codethink Limited +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; version 2 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this program; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +async = require("async"); +npm = require("npm"); +semver = require("semver"); +util = require("util"); + +base = require("./importer_base"); + +function parseArgs(argv) { + if (argv.length === 4) + return argv[3]; + + if (argv.length === 5) + return argv[3] + '@' + argv[4]; + + throw("Error! Wrong number of command line arguments! Usage: " + + "./npm.find_deps SOURCE_DIR NAME VERSION"); +} + +function getDeps(er, packageInfo) { + var names = []; + var ranges = {}; + var resolved = {}; + + package = base.getFirstItem(packageInfo); + + if (package.dependencies === undefined) { + showDeps({}); + return; + } + + names = Object.keys(package.dependencies); + + for (name in package.dependencies) + ranges[name] = package.dependencies[name]; + + var resolveDepVersion = function(depName, cb) { + npm.commands.view([depName], "silent", function (er, packageInfoSet) { + if (er) throw er; + + for (i in packageInfoSet) { + package = packageInfoSet[i]; + + resolved[package.name] = semver.maxSatisfying(package.versions, ranges[package.name]); + }; + + cb(); + }) + }; + + async.each(names, resolveDepVersion, function(er){ + if (er) throw er; + + showDeps(resolved); + }) +}; + +function showDeps(runtimeDeps) { + var output = { + "npm": { + "build-dependencies": {}, + "runtime-dependencies": runtimeDeps + } + }; + + outputText = JSON.stringify(output, null, 4); + console.log(outputText); +} + +npm.load(function(er, npm) { + var package = parseArgs(process.argv); + if (er) throw er; + npm.commands.view([package], "silent", getDeps); +}); + -- cgit v1.2.1