Import the supplied management frontend, including request encryption, withdrawal updates, and vendored dependencies. Use incoming versions for overlapping source files and retain existing environment configuration absent from the supplied directory.
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
var path = require('path');
|
|
var parse = path.parse || require('path-parse'); // eslint-disable-line global-require
|
|
|
|
var driveLetterRegex = /^([A-Za-z]:)/;
|
|
var uncPathRegex = /^\\\\/;
|
|
|
|
function getNodeModulesDirs(absoluteStart, modules) {
|
|
var prefix = '/';
|
|
if (driveLetterRegex.test(absoluteStart)) {
|
|
prefix = '';
|
|
} else if (uncPathRegex.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);
|
|
}
|
|
|
|
return paths.reduce(function (dirs, aPath) {
|
|
return dirs.concat(modules.map(function (moduleDir) {
|
|
return path.resolve(prefix, aPath, moduleDir);
|
|
}));
|
|
}, []);
|
|
}
|
|
|
|
module.exports = function nodeModulesPaths(start, opts, request) {
|
|
var modules = opts && opts.moduleDirectory
|
|
? [].concat(opts.moduleDirectory)
|
|
: ['node_modules'];
|
|
|
|
if (opts && typeof opts.paths === 'function') {
|
|
return opts.paths(
|
|
request,
|
|
start,
|
|
function () { return getNodeModulesDirs(start, modules); },
|
|
opts
|
|
);
|
|
}
|
|
|
|
var dirs = getNodeModulesDirs(start, modules);
|
|
return opts && opts.paths ? dirs.concat(opts.paths) : dirs;
|
|
};
|