@burdaforward/composable-rules
Version:
A library for composable rule logic. Easily combine simple rules into more complex ones in a maintainable way using your custom logic and data.
2 lines (1 loc) • 1.64 kB
JavaScript
var p=(e,t)=>{let u=(...n)=>(...l)=>{let s=t!==0&&l.length===0?[void 0]:l,a=[...n,...s];return a.length>=t?e(...a):u(...a)};return u()},c=p;var f=(...e)=>!0,d=e=>(t,u)=>!e(t,u),I=e=>(t,u)=>e.some(n=>n(t,u)),m=e=>(t,u)=>e.every(n=>n(t,u)),M=(e,t)=>({type:"injected",mapper:e,childRule:t}),v=(e,t)=>({type:"transformed",transformer:e,rule:t}),j=(e,t)=>({type:"if",matcher:e,rule:t}),b=e=>({type:"all",rules:e}),A=e=>({type:"first",rules:e}),g=e=>({type:"chain",rules:e}),r=(e,t,u)=>{switch(e.type){case"injected":return r(e.childRule,e.mapper(t),u);case"transformed":{let{foundMatch:n,value:l}=r(e.rule,t,u);return{foundMatch:n,value:n?e.transformer(l):l}}case"if":{let n=e.rule;return e.matcher(t,u.value)?r(n,t,u):{foundMatch:!1,value:u.value}}case"all":return y(e.rules,t,u);case"first":return R(e.rules,t,u);case"chain":return o(e.rules,t,u);default:return e.matcher(t,u.value)?{foundMatch:!0,value:e.action(t,u.value)}:{foundMatch:!1,value:u.value}}},y=(e,t,u)=>{let n=(l,s)=>{let a=r(s,t,l);return{foundMatch:l.foundMatch||a.foundMatch,value:a.value}};return e.reduce(n,u)},R=(e,t,u)=>{let[n,...l]=e;if(!n)return u;let{foundMatch:s,value:a}=r(n,t,u);return s?{foundMatch:s,value:a}:R(l,t,u)},o=(e,t,u)=>{let[n,...l]=e;if(!n)return u;let{foundMatch:s,value:a}=r(n,t,u);return s?o(l,t,{foundMatch:s,value:a}):u},i=c((e,t,u)=>{let n={foundMatch:!1,value:u};try{return[null,r(e,t,n)]}catch(l){return[l,null]}},3),T=c((e,t,u)=>{let[n,{value:l}]=i(e,t,u);return[n,l]},3);export{m as all,f as always,b as applyAll,g as applyChain,A as applyFirst,j as applyIf,i as detailedRun,M as injectFacts,d as not,I as one,T as run,v as transformOutput};