From 71e285b94c7edaa43aa8115965cf5a36b8e0f80a Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 3 Apr 2019 15:43:32 +0200 Subject: Node.js v11.13.0 --- deps/node/deps/npm/lib/rebuild.js | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 deps/node/deps/npm/lib/rebuild.js (limited to 'deps/node/deps/npm/lib/rebuild.js') diff --git a/deps/node/deps/npm/lib/rebuild.js b/deps/node/deps/npm/lib/rebuild.js new file mode 100644 index 00000000..bbc5e8f4 --- /dev/null +++ b/deps/node/deps/npm/lib/rebuild.js @@ -0,0 +1,78 @@ + +module.exports = rebuild + +var readInstalled = require('read-installed') +var semver = require('semver') +var log = require('npmlog') +var npm = require('./npm.js') +var npa = require('npm-package-arg') +var usage = require('./utils/usage') +var output = require('./utils/output.js') + +rebuild.usage = usage( + 'rebuild', + 'npm rebuild [[<@scope>/]...]' +) + +rebuild.completion = require('./utils/completion/installed-deep.js') + +function rebuild (args, cb) { + var opt = { depth: npm.config.get('depth'), dev: true } + readInstalled(npm.prefix, opt, function (er, data) { + log.info('readInstalled', typeof data) + if (er) return cb(er) + var set = filter(data, args) + var folders = Object.keys(set).filter(function (f) { + return f !== npm.prefix + }) + if (!folders.length) return cb() + log.silly('rebuild set', folders) + cleanBuild(folders, set, cb) + }) +} + +function cleanBuild (folders, set, cb) { + npm.commands.build(folders, function (er) { + if (er) return cb(er) + output(folders.map(function (f) { + return set[f] + ' ' + f + }).join('\n')) + cb() + }) +} + +function filter (data, args, set, seen) { + if (!set) set = {} + if (!seen) seen = new Set() + if (set.hasOwnProperty(data.path)) return set + if (seen.has(data)) return set + seen.add(data) + var pass + if (!args.length) pass = true // rebuild everything + else if (data.name && data._id) { + for (var i = 0, l = args.length; i < l; i++) { + var arg = args[i] + var nv = npa(arg) + var n = nv.name + var v = nv.rawSpec + if (n !== data.name) continue + if (!semver.satisfies(data.version, v, true)) continue + pass = true + break + } + } + if (pass && data._id) { + log.verbose('rebuild', 'path, id', [data.path, data._id]) + set[data.path] = data._id + } + // need to also dive through kids, always. + // since this isn't an install these won't get auto-built unless + // they're not dependencies. + Object.keys(data.dependencies || {}).forEach(function (d) { + // return + var dep = data.dependencies[d] + if (typeof dep === 'string') return + filter(dep, args, set, seen) + }) + return set +} -- cgit v1.2.3