ninjs-lodash
Version:
lodash wrapper + utils
459 lines (386 loc) • 10.8 kB
JavaScript
/**
* Settings -> merge(os, env, globals, .folders, .files, config)
*/
'use strict'
const path = require('path')
const os = require('os')
const _ = require('lodash')
const clc = require('cli-color')
const fs = require('fs-extra')
const libs = require('../libs')
const core = require('../core')
const CWD = process.cwd()
const ARGV = process.argv
const JARGV = _.minimist(ARGV)
const PKG = _.pkgup()
const PKG_ROOT = PKG ? _.get(PKG, '_root') || CWD : CWD
const PKG_PATH = PKG ? _.get(PKG, '_path') : ''
const ENV_CLEAN = _.omit(process.env, ['Path'])
const ENV_PATH = process.env['Path']
const ENV_PATHS = ENV_PATH ? ENV_PATH.split(path.delimiter) : []
const NODE_ENV = _.trim(getNodeEnv())
const DEBUG_ENV = _.trim(getDebugEnv())
const SYS_DRIVE = get('SystemDrive')
const SYS_ROOT = get('SystemRoot')
const PUBLIC_ROOT = get('PUBLIC')
const USER_NAME = get('USERNAME')
const USER_HOME = get('HOME')
const USER_LOCAL = get('LOCALAPPDATA')
const USER_ROAMING = get('APPDATA')
const USER_TEMP = get('TEMP') || get('TMP')
const GIT_ROOT = get('GIT_INSTALL_ROOT')
const NODE_MODULES_PATH = get('NODE_PATH')
const FFMPEG_PATH = get('FFMPEG_PATH')
const FFPROBE_PATH = get('FFPROBE_PATH')
const LODASH_TEMPLATE_SETTINGS = /<%=([\s\S]+?)%>/g
const PROG_FILES = get('ProgramFiles')
const PROG_DATA = get('ProgramData')
const OPENSSL = get('OPENSSL_CONF')
let SVN_SSH = get('SVN_SSH')
SVN_SSH = SVN_SSH ? _.path.resolve(SVN_SSH) : ''
let CACHE = {}
function get(key) { return _.get(process.env, key) || '' }
function set(key, v) { _.set(process.env, key, v); return get(key) }
function getNodeEnv() { return _.get(JARGV, 'env') || get('NODE_ENV') || 'development' }
function getDebugEnv() { return _.get(JARGV, 'debug') || get('DEBUG') || (getNodeEnv() === 'production' ? '' : '*') }
// update process.env variables
// -> could be different if passed in via command line args
set('NODE_ENV', NODE_ENV)
set('DEBUG', DEBUG_ENV)
const EXE_ARG = _.get(JARGV, '_.[0]') || ''
const CMD_ARG = _.get(JARGV, '_.[1]') || ''
const MAIN_FILE = _.get(require, 'main.filename') || ''
exports = module.exports = {
// NODE
"node": {
// 'development' || 'production'
"env": NODE_ENV,
// 'C:\\Users\\Stuart\\AppData\\Roaming\\npm\\node_modules'
"root": NODE_MODULES_PATH
},
// DEBUG
"debug": {
// 'development' || 'production'
"env": DEBUG_ENV
},
// PROC
"proc": {},
// OS
"os": {
"eol": os.EOL
},
// ENV
// "env": {
// //"paths": ENV_PATHS
// },
"argv": ARGV,
"jargv": JARGV,
// PATHS
"paths": {
"sysdrive": SYS_DRIVE,
"sysroot": SYS_ROOT,
"public": PUBLIC_ROOT,
"home": USER_HOME,
"local": USER_LOCAL,
"roaming": USER_ROAMING,
"modules": NODE_MODULES_PATH,
"temp": USER_TEMP,
"progdata": PROG_DATA,
"progfiles": PROG_FILES,
"exe": EXE_ARG,
"git": GIT_ROOT,
"svn": SVN_SSH,
"openssl": OPENSSL,
"ffmpeg": FFMPEG_PATH,
"ffprobe": FFPROBE_PATH,
"cwd": CWD,
"root": PKG_ROOT,
"arg": CMD_ARG,
"main": MAIN_FILE,
"pkg": PKG_PATH
},
// ACCOUNT
"account": {
"name": USER_NAME,
"email": ""
},
// USER
"user": {
// 'Stuart'
"name": USER_NAME,
// 'STUPC'
"domain": get('USERDOMAIN'),
// 'STUPC'
"roaming": get('USERDOMAIN_ROAMINGPROFILE'),
// '\\Users\\Stuart'
"homepath": get('HOMEPATH'),
// 'C:'
"drive": get('HOMEDRIVE'),
// 'C:\\Users\\Stuart'
"profile": get('USERPROFILE'),
// 'C:\\Users\\Stuart'
"home": USER_HOME,
// 'C:\\Users\\Public'
"public": PUBLIC_ROOT,
// 'C:\\Users\\Stuart\\AppData\\Roaming'
"data": USER_ROAMING,
// 'C:\\Users\\Stuart\\AppData\\Local'
"local": USER_LOCAL,
// 'C:\\Users\\Stuart\\AppData\\Local\\Temp'
"temp": USER_TEMP
},
// RUNTIME PACKAGE.JSON
"pkg": PKG,
// JAV - JSON ARG VARS
"jav": _.jav(),
// GIT
"git": {
// 'C:\\Program Files\\Git'
"root": GIT_ROOT
},
// LODASH
"lodash": {
"template": {
"settings": {
"interpolate": LODASH_TEMPLATE_SETTINGS
}
}
},
// REQUIRE
"require": {
"extensions": {
".md": (mod, filepath) => {
mod.exports = CACHE[filepath] || fs.readFileSync(filepath, "utf8")
CACHE[filepath] = mod.exports
return mod
},
".module": (mod, filepath) => {
mod.exports = filepath
return mod
}
}
},
// FFMPEG
"ffmpeg": {
// 'C:\\FFMPEG\\bin\\ffmpeg.exe'
"root": FFMPEG_PATH,
// 'C:\\FFMPEG\\bin\\ffprobe.exe'
"probe": FFPROBE_PATH
},
// TERMINAL
"terminal": {
// 'cygwin'
"term": get('TERM'),
// 'C\bL\bI\bN\bK\b \b$P$G'
"prompt": get('PROMPT'),
// '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.RB;.RBW'
"ext": get('PATHEXT')
},
// CLI
"cli": {
"is_local": CMD_ARG === MAIN_FILE,
"margin": " ",
"switch": {
"delimiter": "--",
"delimiters": ["--", "-", "/"]
}
},
// CMD
"cmd": {
"defaults": {
"cmd": "",
// <String> Current working directory of the child process
"cwd": CWD,
"type": "exec",
"args": [],
"switches": {},
// <Object> Environment key-value pairs (must be process.env and not null, otherwise errors may occur)
// env: _.assign({}, process.env),
"shell": "cmd.exe",
//shell: path.join('C:', 'Users', 'Stuart', 'Desktop', 'cmder', 'Cmder.exe'),
"timeout": 0,
// <String> (Default: 'SIGTERM')
"killSignal": "SIGTERM",
// <Number> largest amount of data (in bytes) allowed on stdout or stderr
"maxBuffer": 1024*1024,
"encoding": "utf8"
}
},
// CMDER
"cmder": {
// '0'
"verbose": get('verbose-output'),
// 'C:\\Users\\Stuart\\Desktop\\cmder\\config\\user-aliases.cmd'
"aliases": get('aliases'),
// 'C:\\Users\\Stuart\\Desktop\\cmder\\config\\user-aliases.cmd'
"user_aliases": get('user-aliases')
},
// SYSTEM
// __COMPAT_LAYER:'Installer'
"system": {
// 'C:'
"drive": SYS_DRIVE,
// 'C:\\WINDOWS'
"root": SYS_ROOT,
// 'C:\\WINDOWS'
"windir": get('windir')
},
// PROGRAMS
// 'ProgramFiles(x86)': 'C:\\Program Files (x86)',
// ProgramW6432: 'C:\\Program Files'
"programs": {
// 'C:\\Program Files'
"root": PROG_FILES,
// 'C:\\Program Files\\Common Files'
"common": get('CommonProgramFiles'),
// 'C:\\ProgramData'
"data": PROG_DATA,
// 'C:\\ProgramData'
"allusers": get('ALLUSERSPROFILE')
},
// PLATFORM
"platform": {
// 'STUPC'
"name": get('COMPUTERNAME'),
// 'Windows_NT'
"os": get('OS'),
// '\\\\STUPC'
"server": get('LOGONSERVER'),
// PROCESSORS
"cpu": {
// 'Intel64 Family 6 Model 60 Stepping 3, GenuineIntel'
"id": get('PROCESSOR_IDENTIFIER'),
// 'AMD64'
"arch": get('PROCESSOR_ARCHITECTURE'),
// '8'
"num": get('NUMBER_OF_PROCESSORS'),
// '6'
"level": get('PROCESSOR_LEVEL'),
// '3c03'
"rev": get('PROCESSOR_REVISION')
}
},
// OPENSSL
"openssl": {
// 'C:\\OpenSSL-Win64\\openssl.cnf'
"root": OPENSSL
},
// PLINK
"plink": {
// 'ssh'
"protocol": get('PLINK_PROTOCOL')
},
// SVN
"svn": {
// 'C:\\\\ProgramFiles\\\\Git\\\\bin\\\\ssh.exe'
"root": SVN_SSH
},
// VISUAL STUDIO
"vs": {
// 'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio11.0\\Common7\\Tools\\'
"VS110": get('VS110COMNTOOLS'),
// 'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio12.0\\Common7\\Tools\\'
"VS120": get('VS120COMNTOOLS'),
// 'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio14.0\\Common7\\Tools\\'
"VS140": get('VS140COMNTOOLS'),
// 'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio12.0\\VSSDK\\'
"VSSDK120": get('VSSDK120Install'),
// 'C:\\ProgramFiles(x86)\\MicrosoftVisualStudio14.0\\VSSDK\\'
"VSSDK140": get('VSSDK140Install')
},
// LAUNCH
"launch": {
"sdf": false
},
// JS
"js": {
"indent": _.repeat(' ', fs.spaces),
"wrap": 120,
"sort": false,
"align": true,
"decimals": 3,
"arrayPadding": 1,
"objectPadding": 1,
"afterComma": 1,
"beforeComma": 0,
"afterColon": 1,
"beforeColon": 1
},
// JSON
"json": {
"indent": _.repeat(' ', fs.spaces),
"wrap": -1,
"sort": false,
"align": true,
"decimals": undefined,
"arrayPadding": 1,
"objectPadding": 1,
"afterComma": 1,
"beforeComma": 0,
"afterColon": 1,
"beforeColon": 1
},
// XML
"xml": {
explicitCharkey: false,
trim: false,
normalize: false,
normalizeTags: false,
attrkey: "$",
charkey: "_",
explicitArray: true,
ignoreAttrs: false,
mergeAttrs: false,
explicitRoot: true,
validator: null,
xmlns: false,
explicitChildren: false,
preserveChildrenOrder: false,
childkey: '$$',
charsAsChildren: false,
includeWhiteChars: false,
async: false,
strict: true,
attrNameProcessors: null,
attrValueProcessors: null,
tagNameProcessors: null,
valueProcessors: null,
rootName: 'root',
xmldec: {
'version': '1.0',
'encoding': 'UTF-8',
'standalone': true
},
doctype: null,
renderOpts: {
'pretty': true,
'indent': ' ',
'newline': '\n'
},
headless: false,
chunkSize: 10000,
emptyTag: '',
cdata: false
}
// Eyes - JSON obj inspection + color
// "eyes": {
// styles: { // Styles applied to stdout
// all: 'cyan', // Overall style applied to everything
// label: 'underline', // Inspection labels, like 'array' in `array: [1, 2, 3]`
// other: 'inverted', // Objects which don't have a literal representation, such as functions
// key: 'magenta', // The keys in object literals, like 'a' in `{a: 1}`
// special: 'grey', // null, undefined...
// string: 'boldgreen',
// number: 'magenta',
// bool: 'blue', // true false
// regexp: 'green' // /\d+/
// },
// pretty: true, // Indent object literals
// indent: 2,
// hideFunctions: false,
// showHidden: true,
// sortKeys: false,
// stream: process.stdout,
// maxLength: false // Truncate output if longer
// }
}