Server IP : 127.0.0.2 / Your IP : 18.217.65.73 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/npm/node_modules/read-package-tree/ |
Upload File : |
var fs = require('fs') var rpj = require('read-package-json') var path = require('path') var dz = require('dezalgo') var once = require('once') var readdir = require('readdir-scoped-modules') var debug = require('debuglog')('rpt') function dpath (p) { if (!p) return '' if (p.indexOf(process.cwd()) === 0) { p = p.substr(process.cwd().length + 1) } return p } module.exports = rpt rpt.Node = Node rpt.Link = Link var ID = 0 function Node (pkg, logical, physical, er, cache) { if (cache[physical]) return cache[physical] if (!(this instanceof Node)) { return new Node(pkg, logical, physical, er, cache) } cache[physical] = this debug(this.constructor.name, dpath(physical), pkg && pkg._id) this.id = ID++ this.package = pkg || {} this.path = logical this.realpath = physical this.parent = null this.isLink = false this.children = [] this.error = er } Node.prototype.package = null Node.prototype.path = '' Node.prototype.realpath = '' Node.prototype.children = null Node.prototype.error = null function Link (pkg, logical, physical, realpath, er, cache) { if (cache[physical]) return cache[physical] if (!(this instanceof Link)) { return new Link(pkg, logical, physical, realpath, er, cache) } cache[physical] = this debug(this.constructor.name, dpath(physical), pkg && pkg._id) this.id = ID++ this.path = logical this.realpath = realpath this.package = pkg || {} this.parent = null this.target = new Node(this.package, logical, realpath, er, cache) this.isLink = true this.children = this.target.children this.error = er } Link.prototype = Object.create(Node.prototype, { constructor: { value: Link } }) Link.prototype.target = null Link.prototype.realpath = '' function loadNode (logical, physical, cache, cb) { debug('loadNode', dpath(logical)) fs.realpath(physical, function (er, real) { if (er) return cb(er) debug('realpath l=%j p=%j real=%j', dpath(logical), dpath(physical), dpath(real)) var pj = path.resolve(real, 'package.json') rpj(pj, function (er, pkg) { pkg = pkg || null var node if (physical === real) { node = new Node(pkg, logical, physical, er, cache) } else { node = new Link(pkg, logical, physical, real, er, cache) } cb(null, node) }) }) } function loadChildren (node, cache, filterWith, cb) { debug('loadChildren', dpath(node.path)) // don't let it be called more than once cb = once(cb) var nm = path.resolve(node.path, 'node_modules') readdir(nm, function (er, kids) { // If there are no children, that's fine, just return if (er) return cb(null, node) kids = kids.filter(function (kid) { return kid[0] !== '.' && (!filterWith || filterWith(node, kid)) }) var l = kids . length if (l === 0) return cb(null, node) kids.forEach(function (kid) { var kidPath = path.resolve(nm, kid) var kidRealPath = path.resolve(node.realpath,'node_modules',kid) loadNode(kidPath, kidRealPath, cache, then) }) function then (er, kid) { if (er) return cb(er) node.children.push(kid) kid.parent = node if (--l === 0) { sortChildren(node) return cb(null, node) } } }) } function sortChildren (node) { node.children = node.children.sort(function (a, b) { a = a.package.name ? a.package.name.toLowerCase() : a.path b = b.package.name ? b.package.name.toLowerCase() : b.path return a > b ? 1 : -1 }) } function loadTree (node, did, cache, filterWith, cb) { debug('loadTree', dpath(node.path), !!cache[node.path]) if (did[node.realpath]) { return dz(cb)(null, node) } did[node.realpath] = true cb = once(cb) loadChildren(node, cache, filterWith, function (er, node) { if (er) return cb(er) var kids = node.children.filter(function (kid) { return !did[kid.realpath] }) var l = kids.length if (l === 0) return cb(null, node) kids.forEach(function (kid, index) { loadTree(kid, did, cache, filterWith, then) }) function then (er, kid) { if (er) return cb(er) if (--l === 0) cb(null, node) } }) } function rpt (root, filterWith, cb) { if (!cb) { cb = filterWith filterWith = null } fs.realpath(root, function (er, realRoot) { if (er) return cb(er) debug('rpt', dpath(realRoot)) var cache = Object.create(null) loadNode(root, realRoot, cache, function (er, node) { // if there's an error, it's fine, as long as we got a node if (!node) return cb(er) loadTree(node, {}, cache, filterWith, function (lter, tree) { cb(er && er.code !== 'ENOENT' ? er : lter, tree) }) }) }) }