UNPKG

switch-functional

Version:
98 lines (55 loc) 1.08 kB
export const matchesConditions=( input, conditions, options)=> Array.isArray(conditions)? conditions.some((condition)=> matchesCondition( input, condition, options ) ): matchesCondition( input, conditions, options ); const matchesCondition=( input, condition, { mapCondition })=> { const normalizedCondition= mapCondition===undefined? condition: mapCondition(condition); if(typeof normalizedCondition==="function"){ return normalizedCondition(input) } if(typeof normalizedCondition==="boolean"){ return normalizedCondition } return deepIncludes(input,normalizedCondition) }; const deepIncludes=(input,subset)=>{ if( !isObject(input)|| !isObject(subset)|| Array.isArray(input)!==Array.isArray(subset)) { return Object.is(input,subset) } if(Array.isArray(input)&&Array.isArray(subset)){ return( subset.length===input.length&& subset.every((item,index)=>deepIncludes(input[index],item))) } return Object.entries(subset).every(([name,child])=> deepIncludes(input[name],child) ) }; const isObject=(input)=> typeof input==="object"&&input!==null;