sintez
Version:
Enchanted gulp tasks
548 lines (430 loc) • 15.6 kB
JavaScript
'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);