This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.3 KiB
45 lines
1.3 KiB
var path = require('path'); |
|
var fs = require('fs'); |
|
var parse = path.parse || require('path-parse'); |
|
|
|
module.exports = function nodeModulesPaths(start, opts) { |
|
var modules = opts && opts.moduleDirectory |
|
? [].concat(opts.moduleDirectory) |
|
: ['node_modules']; |
|
|
|
// ensure that `start` is an absolute path at this point, |
|
// resolving against the process' current working directory |
|
var absoluteStart = path.resolve(start); |
|
|
|
if (opts && opts.preserveSymlinks === false) { |
|
try { |
|
absoluteStart = fs.realpathSync(absoluteStart); |
|
} catch (err) { |
|
if (err.code !== 'ENOENT') { |
|
throw err; |
|
} |
|
} |
|
} |
|
|
|
var prefix = '/'; |
|
if (/^([A-Za-z]:)/.test(absoluteStart)) { |
|
prefix = ''; |
|
} else if (/^\\\\/.test(absoluteStart)) { |
|
prefix = '\\\\'; |
|
} |
|
|
|
var paths = [absoluteStart]; |
|
var parsed = parse(absoluteStart); |
|
while (parsed.dir !== paths[paths.length - 1]) { |
|
paths.push(parsed.dir); |
|
parsed = parse(parsed.dir); |
|
} |
|
|
|
var dirs = paths.reduce(function (dirs, aPath) { |
|
return dirs.concat(modules.map(function (moduleDir) { |
|
return path.join(prefix, aPath, moduleDir); |
|
})); |
|
}, []); |
|
|
|
return opts && opts.paths ? dirs.concat(opts.paths) : dirs; |
|
};
|
|
|