mezzanine
Version:
Fantasy land union types with pattern matching
80 lines (22 loc) • 2.12 kB
JavaScript
;Object.defineProperty(exports, "__esModule", { value: true });exports.
createPred = createPred;exports.
createBuilder = createBuilder;exports.
transformInput = transformInput;var _ramda = require('ramda');var _fixtures = require('./fixtures');require('./type-container'); //$FlowIssue
var reducePred = _ramda.where;function createPred(val) {switch (true) {case isDirectlyEquals(val):return obj => obj === val;case isCheckByType(val):return (0, _ramda.is)(val);case (0, _fixtures.isMezzanine)(val):{//$FlowIssue
var cast = val;return obj => cast.is(obj);}case typeof val === 'function':{var _cast = val;return _cast;}case (0, _ramda.isNil)(val):return _ramda.isNil;case typeof val === 'object':{var _cast2 = val;var mapped = (0, _ramda.map)(createPred, _cast2);return reducePred(mapped);}default:{var _cast3 = val;return _cast3;}}}function createBuilder(val, data) {switch (true) {case isDirectlyEquals(val):return data;case isCheckByType(val):return data;case (0, _fixtures.isMezzanine)(val):return val(data);case typeof val === 'function':return data;case (0, _ramda.isNil)(val):return data;case typeof val === 'object':return reduceBuilder(val, data);default:return data;}}function reduceBuilder(predMap, data) {var keys = Object.keys(predMap);var result = {};for (var i = 0, ln = keys.length; i < ln; ++i) {var _key = keys[i];var keyPred = predMap[_key];var nestedData = (0, _ramda.prop)(_key, data);result[_key] = createBuilder(keyPred, nestedData);}return result;}function transformInput(val, isMono) {switch (true) {case isMono === false:return val;
case (0, _fixtures.isMezzanine)(val):return { value: val };
case !(0, _fixtures.isObject)(val):return { value: val };
case !(0, _ramda.has)('value', val):return { value: val };
default:return val;}
}
var isDirectlyEquals = val =>
typeof val === 'string' ||
typeof val === 'number' ||
typeof val === 'boolean';
var isCheckByType = val =>
val === String ||
val === Number ||
val === Boolean ||
val === Function ||
val === Array;
//# sourceMappingURL=descriptor.js.map