UNPKG

cz

Version:

A simple config utility for nodejs

171 lines (150 loc) 6.34 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _lodash = require('lodash'); var _utils = require('./utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Cz = function () { function Cz() { _classCallCheck(this, Cz); this._config = new WeakMap(); this._defaults = new WeakMap(); this._path = null; } _createClass(Cz, [{ key: 'get', value: function get(prop) { var wholeObj = Object.assign((0, _utils.weakToJSON)(this._defaults), (0, _utils.weakToJSON)(this._config)); if (arguments.length === 0) { return wholeObj; } return (0, _lodash.get)(wholeObj, prop.replace(':', '.')); } }, { key: 'set', value: function set(prop, value) { // Handles if prop is key or obj if (value === undefined) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = Object.keys(prop)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var key = _step.value; (0, _lodash.set)(this._config, key, prop[key]); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } else { (0, _lodash.set)(this._config, prop.replace(':', '.'), value); } } }, { key: 'defaults', value: function defaults(obj) { this._defaults = obj; } }, { key: 'load', value: function load(newPath) { try { var file = _fs2.default.readFileSync(newPath, 'utf-8'); this._path = newPath; // We use 2 as an empty file with a new line would return 1 if (file.length >= 2) { var data = JSON.parse(file); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = Object.keys(data)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var prop = _step2.value; this._config[prop] = data[prop]; } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } } catch (err) { if (err.code !== 'ENOENT') { throw err; } } } }, { key: 'save', value: function save(newPath) { if (arguments.length === 0 && this._path === null) { throw new Error('No path provided.'); } else { _fs2.default.writeFileSync(_path2.default.normalize(newPath || this._path), JSON.stringify(this._config, null, 4) + '\n', 'utf8'); } } }, { key: 'args', value: function args() { var _this = this; var args = process.argv.filter(function (arg) { return arg.startsWith('--') && arg.includes('='); }); args.forEach(function (arg) { arg = arg.slice(2).split('='); // Gets us ['db:host', 'localhost'] from '--db:host=localhost' _this.set(arg[0], arg[1]); }); } }, { key: 'joinGets', value: function joinGets(gets, joins) { var _this2 = this; // @TODO: Add support for a single join param instead of just array var results = gets.map(function (get) { return _this2.get(get); }); var finalResult = ''; for (var i = 0; i < gets.length; i++) { finalResult += results[i]; if (i + 1 !== gets.length) { finalResult += joins[i]; } } return finalResult; } }, { key: 'reset', value: function reset() { this._config = new WeakMap(); } }]); return Cz; }(); exports.default = Cz;