UNPKG

totoro-common

Version:

Common methods of totoro.

160 lines (131 loc) 3.55 kB
"use strict"; var path = require('path') var fs = require('fs') exports.home = process.platform === 'win32' ? process.env.USERPROFILE : process.env.HOME exports.split = function(str) { return str && (typeof str === 'string') ? str.split(',') : [] } /** * extract config from commander */ exports.getCfg = function(commander) { var cfg = {} commander.options.forEach(function(item) { var key = camelcase(item.name()) if(key in commander) { if (typeof commander[key] !== 'function') { cfg[key] = commander[key] } } }) return cfg } /** * read json config file */ exports.readCfgFile = function(p) { try { return JSON.parse(fs.readFileSync(p)) } catch(e) { return {} } } exports.writeCfgFile = function(p, cfg) { var dir = path.dirname(p) if (!fs.existsSync(dir)) { dir.split(path.sep).reduce(function(parts, part) { parts += part + '/' var subpath = path.resolve(parts) if (!fs.existsSync(subpath)) { fs.mkdirSync(subpath) } return parts; }, ''); } fs.writeFileSync(p, JSON.stringify(cfg)) } function camelcase(str) { return str.split('-').reduce(function(str, word){ return str + word[0].toUpperCase() + word.slice(1) }) } exports.camelcase = camelcase exports.unCamelcase = function(str) { return str.split(/([A-Z])/).reduce(function(str, word) { if (/[A-Z]/.test(word)) { return str + '-' + word.toLowerCase() } else { return str + word } }) } exports.isUrl = function(p) { /* jshint -W092 */ return /^https?:\/\//.test(p) } /** * see if specified adapter is a keyword */ exports.isKeyword = function(p) { return p.indexOf('.') === -1 && p.indexOf(path.sep) === -1 } exports.isExistedFile = function(p){ // if path contains query string var reg = /\?|#/ if (reg.test(p)) { p = p.split(reg)[0] } return p && fs.existsSync(p) && fs.statSync(p).isFile() } /** * mix properties from src to target * multiple src be allowed * e.g. var target = mix(target, src1, src2, src3) */ exports.mix = function(target, src, overwrite) { target = target || {} /* * NOTE * * can't modify overwrite directly!!! * * if you assign a new value to overwrite * when method in the same file call mix() * arguments is not modified * but if one method out of this file call it * arguments will be modified */ var ow var len = arguments.length var srcEnd = len - 1 var lastArg = arguments[len - 1] if ( typeof lastArg === 'boolean' || typeof lastArg === 'number') { ow = lastArg srcEnd-- } else { ow = false } for (var i = 1; i <= srcEnd; i++) { var current = arguments[i] || {} for (var j in current) { if (ow || typeof target[j] === 'undefined') { target[j] = current[j] } } } return target } exports.getExternalIpAddress = function() { var interfaces = require('os').networkInterfaces() var addresses = [] Object.keys(interfaces).forEach(function(name) { interfaces[name].forEach(function(node) { if (node.family === 'IPv4' && node.internal === false) { addresses.push(node) } }) }) if (addresses.length > 0) { return addresses[0].address } }