UNPKG

match-iz

Version:

A tiny pattern-matching library in the style of the TC39 proposal

8 lines (7 loc) 7.06 kB
/* * match-iz * v5.1.1 * https://github.com/shuckster/match-iz * License: MIT */ var N=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols;var M=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var z=(t,e,n)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,H=(t,e)=>{for(var n in e||(e={}))M.call(e,n)&&z(t,n,e[n]);if(y)for(var n of y(e))C.call(e,n)&&z(t,n,e[n]);return t};var V=(t,e)=>{var n={};for(var s in t)M.call(t,s)&&e.indexOf(s)<0&&(n[s]=t[s]);if(t!=null&&y)for(var s of y(t))e.indexOf(s)<0&&C.call(t,s)&&(n[s]=t[s]);return n};var $=(t,e)=>{for(var n in e)N(t,n,{get:e[n],enumerable:!0})},it=(t,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ot(e))!M.call(t,r)&&r!==n&&N(t,r,{get:()=>e[r],enumerable:!(s=rt(e,r))||s.enumerable});return t};var ct=t=>it(N({},"__esModule",{value:!0}),t);var le={};$(le,{against:()=>Z,allOf:()=>tt,anyOf:()=>k,cata:()=>se,deepEq:()=>Ht,defined:()=>Gt,empty:()=>et,endsWith:()=>xt,eq:()=>x,every:()=>$t,falsy:()=>oe,firstOf:()=>Jt,getIterationLimit:()=>It,gt:()=>Qt,gte:()=>Xt,hasOwn:()=>ne,inRange:()=>Zt,includedIn:()=>te,includes:()=>kt,instanceOf:()=>vt,isArray:()=>p,isDate:()=>bt,isFunction:()=>a,isIterable:()=>Y,isNumber:()=>X,isPojo:()=>d,isRegExp:()=>P,isStrictly:()=>ee,isString:()=>v,lastOf:()=>Ut,lt:()=>Tt,lte:()=>Yt,match:()=>Kt,not:()=>Vt,otherwise:()=>Wt,pluck:()=>qt,rest:()=>zt,setIterationLimit:()=>Mt,some:()=>Bt,spread:()=>ue,startsWith:()=>_t,truthy:()=>re,when:()=>Lt});module.exports=ct(le);var b={};$(b,{instanceOf:()=>w,isArguments:()=>J,isArray:()=>lt,isDate:()=>ft,isFormData:()=>Ot,isFunction:()=>U,isIterable:()=>wt,isMap:()=>dt,isNumber:()=>gt,isObject:()=>G,isPojo:()=>ht,isRegExp:()=>pt,isSet:()=>at,isString:()=>mt});var B=Object.prototype,ut=B.toString,D=t=>e=>typeof e===t,w=t=>e=>e instanceof t;function m(t,e){let n={[e]:function(...s){return t.apply(this,s)}}[e];return Object.defineProperty(n,"name",{value:e}),n}var lt=m(Array.isArray,"isArray"),J=m(t=>ut.call(t)==="[object Arguments]","isArguments"),ft=m(t=>w(Date)(t)&&!isNaN(t),"isDate"),U=m(D("function"),"isFunction"),mt=m(D("string"),"isString"),gt=m(t=>t===t&&D("number")(t),"isNumber"),G=m(t=>t!==null&&D("object")(t),"isObject"),pt=m(w(RegExp),"isRegExp"),at=m(w(Set),"isSet"),dt=m(w(Map),"isMap"),ht=m(t=>t===null||!G(t)||J(t)?!1:Object.getPrototypeOf(t)===B,"isPojo"),wt=m(t=>t!=null&&[t[Symbol.iterator],t.next].every(U),"isIterable"),Ot=m(t=>typeof FormData!="undefined"&&w(FormData)(t),"isFormData");var{isArguments:St,isArray:p,isDate:bt,isFunction:a,isNumber:X}=b,{isPojo:d,isRegExp:P,isString:v,instanceOf:vt}=b,{isMap:Ft,isSet:yt,isIterable:Y,isFormData:Nt}=b,{keys:h,entries:Dt,assign:E}=Object,O=2e4,Et=!0,It=()=>O,Mt=t=>{let e=O;return O=t,()=>O=e};function At(t,e){for(let n=t.length-1;n>=0;n--)if(e(t[n]))return t[n]}function Q(t,e){if(Et&&!K(e)){let n=`Exhausted all patterns without finding a match for input: ${JSON.stringify(t)}. Handle it, or use otherwise() for the fall-through case.`;throw new Error(n)}}function Kt(t){return(...e)=>Z(...e)(t)}var Z=(...t)=>e=>{let[n,s]=St(e)?[{},Array.from(e)]:Ft(e)||Nt(e)?[{isMap:!0},e.entries()]:yt(e)?[{isSet:!0},e.values()]:[{},e];if(!Y(s)){let i=s,{found:g,result:f}=T(...t)(i);if(g)return f;let S=At(t,K);return Q(i,S),f}let r=s,[c,u]=t.reduce(([i,g],f)=>K(f)?[f,g]:[i,[...g,f]],[()=>({value:()=>{}}),[]]),o=[];do{let{value:i,done:g}=r.next();if(g)return Q(r,c),c().value();o.push(i);let{found:f,result:S}=T(...u)(n.isSet?i:n.isMap?{key:i[0],value:i[1]}:[...o]);if(f)return S}while(o.length<O||n.isSet||n.isMap);throw new Error(`Hit iterationLimit: ${O}. Use setIterationLimit(Infinity) to disable.`)},T=(...t)=>{let e;return n=>({found:!!t.find(r=>{let c=r(n),{matched:u,value:o}=c||{};return[u,o].every(a)?u(n)&&(e=o(n),!0):c&&(e=c)}),result:e})},R="@@match-iz/rest",Pt=t=>a(t==null?void 0:t[R]),Rt=t=>t[R],_=Symbol("@@match-iz/otherwise"),K=t=>(t==null?void 0:t[_])===!0,Wt=t=>{let e=n=>({matched:()=>!0,value:()=>a(t)?t(n):t});return e[_]=!0,e},A=t=>e=>n=>{let s={haystack:n};return{matched:()=>l(t,n,r=>n=r,s),value:()=>a(e)?v(n)&&P(t)?e(...jt(n.match(t))):e(n,s.rest):e}},Lt=(...t)=>{if(t.length===1){let[e]=t;return A(e)}if(t.length===2){let[e,n]=t;return A(e)(n)}if(t.length>2){let e=t.slice(-1)[0],n=t.slice(0,-1);return A(tt(n))(e)}throw new Error("Expected at least 1 argument")},jt=t=>{let{groups:e}=t;return e?[e,t]:[t]},l=(t,e,n,s={haystack:e})=>d(t)?h(t).every(r=>(s.consumedKeys=s.consumedKeys||[],s.consumedKeys.push(r),s.key=r,l(t[r],e==null?void 0:e[r],n,s))):p(t)?p(e)&&t.every((r,c)=>{let u=Pt(r)?Rt(r):r;return s.key=c,l(u,e==null?void 0:e[c],n,s)}):a(t)?t(e,n,s):v(e)&&P(t)?t.test(e):t===e||[t,e].every(Number.isNaN),qt=(...t)=>(e,n,s)=>t.length===0||(a(t[0])?t[0](e):l(t[0],e,n,s))?(n(e),!0):!1,zt=(...t)=>{let e=t.length===0?()=>!0:t[0],n=()=>e,s=c=>(u,o)=>E(u,{[o]:c.haystack[o]}),r=(c,u)=>E(c,{[u]:e});return{[R]:(c,u,o)=>{if(d(o.haystack)){let i=[],g=h(o.haystack).reduce((q,I)=>((o.consumedKeys||[]).includes(I)?i.push(I):q.push(I),q),[]),f=i.reduce(s(o),{}),S=g.reduce(r,{}),j=l(E({},f,S),o.haystack,u);return j&&(o.rest=g.reduce(s(o),{})),j}if(p(o.haystack)){let i=o.haystack.slice(0,o.key),g=o.haystack.slice(o.key).map(n),f=l(i.concat(g),o.haystack,u);return f&&(o.rest=o.haystack.slice(o.key)),f}return!1}}},Ct=(t,e)=>[t,e].every(p)?t.length===e.length:[t,e].every(d)?h(t).length===h(e).length:!0,x=t=>(e,n,s)=>Ct(t,e)&&l(t,e,n,s),Ht=t=>W(t,e=>d(e)?x(e):e),Vt=t=>(e,n,s)=>!l(t,e,n,s),k=(...t)=>(e,n,s)=>t.flat().some(r=>l(r,e,n,s)),tt=(...t)=>(e,n,s)=>t.flat().every(r=>l(r,e,n,s)),$t=t=>st((e,n,s)=>e.every(r=>l(t,r,n,s))),Bt=t=>st((e,n,s)=>e.some(r=>l(t,r,n,s))),Jt=(...t)=>L((e,n,s)=>t.length<=e.length&&l(t,e.slice(0,t.length),n,s)),Ut=(...t)=>L((e,n,s)=>t.length<=e.length&&l(t,e.slice(e.length-t.length),n,s)),et=t=>t!==t||!t&&t!==0&&t!==!1||p(t)&&!t.length||d(t)&&!h(t).length,Gt=t=>!et(t),Qt=t=>F(e=>e>t),Tt=t=>F(e=>e<t),Xt=t=>F(e=>e>=t),Yt=t=>F(e=>e<=t),Zt=(t,e)=>F(n=>n>=Math.min(t,e)&&n<=Math.max(t,e)),_t=t=>nt(e=>e.startsWith(t)),xt=t=>nt(e=>e.endsWith(t)),kt=t=>L(e=>e.includes(t)),te=k,ee=t=>e=>e===t,ne=(...t)=>e=>d(e)&&(([n,s])=>n.length&&n.every(r=>s.includes(r)))([t.flat(),h(e)]),se=n=>{var s=n,{getValue:t}=s,e=V(s,["getValue"]);return Dt(e).reduce((r,[c,u])=>E(r,{[c]:o=>i=>({matched:()=>u(i),value:()=>a(o)?o(t(i)):o})}),{})},re=t=>!!t,oe=t=>!t,ie=t=>(e,n)=>(e[n]=W(e[n],t),e),ce=t=>e=>W(e,t),W=(t,e)=>e(d(t)?h(t).reduce(ie(e),H({},t)):p(t)?t.map(ce(e)):t),ue=t=>new Proxy({},{get:()=>t}),nt=t=>e=>v(e)&&t(e),F=t=>e=>X(e)&&t(e),st=t=>(e,n,s)=>p(e)&&t(e,n,s),L=t=>(e,n,s)=>(p(e)||v(e))&&t(e,n,s);0&&(module.exports={against,allOf,anyOf,cata,deepEq,defined,empty,endsWith,eq,every,falsy,firstOf,getIterationLimit,gt,gte,hasOwn,inRange,includedIn,includes,instanceOf,isArray,isDate,isFunction,isIterable,isNumber,isPojo,isRegExp,isStrictly,isString,lastOf,lt,lte,match,not,otherwise,pluck,rest,setIterationLimit,some,spread,startsWith,truthy,when});