]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/lib/rebuild.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / lib / rebuild.js
1
2 module.exports = rebuild
3
4 var readInstalled = require("read-installed")
5   , semver = require("semver")
6   , log = require("npmlog")
7   , npm = require("./npm.js")
8   , npa = require("npm-package-arg")
9
10 rebuild.usage = "npm rebuild [<name>[@<version>] [name[@<version>] ...]]"
11
12 rebuild.completion = require("./utils/completion/installed-deep.js")
13
14 function rebuild (args, cb) {
15   var opt = { depth: npm.config.get("depth"), dev: true }
16   readInstalled(npm.prefix, opt, function (er, data) {
17     log.info("readInstalled", typeof data)
18     if (er) return cb(er)
19     var set = filter(data, args)
20       , folders = Object.keys(set).filter(function (f) {
21           return f !== npm.prefix
22         })
23     if (!folders.length) return cb()
24     log.silly("rebuild set", folders)
25     cleanBuild(folders, set, cb)
26   })
27 }
28
29 function cleanBuild (folders, set, cb) {
30   npm.commands.build(folders, function (er) {
31     if (er) return cb(er)
32     console.log(folders.map(function (f) {
33       return set[f] + " " + f
34     }).join("\n"))
35     cb()
36   })
37 }
38
39 function filter (data, args, set, seen) {
40   if (!set) set = {}
41   if (!seen) seen = {}
42   if (set.hasOwnProperty(data.path)) return set
43   if (seen.hasOwnProperty(data.path)) return set
44   seen[data.path] = true
45   var pass
46   if (!args.length) pass = true // rebuild everything
47   else if (data.name && data._id) {
48     for (var i = 0, l = args.length; i < l; i ++) {
49       var arg = args[i]
50         , nv = npa(arg)
51         , n = nv.name
52         , v = nv.rawSpec
53       if (n !== data.name) continue
54       if (!semver.satisfies(data.version, v, true)) continue
55       pass = true
56       break
57     }
58   }
59   if (pass && data._id) {
60     log.verbose("rebuild", "path, id", [data.path, data._id])
61     set[data.path] = data._id
62   }
63   // need to also dive through kids, always.
64   // since this isn't an install these won't get auto-built unless
65   // they're not dependencies.
66   Object.keys(data.dependencies || {}).forEach(function (d) {
67     // return
68     var dep = data.dependencies[d]
69     if (typeof dep === "string") return
70     filter(dep, args, set, seen)
71   })
72   return set
73 }