UNPKG

ninjs-lodash

Version:
113 lines (96 loc) 3.42 kB
/** * Settings -> merge(os, env, globals, .folders, .files, config) */ 'use strict' const path = require('path') const os = require('os') const _ = require('lodash') const fs = require('fs-extra') const libs = require('../libs') const core = require('../core') const DOT_NAME = '.ninjs' let DEFAULTS = require('./settings') let SETTINGS = _.assign({}, DEFAULTS) // settings get/sets function getset(k, v) { return v ? set(k, v) : get(k) } function get(k) { return k && _.isString(k) ? _.get(SETTINGS, k) : SETTINGS } function set(k, v) { if(!k) return let curr = get(k) v = curr && _.isPlainObject(curr) && _.isPlainObject(v) ? _.deepExtend(curr, v) : v _.set(SETTINGS, k, v) return get(k) } exports = module.exports = getset _.assign(_, { "$": getset }) function load() { loadDependencySettings() // loadUser() // loadUserLocal() // loadUserRoaming() // loadUserTemp() loadCwdSettings() loadLodashSettings() } function existsSync(src) { return !_.isError(_.attempt(fs.accessSync, src, fs.constants.F_OK)) ? true : false } function getFile(src) { if(!src || !_.isString(src)) return let ext = path.parse(src).ext let isJson = ext && _.toLower(ext) === '.json' ? true : false let isJs = ext && _.toLower(ext) === '.js' ? true : false if(!isJson && !isJs) return let file = isJson ? _.attempt(fs.readFileSync, src, 'utf8') : _.attempt(require, src) if(!file || _.isError(file)) return file = isJson ? _.strip(file) : file let parsed = isJson ? _.attempt(JSON.parse, file) : file return _.isError(parsed) ? file : parsed } function mergeFile(src) { if(!src || !_.isString(src)) return let exists = existsSync(src) if(!exists) return let obj = getFile(src) if(!obj) return return SETTINGS = _.attempt(_.deepExtend, SETTINGS, obj) } function loadDependencySettings() { let pkg = get('pkg') let deps = pkg ? _.get(pkg, 'dependencies') : null if(!deps || !_.isPlainObject(deps) || _.isEmpty(deps)) return _.forIn(deps, (v, k) => { let src = _.attempt(require.resolve, k) if(!src || _.isError(src)) return let lib = path.parse(src).dir let root = path.parse(lib).dir mergeFile(path.join(lib, DOT_NAME, 'settings.js')) mergeFile(path.join(lib, DOT_NAME, 'settings.json')) mergeFile(path.join(root, DOT_NAME, 'settings.js')) mergeFile(path.join(root, DOT_NAME, 'settings.json')) }) } function loadUser() { let root = _.$('paths.home') let src = root && _.isString(root) ? path.join(root, DOT_NAME, 'settings.json') : '' if(!src || !_.isString(src)) return return existsSync(src) ? mergeFile(src) : fs.outputJsonSync(src, SETTINGS) } function loadUserLocal() { } function loadUserRoaming() { } function loadUserTemp() { } function loadCwdSettings() { let root = process.cwd() let par = path.parse(root).dir mergeFile(path.join(root, DOT_NAME, 'settings.json')) mergeFile(path.join(root, DOT_NAME, 'settings.js')) mergeFile(path.join(par, DOT_NAME, 'settings.json')) mergeFile(path.join(par, DOT_NAME, 'settings.js')) } function loadLodashSettings() { // remove _ copy of itself _.unset(_, '_') // setup _.template settings to ignore template strings and Grave accents/backticks (`) _.templateSettings.interpolate = _.$('lodash.template.settings.interpolate') } load()