UNPKG

sintez

Version:
548 lines (430 loc) 15.6 kB
'use strict'; 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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; var _jsYaml = require('js-yaml'); var _fs = require('fs'); var _path2 = require('path'); var _path3 = _interopRequireDefault(_path2); var _yargs = require('yargs'); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _prettyjson = require('prettyjson'); var _prettyjson2 = _interopRequireDefault(_prettyjson); var _baseStorage = require('base-storage'); var _baseStorage2 = _interopRequireDefault(_baseStorage); var _isString = require('lodash/isString'); var _isString2 = _interopRequireDefault(_isString); var _isFunction = require('lodash/isFunction'); var _isFunction2 = _interopRequireDefault(_isFunction); var _isArray = require('lodash/isArray'); var _isArray2 = _interopRequireDefault(_isArray); var _isObject = require('lodash/isObject'); var _isObject2 = _interopRequireDefault(_isObject); var _isRegExp = require('lodash/isRegExp'); var _isRegExp2 = _interopRequireDefault(_isRegExp); var _isDate = require('lodash/isDate'); var _isDate2 = _interopRequireDefault(_isDate); 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"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var join = _path3.default.join; var dirname = _path3.default.dirname; var normalizeConfig = function normalizeConfig(config) { return config; }; var loadYml = function loadYml(configPath) { var normalized = {}; var warnings = []; var includes = []; if ((0, _fs.existsSync)(configPath)) { includes.push(configPath); var configYml = (0, _fs.readFileSync)(configPath); var config = (0, _jsYaml.load)(configYml); normalized = normalizeConfig(config); if (normalized.include) { var include = null; if ((0, _isArray2.default)(normalized.include)) { include = normalized.include; } else { include = [normalized.include]; } var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = include[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var dependency = _step.value; var currentDir = dirname(configPath); var parentConfigPath = join(currentDir, dependency); var included = loadYml(parentConfigPath); normalized = Object.assign({}, included.config, normalized, { include: null }); warnings = warnings.concat(included.warnings); includes = includes.concat(included.includes); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } } else { warnings.push('Sintez config "' + _chalk2.default.cyan(configPath) + '" ' + _chalk2.default.red.bold('DOES NOT EXIST. Will be ignored')); } return { config: normalized, warnings: warnings, includes: includes }; }; var getModuleMutatorName = function getModuleMutatorName(key) { return 'sintez-' + key; }; var getMutatorConfigKey = function getMutatorConfigKey(key) { return '' + key; }; var isValidMutatorKey = function isValidMutatorKey(key) { return key && (0, _isString2.default)(key); }; var invalidMutatorKey = function invalidMutatorKey(key) { return new Error('Mutator key should be a String. at "' + key + '"'); }; var parseArray = function parseArray(raw, getter) { var parsed = []; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = raw[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var id = _step2.value; var value = parse(id, getter); parsed.push(value); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return parsed; }; var parseObject = function parseObject(raw, getter) { var parsed = {}; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = Object.keys(raw)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var id = _step3.value; var value = raw[id]; parsed[id] = parse(value, getter); } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } return parsed; }; var isMagic = function isMagic(raw) { return (/^([^\~]+\~)+/.test(raw) ); }; var getMutatorsAndSection = function getMutatorsAndSection(raw) { var mutatorIds = raw.split('~'); var sectionId = mutatorIds.pop(); return { mutatorIds: mutatorIds.map(function (mutatorId) { return mutatorId.trim(); }).reverse(), sectionId: sectionId.trim() }; }; var parseTemplate = function parseTemplate(raw, getter) { var parsed = null; if (isMagic(raw)) { parsed = getter(raw); } else { parsed = raw; } return parsed; }; var parse = function parse(raw, getter) { var parsed = null; if ((0, _isRegExp2.default)(raw) || (0, _isDate2.default)(raw)) { parsed = raw; } else if ((0, _isArray2.default)(raw)) { parsed = parseArray(raw, getter); } else if ((0, _isObject2.default)(raw)) { parsed = parseObject(raw, getter); } else if ((0, _isString2.default)(raw)) { parsed = parseTemplate(raw, getter); } else { parsed = raw; } return parsed; }; // Private attributes var _mutators = Symbol('mutators'); // workarond commonJs module.exports = function (_BaseStorage) { _inherits(Sintez, _BaseStorage); function Sintez(config) { _classCallCheck(this, Sintez); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Sintez).call(this, config)); _this[_mutators] = new Map(); return _this; } _createClass(Sintez, [{ key: 'addMutator', value: function addMutator(id, mutator) { this[_mutators].set(id, mutator); } // ----- }, { key: 'hasMutator', value: function hasMutator(key) { return this.hasRegisteredMutator(key) || this.hasModuleMutator(key); } }, { key: 'getMutator', value: function getMutator(key) { var transformer = null; if (this.hasRegisteredMutator(key)) { transformer = this.getRegisteredMutator(key); } else if (this.hasModuleMutator(key)) { transformer = this.getModuleMutator(key); } else { var moduleName = getModuleMutatorName(key); throw new Error('Can not find mutator "' + key + '". try "npm install --save ' + moduleName + '"'); } return transformer; } // ---- }, { key: 'getRegisteredMutator', value: function getRegisteredMutator(key) { return this[_mutators].get(key); } }, { key: 'hasRegisteredMutator', value: function hasRegisteredMutator(key) { return this[_mutators].has(key); } // ---- }, { key: 'getModuleMutator', value: function getModuleMutator() { var path = getModuleMutatorName(key); return require(path); } }, { key: 'hasModuleMutator', value: function hasModuleMutator(key) { var sintezModuleMutatorName = getModuleMutatorName(key); var existsAsModule = false; try { require.resolve(sintezModuleMutatorName); existsAsModule = true; } catch (error) {} return existsAsModule; } // ----- }, { key: 'set', value: function set() { throw new Error('"set" is not allowed'); } }, { key: 'get', value: function get(id) { var _getMutatorsAndSectio = getMutatorsAndSection(id); var mutatorIds = _getMutatorsAndSectio.mutatorIds; var sectionId = _getMutatorsAndSectio.sectionId; //let mutators = null; //if (mutatorId && mutatorId != 'get') { // mutator = this.getMutator(mutatorId); //} //console.log(id, mutatorIds); var raw = _get(Object.getPrototypeOf(Sintez.prototype), 'get', this).call(this, sectionId); var parsed = parse(raw, this.get.bind(this)); if (mutatorIds.length) { var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = mutatorIds[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var mutatorId = _step4.value; if (mutatorId != 'get') { var mutator = this.getMutator(mutatorId); var mutatorConfig = this.get(mutatorId + '-mutator', {}); var advancedConfig = Object.assign({ src: this.getSrc(), dest: this.getDest() }, mutatorConfig); parsed = mutator(sectionId, parsed, advancedConfig); } } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } } return parsed; } // ----- }, { key: 'getDest', value: function getDest() { return _get(Object.getPrototypeOf(Sintez.prototype), 'get', this).call(this, 'dest'); } }, { key: 'getSrc', value: function getSrc() { return _get(Object.getPrototypeOf(Sintez.prototype), 'get', this).call(this, 'src'); } // ---- }, { key: 'raw', value: function raw(path) { var key = null; if (path) { key = path; } else { key = _yargs.argv.key; } var config = null; if (key) { config = _get(Object.getPrototypeOf(Sintez.prototype), 'get', this).call(this, key); } else { config = _get(Object.getPrototypeOf(Sintez.prototype), 'get', this).call(this); } var pretty = _prettyjson2.default.render(config); console.log(''); console.log(pretty); console.log(''); } }, { key: 'render', value: function render(path) { var key = null; if (path) { key = path; } else { key = _yargs.argv.key; } var config = null; if (key) { config = this.get(key); } else { config = this.raw(); } var pretty = _prettyjson2.default.render(config); console.log(''); console.log(pretty); console.log(''); } }], [{ key: 'fromPath', value: function fromPath(configPath) { var _loadYml = loadYml(configPath); var config = _loadYml.config; var warnings = _loadYml.warnings; var includes = _loadYml.includes; if (warnings.length) { console.log('Sintez warnings:'); var _iteratorNormalCompletion5 = true; var _didIteratorError5 = false; var _iteratorError5 = undefined; try { for (var _iterator5 = warnings[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { var warning = _step5.value; console.log(' - ' + warning); } } catch (err) { _didIteratorError5 = true; _iteratorError5 = err; } finally { try { if (!_iteratorNormalCompletion5 && _iterator5.return) { _iterator5.return(); } } finally { if (_didIteratorError5) { throw _iteratorError5; } } } console.log(''); } if (includes.length) { console.log('Sintez was configured using configs:'); var _iteratorNormalCompletion6 = true; var _didIteratorError6 = false; var _iteratorError6 = undefined; try { for (var _iterator6 = includes[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { var _path = _step6.value; console.log(' - ' + _path); } } catch (err) { _didIteratorError6 = true; _iteratorError6 = err; } finally { try { if (!_iteratorNormalCompletion6 && _iterator6.return) { _iterator6.return(); } } finally { if (_didIteratorError6) { throw _iteratorError6; } } } console.log(''); } else { throw new Error('Can not configure Sintez. There are no existing configs files'); } return new Sintez(config); } }]); return Sintez; }(_baseStorage2.default);