UNPKG

mezzanine

Version:

Fantasy land union types with pattern matching

80 lines (69 loc) 2.03 kB
import { map, is, isNil, where, prop, has } from 'ramda'; import { isObject, isMezzanine } from './fixtures'; import './type-container'; //$FlowIssue var reducePred = where; export function createPred(val) { switch (true) { case isDirectlyEquals(val):return obj => obj === val; case isCheckByType(val):return is(val); case isMezzanine(val):{ //$FlowIssue var cast = val; return obj => cast.is(obj); } case typeof val === 'function':{ var _cast = val; return _cast; } case isNil(val):return isNil; case typeof val === 'object':{ var _cast2 = val; var mapped = map(createPred, _cast2); return reducePred(mapped); } default:{ var _cast3 = val; return _cast3; }} } export function createBuilder(val, data) { switch (true) { case isDirectlyEquals(val):return data; case isCheckByType(val):return data; case isMezzanine(val):return val(data); case typeof val === 'function':return data; case 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 = prop(_key, data); result[_key] = createBuilder(keyPred, nestedData); } return result; } export function transformInput(val, isMono) { switch (true) { case isMono === false:return val; case isMezzanine(val):return { value: val }; case !isObject(val):return { value: val }; case !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