windows
Version:
A random but growing collection of utilities for Windows for Node.js
69 lines (56 loc) • 1.46 kB
JavaScript
var fs = require('fs');
var path = require('path');
var exists = fs.existsSync || path.existsSync;
module.exports = {
arrayToObject: arrayToObject,
lazyProperty: lazyProperty,
expandPath: expandPath,
resolveDir: resolveDir,
exists: exists,
q: q
};
function q(str){ return '"'+str.replace(/"/g, '\\\"')+'"' }
function arrayToObject(arr, callback){
return arr.reduce(function(r,s){
var result = callback(s);
if (Array.isArray(result)) {
r[result[0]] = result[1];
}
return r;
}, {})
}
function lazyProperty(obj, name){
if (Array.isArray(name)) {
name.forEach(function(prop){
lazyProperty(obj, prop);
});
return obj;
}
var hidden = name[0] === '_';
name = hidden ? name.slice(1) : name;
Object.defineProperty(obj, name, {
configurable: true,
enumerable: !hidden,
get: function(){},
set: function(v){ Object.defineProperty(this, name, { value: v, writable: true }) }
});
}
function expandPath(str){
Object.keys(process.env).forEach(function(name){
while (~str.indexOf('%'+name+'%')) {
str = str.replace('%'+name+'%', process.env[name]);
}
});
return str;
}
function resolveDir(dir){
var resolved = dir;
if (!exists(resolved)) {
if (!exists(resolved = expandPath(dir))) {
if (!exists(resolved = path.resolve(__dirname, dir))) {
throw new Error('Path not found: ' + dir);
}
}
}
return path.dirname(resolved);
}