mezzanine
Version:
Fantasy land union types with pattern matching
80 lines (69 loc) • 2.03 kB
JavaScript
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