ts-pattern
Advanced tools
Comparing version 5.0.1 to 5.0.2
@@ -1,2 +0,2 @@ | ||
const t=Symbol("@ts-pattern/matcher"),e=Symbol("@ts-pattern/isVariadic"),n="@ts-pattern/anonymous-select-key",r=t=>Boolean(t&&"object"==typeof t),i=e=>e&&!!e[t],s=(n,o,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(o);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(o))return!1;if(Array.isArray(n)){if(!Array.isArray(o))return!1;let t=[],r=[],a=[];for(const s of n.keys()){const o=n[s];i(o)&&o[e]?a.push(o):a.length?r.push(o):t.push(o)}if(a.length){if(a.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(o.length<t.length+r.length)return!1;const e=o.slice(0,t.length),n=0===r.length?[]:o.slice(-r.length),i=o.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>s(t,e[n],c))&&r.every((t,e)=>s(t,n[e],c))&&(0===a.length||s(a[0],i,c))}return n.length===o.length&&n.every((t,e)=>s(t,o[e],c))}return Object.keys(n).every(e=>{const r=n[e];return(e in o||i(a=r)&&"optional"===a[t]().matcherType)&&s(r,o[e],c);var a})}return Object.is(o,n)},o=e=>{var n,s,a;return r(e)?i(e)?null!=(n=null==(s=(a=e[t]()).getSelectionKeys)?void 0:s.call(a))?n:[]:Array.isArray(e)?c(e,o):c(Object.values(e),o):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function a(...t){if(1===t.length){const[e]=t;return t=>s(e,t,()=>{})}if(2===t.length){const[e,n]=t;return s(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function u(t){return Object.assign(t,{optional:()=>l(t),and:e=>m(t,e),or:e=>y(t,e),select:e=>void 0===e?d(t):d(e,t)})}function h(t){return Object.assign((t=>Object.assign(t,{*[Symbol.iterator](){yield Object.assign(t,{[e]:!0})}}))(t),{optional:()=>h(l(t)),select:e=>h(void 0===e?d(t):d(e,t))})}function l(e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(o(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:s(e,t,r),selections:n}},getSelectionKeys:()=>o(e),matcherType:"optional"})})}const g=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},f=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0};function m(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>s(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,o),matcherType:"and"})})}function y(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,o).forEach(t=>r(t,void 0)),{matched:e.some(e=>s(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,o),matcherType:"or"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function d(...e){const r="string"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:"string"==typeof e[0]?void 0:e[0];return u({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||s(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:o(i))})})}function v(t){return"number"==typeof t}function b(t){return"string"==typeof t}function w(t){return"bigint"==typeof t}const S=u(p(function(t){return!0})),O=S,j=t=>Object.assign(u(t),{startsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.startsWith(n)))));var n},endsWith:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.endsWith(n)))));var n},minLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length>=t))(e))),maxLength:e=>j(m(t,(t=>p(e=>b(e)&&e.length<=t))(e))),includes:e=>{return j(m(t,(n=e,p(t=>b(t)&&t.includes(n)))));var n},regex:e=>{return j(m(t,(n=e,p(t=>b(t)&&Boolean(t.match(n))))));var n}}),B=j(p(b)),E=(t,e)=>p(n=>v(n)&&t<=n&&e>=n),I=t=>p(e=>v(e)&&e<t),K=t=>p(e=>v(e)&&e>t),A=t=>p(e=>v(e)&&e<=t),k=t=>p(e=>v(e)&&e>=t),x=()=>p(t=>v(t)&&Number.isInteger(t)),P=()=>p(t=>v(t)&&Number.isFinite(t)),T=()=>p(t=>v(t)&&t>0),_=()=>p(t=>v(t)&&t<0),W=t=>Object.assign(u(t),{between:(e,n)=>W(m(t,E(e,n))),lt:e=>W(m(t,I(e))),gt:e=>W(m(t,K(e))),lte:e=>W(m(t,A(e))),gte:e=>W(m(t,k(e))),int:()=>W(m(t,x())),finite:()=>W(m(t,P())),positive:()=>W(m(t,T())),negative:()=>W(m(t,_()))}),N=W(p(v)),$=(t,e)=>p(n=>w(n)&&t<=n&&e>=n),z=t=>p(e=>w(e)&&e<t),L=t=>p(e=>w(e)&&e>t),M=t=>p(e=>w(e)&&e<=t),F=t=>p(e=>w(e)&&e>=t),J=()=>p(t=>w(t)&&t>0),U=()=>p(t=>w(t)&&t<0),V=t=>Object.assign(u(t),{between:(e,n)=>V(m(t,$(e,n))),lt:e=>V(m(t,z(e))),gt:e=>V(m(t,L(e))),lte:e=>V(m(t,M(e))),gte:e=>V(m(t,F(e))),positive:()=>V(m(t,J())),negative:()=>V(m(t,U()))}),q=V(p(w)),C=u(p(function(t){return"boolean"==typeof t})),D=u(p(function(t){return"symbol"==typeof t})),G=u(p(function(t){return null==t}));var H={__proto__:null,matcher:t,optional:l,array:function(...e){return h({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return o(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>s(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:o(e[0])})})},set:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:g(t,t=>s(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:o(e[0])})})},map:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\`P.map\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[o,c]=e;return{matched:f(t,(t,e)=>{const n=s(o,e,r),i=s(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...o(e[0]),...o(e[1])]})})},intersection:m,union:y,not:function(e){return u({[t]:()=>({match:t=>({matched:!s(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:p,select:d,any:S,_:O,string:B,between:E,lt:I,gt:K,lte:A,gte:k,int:x,finite:P,positive:T,negative:_,number:N,betweenBigInt:$,ltBigInt:z,gtBigInt:L,lteBigInt:M,gteBigInt:F,positiveBigInt:J,negativeBigInt:U,bigint:q,boolean:C,symbol:D,nullish:G,instanceOf:function(t){return u(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return u(p(a(t)))}};function Q(t){return new X(t)}const R={matched:!1,value:void 0};class X{constructor(t,e=R){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]],i=[];3===t.length&&"function"==typeof t[1]?(r.push(t[0]),i.push(t[1])):t.length>2&&r.push(...t.slice(1,t.length-1));let o={};const c=Boolean(r.some(t=>s(t,this.input,(t,e)=>{o[t]=e}))&&i.every(t=>t(this.input)))?{matched:!0,value:e(Object.keys(o).length?n in o?o[n]:o:this.input,this.input)}:R;return new X(this.input,c)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new X(this.input,n?{matched:!0,value:e(this.input,this.input)}:R)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(){return this.run()}run(){if(this.state.matched)return this.state.value;let t;try{t=JSON.stringify(this.input)}catch(e){t=this.input}throw new Error(`Pattern matching error: no pattern matches value ${t}`)}returnType(){return this}}export{H as P,H as Pattern,a as isMatching,Q as match}; | ||
const t=Symbol.for("@ts-pattern/matcher"),e=Symbol.for("@ts-pattern/isVariadic"),n="@ts-pattern/anonymous-select-key",r=t=>Boolean(t&&"object"==typeof t),i=e=>e&&!!e[t],s=(n,o,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(o);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(o))return!1;if(Array.isArray(n)){if(!Array.isArray(o))return!1;let t=[],r=[],a=[];for(const s of n.keys()){const o=n[s];i(o)&&o[e]?a.push(o):a.length?r.push(o):t.push(o)}if(a.length){if(a.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(o.length<t.length+r.length)return!1;const e=o.slice(0,t.length),n=0===r.length?[]:o.slice(-r.length),i=o.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>s(t,e[n],c))&&r.every((t,e)=>s(t,n[e],c))&&(0===a.length||s(a[0],i,c))}return n.length===o.length&&n.every((t,e)=>s(t,o[e],c))}return Object.keys(n).every(e=>{const r=n[e];return(e in o||i(a=r)&&"optional"===a[t]().matcherType)&&s(r,o[e],c);var a})}return Object.is(o,n)},o=e=>{var n,s,a;return r(e)?i(e)?null!=(n=null==(s=(a=e[t]()).getSelectionKeys)?void 0:s.call(a))?n:[]:Array.isArray(e)?c(e,o):c(Object.values(e),o):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function a(...t){if(1===t.length){const[e]=t;return t=>s(e,t,()=>{})}if(2===t.length){const[e,n]=t;return s(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function u(t){return Object.assign(t,{optional:()=>l(t),and:e=>m(t,e),or:e=>p(t,e),select:e=>void 0===e?d(t):d(e,t)})}function h(t){return Object.assign((t=>Object.assign(t,{*[Symbol.iterator](){yield Object.assign(t,{[e]:!0})}}))(t),{optional:()=>h(l(t)),select:e=>h(void 0===e?d(t):d(e,t))})}function l(e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(o(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:s(e,t,r),selections:n}},getSelectionKeys:()=>o(e),matcherType:"optional"})})}const g=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},f=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0};function m(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>s(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,o),matcherType:"and"})})}function p(...e){return u({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,o).forEach(t=>r(t,void 0)),{matched:e.some(e=>s(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,o),matcherType:"or"})})}function y(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function d(...e){const r="string"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:"string"==typeof e[0]?void 0:e[0];return u({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||s(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:o(i))})})}function v(t){return"number"==typeof t}function b(t){return"string"==typeof t}function w(t){return"bigint"==typeof t}const S=u(y(function(t){return!0})),O=S,j=t=>Object.assign(u(t),{startsWith:e=>{return j(m(t,(n=e,y(t=>b(t)&&t.startsWith(n)))));var n},endsWith:e=>{return j(m(t,(n=e,y(t=>b(t)&&t.endsWith(n)))));var n},minLength:e=>j(m(t,(t=>y(e=>b(e)&&e.length>=t))(e))),maxLength:e=>j(m(t,(t=>y(e=>b(e)&&e.length<=t))(e))),includes:e=>{return j(m(t,(n=e,y(t=>b(t)&&t.includes(n)))));var n},regex:e=>{return j(m(t,(n=e,y(t=>b(t)&&Boolean(t.match(n))))));var n}}),B=j(y(b)),E=(t,e)=>y(n=>v(n)&&t<=n&&e>=n),I=t=>y(e=>v(e)&&e<t),K=t=>y(e=>v(e)&&e>t),A=t=>y(e=>v(e)&&e<=t),x=t=>y(e=>v(e)&&e>=t),P=()=>y(t=>v(t)&&Number.isInteger(t)),T=()=>y(t=>v(t)&&Number.isFinite(t)),k=()=>y(t=>v(t)&&t>0),_=()=>y(t=>v(t)&&t<0),W=t=>Object.assign(u(t),{between:(e,n)=>W(m(t,E(e,n))),lt:e=>W(m(t,I(e))),gt:e=>W(m(t,K(e))),lte:e=>W(m(t,A(e))),gte:e=>W(m(t,x(e))),int:()=>W(m(t,P())),finite:()=>W(m(t,T())),positive:()=>W(m(t,k())),negative:()=>W(m(t,_()))}),N=W(y(v)),$=(t,e)=>y(n=>w(n)&&t<=n&&e>=n),z=t=>y(e=>w(e)&&e<t),L=t=>y(e=>w(e)&&e>t),M=t=>y(e=>w(e)&&e<=t),F=t=>y(e=>w(e)&&e>=t),J=()=>y(t=>w(t)&&t>0),U=()=>y(t=>w(t)&&t<0),V=t=>Object.assign(u(t),{between:(e,n)=>V(m(t,$(e,n))),lt:e=>V(m(t,z(e))),gt:e=>V(m(t,L(e))),lte:e=>V(m(t,M(e))),gte:e=>V(m(t,F(e))),positive:()=>V(m(t,J())),negative:()=>V(m(t,U()))}),q=V(y(w)),C=u(y(function(t){return"boolean"==typeof t})),D=u(y(function(t){return"symbol"==typeof t})),G=u(y(function(t){return null==t}));var H={__proto__:null,matcher:t,optional:l,array:function(...e){return h({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return o(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>s(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:o(e[0])})})},set:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:g(t,t=>s(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:o(e[0])})})},map:function(...e){return u({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\`P.map\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[o,c]=e;return{matched:f(t,(t,e)=>{const n=s(o,e,r),i=s(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...o(e[0]),...o(e[1])]})})},intersection:m,union:p,not:function(e){return u({[t]:()=>({match:t=>({matched:!s(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:y,select:d,any:S,_:O,string:B,between:E,lt:I,gt:K,lte:A,gte:x,int:P,finite:T,positive:k,negative:_,number:N,betweenBigInt:$,ltBigInt:z,gtBigInt:L,lteBigInt:M,gteBigInt:F,positiveBigInt:J,negativeBigInt:U,bigint:q,boolean:C,symbol:D,nullish:G,instanceOf:function(t){return u(y(function(t){return e=>e instanceof t}(t)))},shape:function(t){return u(y(a(t)))}};const Q={matched:!1,value:void 0};function R(t){return new X(t,Q)}class X{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&"function"==typeof t[1]?(r.push(t[0]),i=t[1]):t.length>2&&r.push(...t.slice(1,t.length-1));let o=!1,c={};const a=(t,e)=>{o=!0,c[t]=e},u=!r.some(t=>s(t,this.input,a))||i&&!Boolean(i(this.input))?Q:{matched:!0,value:e(o?n in c?c[n]:c:this.input,this.input)};return new X(this.input,u)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new X(this.input,n?{matched:!0,value:e(this.input,this.input)}:Q)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(){return this.run()}run(){if(this.state.matched)return this.state.value;let t;try{t=JSON.stringify(this.input)}catch(e){t=this.input}throw new Error(`Pattern matching error: no pattern matches value ${t}`)}returnType(){return this}}export{H as P,H as Pattern,a as isMatching,R as match}; | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n||self).tsPattern={})}(this,function(n){function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}function e(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(r)return(r=r.call(n)).next.bind(r);if(Array.isArray(n)||(r=function(n,e){if(n){if("string"==typeof n)return t(n,e);var r=Object.prototype.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(n,e):void 0}}(n))||e&&n&&"number"==typeof n.length){r&&(n=r);var u=0;return function(){return u>=n.length?{done:!0}:{done:!1,value:n[u++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r=Symbol("@ts-pattern/matcher"),u=Symbol("@ts-pattern/isVariadic"),i="@ts-pattern/anonymous-select-key",o=function(n){return Boolean(n&&"object"==typeof n)},c=function(n){return n&&!!n[r]},f=function n(t,i,f){if(c(t)){var a=t[r]().match(i),s=a.matched,l=a.selections;return s&&l&&Object.keys(l).forEach(function(n){return f(n,l[n])}),s}if(o(t)){if(!o(i))return!1;if(Array.isArray(t)){if(!Array.isArray(i))return!1;for(var h,g=[],v=[],m=[],p=e(t.keys());!(h=p()).done;){var d=t[h.value];c(d)&&d[u]?m.push(d):m.length?v.push(d):g.push(d)}if(m.length){if(m.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(i.length<g.length+v.length)return!1;var y=i.slice(0,g.length),b=0===v.length?[]:i.slice(-v.length),w=i.slice(g.length,0===v.length?Infinity:-v.length);return g.every(function(t,e){return n(t,y[e],f)})&&v.every(function(t,e){return n(t,b[e],f)})&&(0===m.length||n(m[0],w,f))}return t.length===i.length&&t.every(function(t,e){return n(t,i[e],f)})}return Object.keys(t).every(function(e){var u,o=t[e];return(e in i||c(u=o)&&"optional"===u[r]().matcherType)&&n(o,i[e],f)})}return Object.is(i,t)},a=function n(t){var e,u,i;return o(t)?c(t)?null!=(e=null==(u=(i=t[r]()).getSelectionKeys)?void 0:u.call(i))?e:[]:Array.isArray(t)?s(t,n):s(Object.values(t),n):[]},s=function(n,t){return n.reduce(function(n,e){return n.concat(t(e))},[])};function l(){var n=[].slice.call(arguments);if(1===n.length){var t=n[0];return function(n){return f(t,n,function(){})}}if(2===n.length)return f(n[0],n[1],function(){});throw new Error("isMatching wasn't given the right number of arguments: expected 1 or 2, received "+n.length+".")}function h(n){return Object.assign(n,{optional:function(){return v(n)},and:function(t){return d(n,t)},or:function(t){return y(n,t)},select:function(t){return void 0===t?w(n):w(t,n)}})}function g(n){return Object.assign(function(n){var t;return Object.assign(n,((t={})[Symbol.iterator]=function(){/*#__PURE__*/return regeneratorRuntime.mark(function t(){var e;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object.assign(n,((e={})[u]=!0,e));case 2:case"end":return t.stop()}},t)})()},t))}(n),{optional:function(){return g(v(n))},select:function(t){return g(void 0===t?w(n):w(t,n))}})}function v(n){var t;return h(((t={})[r]=function(){return{match:function(t){var e={},r=function(n,t){e[n]=t};return void 0===t?(a(n).forEach(function(n){return r(n,void 0)}),{matched:!0,selections:e}):{matched:f(n,t,r),selections:e}},getSelectionKeys:function(){return a(n)},matcherType:"optional"}},t))}var m=function(n,t){for(var r,u=e(n);!(r=u()).done;)if(!t(r.value))return!1;return!0},p=function(n,t){for(var r,u=e(n.entries());!(r=u()).done;){var i=r.value;if(!t(i[1],i[0]))return!1}return!0};function d(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return{matched:t.every(function(t){return f(t,n,r)}),selections:e}},getSelectionKeys:function(){return s(t,a)},matcherType:"and"}},n))}function y(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return s(t,a).forEach(function(n){return r(n,void 0)}),{matched:t.some(function(t){return f(t,n,r)}),selections:e}},getSelectionKeys:function(){return s(t,a)},matcherType:"or"}},n))}function b(n){var t;return(t={})[r]=function(){return{match:function(t){return{matched:Boolean(n(t))}}}},t}function w(){var n,t=[].slice.call(arguments),e="string"==typeof t[0]?t[0]:void 0,u=2===t.length?t[1]:"string"==typeof t[0]?void 0:t[0];return h(((n={})[r]=function(){return{match:function(n){var t,r=((t={})[null!=e?e:i]=n,t);return{matched:void 0===u||f(u,n,function(n,t){r[n]=t}),selections:r}},getSelectionKeys:function(){return[null!=e?e:i].concat(void 0===u?[]:a(u))}}},n))}function S(n){return"number"==typeof n}function j(n){return"string"==typeof n}function O(n){return"bigint"==typeof n}var A=h(b(function(n){return!0})),B=A,I=function n(t){return Object.assign(h(t),{startsWith:function(e){return n(d(t,(r=e,b(function(n){return j(n)&&n.startsWith(r)}))));var r},endsWith:function(e){return n(d(t,(r=e,b(function(n){return j(n)&&n.endsWith(r)}))));var r},minLength:function(e){return n(d(t,function(n){return b(function(t){return j(t)&&t.length>=n})}(e)))},maxLength:function(e){return n(d(t,function(n){return b(function(t){return j(t)&&t.length<=n})}(e)))},includes:function(e){return n(d(t,(r=e,b(function(n){return j(n)&&n.includes(r)}))));var r},regex:function(e){return n(d(t,(r=e,b(function(n){return j(n)&&Boolean(n.match(r))}))));var r}})}(b(j)),x=function(n,t){return b(function(e){return S(e)&&n<=e&&t>=e})},E=function(n){return b(function(t){return S(t)&&t<n})},K=function(n){return b(function(t){return S(t)&&t>n})},T=function(n){return b(function(t){return S(t)&&t<=n})},k=function(n){return b(function(t){return S(t)&&t>=n})},P=function(){return b(function(n){return S(n)&&Number.isInteger(n)})},_=function(){return b(function(n){return S(n)&&Number.isFinite(n)})},M=function(){return b(function(n){return S(n)&&n>0})},W=function(){return b(function(n){return S(n)&&n<0})},N=function n(t){return Object.assign(h(t),{between:function(e,r){return n(d(t,x(e,r)))},lt:function(e){return n(d(t,E(e)))},gt:function(e){return n(d(t,K(e)))},lte:function(e){return n(d(t,T(e)))},gte:function(e){return n(d(t,k(e)))},int:function(){return n(d(t,P()))},finite:function(){return n(d(t,_()))},positive:function(){return n(d(t,M()))},negative:function(){return n(d(t,W()))}})}(b(S)),z=function(n,t){return b(function(e){return O(e)&&n<=e&&t>=e})},L=function(n){return b(function(t){return O(t)&&t<n})},R=function(n){return b(function(t){return O(t)&&t>n})},U=function(n){return b(function(t){return O(t)&&t<=n})},C=function(n){return b(function(t){return O(t)&&t>=n})},F=function(){return b(function(n){return O(n)&&n>0})},J=function(){return b(function(n){return O(n)&&n<0})},V=function n(t){return Object.assign(h(t),{between:function(e,r){return n(d(t,z(e,r)))},lt:function(e){return n(d(t,L(e)))},gt:function(e){return n(d(t,R(e)))},lte:function(e){return n(d(t,U(e)))},gte:function(e){return n(d(t,C(e)))},positive:function(){return n(d(t,F()))},negative:function(){return n(d(t,J()))}})}(b(O)),$=h(b(function(n){return"boolean"==typeof n})),q=h(b(function(n){return"symbol"==typeof n})),D=h(b(function(n){return null==n})),G={__proto__:null,matcher:r,optional:v,array:function(){var n,t=[].slice.call(arguments);return g(((n={})[r]=function(){return{match:function(n){if(!Array.isArray(n))return{matched:!1};if(0===t.length)return{matched:!0};var e=t[0],r={};if(0===n.length)return a(e).forEach(function(n){r[n]=[]}),{matched:!0,selections:r};var u=function(n,t){r[n]=(r[n]||[]).concat([t])};return{matched:n.every(function(n){return f(e,n,u)}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:a(t[0])}}},n))},set:function(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){if(!(n instanceof Set))return{matched:!1};var e={};if(0===n.size)return{matched:!0,selections:e};if(0===t.length)return{matched:!0};var r=function(n,t){e[n]=(e[n]||[]).concat([t])},u=t[0];return{matched:m(n,function(n){return f(u,n,r)}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:a(t[0])}}},n))},map:function(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){if(!(n instanceof Map))return{matched:!1};var e={};if(0===n.size)return{matched:!0,selections:e};var r,u=function(n,t){e[n]=(e[n]||[]).concat([t])};if(0===t.length)return{matched:!0};if(1===t.length)throw new Error("`P.map` wasn't given enough arguments. Expected (key, value), received "+(null==(r=t[0])?void 0:r.toString()));var i=t[0],o=t[1];return{matched:p(n,function(n,t){var e=f(i,t,u),r=f(o,n,u);return e&&r}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(a(t[0]),a(t[1]))}}},n))},intersection:d,union:y,not:function(n){var t;return h(((t={})[r]=function(){return{match:function(t){return{matched:!f(n,t,function(){})}},getSelectionKeys:function(){return[]},matcherType:"not"}},t))},when:b,select:w,any:A,_:B,string:I,between:x,lt:E,gt:K,lte:T,gte:k,int:P,finite:_,positive:M,negative:W,number:N,betweenBigInt:z,ltBigInt:L,gtBigInt:R,lteBigInt:U,gteBigInt:C,positiveBigInt:F,negativeBigInt:J,bigint:V,boolean:$,symbol:q,nullish:D,instanceOf:function(n){return h(b(function(n){return function(t){return t instanceof n}}(n)))},shape:function(n){return h(b(l(n)))}},H={matched:!1,value:void 0},Q=/*#__PURE__*/function(){function n(n,t){void 0===t&&(t=H),this.input=void 0,this.state=void 0,this.input=n,this.state=t}var t=n.prototype;return t.with=function(){var t=this,e=[].slice.call(arguments);if(this.state.matched)return this;var r=e[e.length-1],u=[e[0]],o=[];3===e.length&&"function"==typeof e[1]?(u.push(e[0]),o.push(e[1])):e.length>2&&u.push.apply(u,e.slice(1,e.length-1));var c={},a=Boolean(u.some(function(n){return f(n,t.input,function(n,t){c[n]=t})})&&o.every(function(n){return n(t.input)}))?{matched:!0,value:r(Object.keys(c).length?i in c?c[i]:c:this.input,this.input)}:H;return new n(this.input,a)},t.when=function(t,e){if(this.state.matched)return this;var r=Boolean(t(this.input));return new n(this.input,r?{matched:!0,value:e(this.input,this.input)}:H)},t.otherwise=function(n){return this.state.matched?this.state.value:n(this.input)},t.exhaustive=function(){return this.run()},t.run=function(){if(this.state.matched)return this.state.value;var n;try{n=JSON.stringify(this.input)}catch(t){n=this.input}throw new Error("Pattern matching error: no pattern matches value "+n)},t.returnType=function(){return this},n}();n.P=G,n.Pattern=G,n.isMatching=l,n.match=function(n){return new Q(n)}}); | ||
!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n||self).tsPattern={})}(this,function(n){function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var e=0,r=new Array(t);e<t;e++)r[e]=n[e];return r}function e(n,e){var r="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(r)return(r=r.call(n)).next.bind(r);if(Array.isArray(n)||(r=function(n,e){if(n){if("string"==typeof n)return t(n,e);var r=Object.prototype.toString.call(n).slice(8,-1);return"Object"===r&&n.constructor&&(r=n.constructor.name),"Map"===r||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(n,e):void 0}}(n))||e&&n&&"number"==typeof n.length){r&&(n=r);var u=0;return function(){return u>=n.length?{done:!0}:{done:!1,value:n[u++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r=Symbol.for("@ts-pattern/matcher"),u=Symbol.for("@ts-pattern/isVariadic"),i="@ts-pattern/anonymous-select-key",o=function(n){return Boolean(n&&"object"==typeof n)},c=function(n){return n&&!!n[r]},f=function n(t,i,f){if(c(t)){var a=t[r]().match(i),s=a.matched,l=a.selections;return s&&l&&Object.keys(l).forEach(function(n){return f(n,l[n])}),s}if(o(t)){if(!o(i))return!1;if(Array.isArray(t)){if(!Array.isArray(i))return!1;for(var h,g=[],v=[],m=[],d=e(t.keys());!(h=d()).done;){var p=t[h.value];c(p)&&p[u]?m.push(p):m.length?v.push(p):g.push(p)}if(m.length){if(m.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(i.length<g.length+v.length)return!1;var y=i.slice(0,g.length),b=0===v.length?[]:i.slice(-v.length),w=i.slice(g.length,0===v.length?Infinity:-v.length);return g.every(function(t,e){return n(t,y[e],f)})&&v.every(function(t,e){return n(t,b[e],f)})&&(0===m.length||n(m[0],w,f))}return t.length===i.length&&t.every(function(t,e){return n(t,i[e],f)})}return Object.keys(t).every(function(e){var u,o=t[e];return(e in i||c(u=o)&&"optional"===u[r]().matcherType)&&n(o,i[e],f)})}return Object.is(i,t)},a=function n(t){var e,u,i;return o(t)?c(t)?null!=(e=null==(u=(i=t[r]()).getSelectionKeys)?void 0:u.call(i))?e:[]:Array.isArray(t)?s(t,n):s(Object.values(t),n):[]},s=function(n,t){return n.reduce(function(n,e){return n.concat(t(e))},[])};function l(){var n=[].slice.call(arguments);if(1===n.length){var t=n[0];return function(n){return f(t,n,function(){})}}if(2===n.length)return f(n[0],n[1],function(){});throw new Error("isMatching wasn't given the right number of arguments: expected 1 or 2, received "+n.length+".")}function h(n){return Object.assign(n,{optional:function(){return v(n)},and:function(t){return p(n,t)},or:function(t){return y(n,t)},select:function(t){return void 0===t?w(n):w(t,n)}})}function g(n){return Object.assign(function(n){var t;return Object.assign(n,((t={})[Symbol.iterator]=function(){/*#__PURE__*/return regeneratorRuntime.mark(function t(){var e;return regeneratorRuntime.wrap(function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Object.assign(n,((e={})[u]=!0,e));case 2:case"end":return t.stop()}},t)})()},t))}(n),{optional:function(){return g(v(n))},select:function(t){return g(void 0===t?w(n):w(t,n))}})}function v(n){var t;return h(((t={})[r]=function(){return{match:function(t){var e={},r=function(n,t){e[n]=t};return void 0===t?(a(n).forEach(function(n){return r(n,void 0)}),{matched:!0,selections:e}):{matched:f(n,t,r),selections:e}},getSelectionKeys:function(){return a(n)},matcherType:"optional"}},t))}var m=function(n,t){for(var r,u=e(n);!(r=u()).done;)if(!t(r.value))return!1;return!0},d=function(n,t){for(var r,u=e(n.entries());!(r=u()).done;){var i=r.value;if(!t(i[1],i[0]))return!1}return!0};function p(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return{matched:t.every(function(t){return f(t,n,r)}),selections:e}},getSelectionKeys:function(){return s(t,a)},matcherType:"and"}},n))}function y(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return s(t,a).forEach(function(n){return r(n,void 0)}),{matched:t.some(function(t){return f(t,n,r)}),selections:e}},getSelectionKeys:function(){return s(t,a)},matcherType:"or"}},n))}function b(n){var t;return(t={})[r]=function(){return{match:function(t){return{matched:Boolean(n(t))}}}},t}function w(){var n,t=[].slice.call(arguments),e="string"==typeof t[0]?t[0]:void 0,u=2===t.length?t[1]:"string"==typeof t[0]?void 0:t[0];return h(((n={})[r]=function(){return{match:function(n){var t,r=((t={})[null!=e?e:i]=n,t);return{matched:void 0===u||f(u,n,function(n,t){r[n]=t}),selections:r}},getSelectionKeys:function(){return[null!=e?e:i].concat(void 0===u?[]:a(u))}}},n))}function S(n){return"number"==typeof n}function j(n){return"string"==typeof n}function O(n){return"bigint"==typeof n}var A=h(b(function(n){return!0})),B=A,I=function n(t){return Object.assign(h(t),{startsWith:function(e){return n(p(t,(r=e,b(function(n){return j(n)&&n.startsWith(r)}))));var r},endsWith:function(e){return n(p(t,(r=e,b(function(n){return j(n)&&n.endsWith(r)}))));var r},minLength:function(e){return n(p(t,function(n){return b(function(t){return j(t)&&t.length>=n})}(e)))},maxLength:function(e){return n(p(t,function(n){return b(function(t){return j(t)&&t.length<=n})}(e)))},includes:function(e){return n(p(t,(r=e,b(function(n){return j(n)&&n.includes(r)}))));var r},regex:function(e){return n(p(t,(r=e,b(function(n){return j(n)&&Boolean(n.match(r))}))));var r}})}(b(j)),x=function(n,t){return b(function(e){return S(e)&&n<=e&&t>=e})},E=function(n){return b(function(t){return S(t)&&t<n})},K=function(n){return b(function(t){return S(t)&&t>n})},T=function(n){return b(function(t){return S(t)&&t<=n})},P=function(n){return b(function(t){return S(t)&&t>=n})},k=function(){return b(function(n){return S(n)&&Number.isInteger(n)})},_=function(){return b(function(n){return S(n)&&Number.isFinite(n)})},M=function(){return b(function(n){return S(n)&&n>0})},W=function(){return b(function(n){return S(n)&&n<0})},N=function n(t){return Object.assign(h(t),{between:function(e,r){return n(p(t,x(e,r)))},lt:function(e){return n(p(t,E(e)))},gt:function(e){return n(p(t,K(e)))},lte:function(e){return n(p(t,T(e)))},gte:function(e){return n(p(t,P(e)))},int:function(){return n(p(t,k()))},finite:function(){return n(p(t,_()))},positive:function(){return n(p(t,M()))},negative:function(){return n(p(t,W()))}})}(b(S)),z=function(n,t){return b(function(e){return O(e)&&n<=e&&t>=e})},L=function(n){return b(function(t){return O(t)&&t<n})},R=function(n){return b(function(t){return O(t)&&t>n})},U=function(n){return b(function(t){return O(t)&&t<=n})},C=function(n){return b(function(t){return O(t)&&t>=n})},F=function(){return b(function(n){return O(n)&&n>0})},J=function(){return b(function(n){return O(n)&&n<0})},V=function n(t){return Object.assign(h(t),{between:function(e,r){return n(p(t,z(e,r)))},lt:function(e){return n(p(t,L(e)))},gt:function(e){return n(p(t,R(e)))},lte:function(e){return n(p(t,U(e)))},gte:function(e){return n(p(t,C(e)))},positive:function(){return n(p(t,F()))},negative:function(){return n(p(t,J()))}})}(b(O)),$=h(b(function(n){return"boolean"==typeof n})),q=h(b(function(n){return"symbol"==typeof n})),D=h(b(function(n){return null==n})),G={__proto__:null,matcher:r,optional:v,array:function(){var n,t=[].slice.call(arguments);return g(((n={})[r]=function(){return{match:function(n){if(!Array.isArray(n))return{matched:!1};if(0===t.length)return{matched:!0};var e=t[0],r={};if(0===n.length)return a(e).forEach(function(n){r[n]=[]}),{matched:!0,selections:r};var u=function(n,t){r[n]=(r[n]||[]).concat([t])};return{matched:n.every(function(n){return f(e,n,u)}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:a(t[0])}}},n))},set:function(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){if(!(n instanceof Set))return{matched:!1};var e={};if(0===n.size)return{matched:!0,selections:e};if(0===t.length)return{matched:!0};var r=function(n,t){e[n]=(e[n]||[]).concat([t])},u=t[0];return{matched:m(n,function(n){return f(u,n,r)}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:a(t[0])}}},n))},map:function(){var n,t=[].slice.call(arguments);return h(((n={})[r]=function(){return{match:function(n){if(!(n instanceof Map))return{matched:!1};var e={};if(0===n.size)return{matched:!0,selections:e};var r,u=function(n,t){e[n]=(e[n]||[]).concat([t])};if(0===t.length)return{matched:!0};if(1===t.length)throw new Error("`P.map` wasn't given enough arguments. Expected (key, value), received "+(null==(r=t[0])?void 0:r.toString()));var i=t[0],o=t[1];return{matched:d(n,function(n,t){var e=f(i,t,u),r=f(o,n,u);return e&&r}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(a(t[0]),a(t[1]))}}},n))},intersection:p,union:y,not:function(n){var t;return h(((t={})[r]=function(){return{match:function(t){return{matched:!f(n,t,function(){})}},getSelectionKeys:function(){return[]},matcherType:"not"}},t))},when:b,select:w,any:A,_:B,string:I,between:x,lt:E,gt:K,lte:T,gte:P,int:k,finite:_,positive:M,negative:W,number:N,betweenBigInt:z,ltBigInt:L,gtBigInt:R,lteBigInt:U,gteBigInt:C,positiveBigInt:F,negativeBigInt:J,bigint:V,boolean:$,symbol:q,nullish:D,instanceOf:function(n){return h(b(function(n){return function(t){return t instanceof n}}(n)))},shape:function(n){return h(b(l(n)))}},H={matched:!1,value:void 0},Q=/*#__PURE__*/function(){function n(n,t){this.input=void 0,this.state=void 0,this.input=n,this.state=t}var t=n.prototype;return t.with=function(){var t=this,e=[].slice.call(arguments);if(this.state.matched)return this;var r=e[e.length-1],u=[e[0]],o=void 0;3===e.length&&"function"==typeof e[1]?(u.push(e[0]),o=e[1]):e.length>2&&u.push.apply(u,e.slice(1,e.length-1));var c=!1,a={},s=function(n,t){c=!0,a[n]=t},l=!u.some(function(n){return f(n,t.input,s)})||o&&!Boolean(o(this.input))?H:{matched:!0,value:r(c?i in a?a[i]:a:this.input,this.input)};return new n(this.input,l)},t.when=function(t,e){if(this.state.matched)return this;var r=Boolean(t(this.input));return new n(this.input,r?{matched:!0,value:e(this.input,this.input)}:H)},t.otherwise=function(n){return this.state.matched?this.state.value:n(this.input)},t.exhaustive=function(){return this.run()},t.run=function(){if(this.state.matched)return this.state.value;var n;try{n=JSON.stringify(this.input)}catch(t){n=this.input}throw new Error("Pattern matching error: no pattern matches value "+n)},t.returnType=function(){return this},n}();n.P=G,n.Pattern=G,n.isMatching=l,n.match=function(n){return new Q(n,H)}}); | ||
//# sourceMappingURL=index.umd.js.map |
@@ -14,3 +14,3 @@ import { Match } from './types/Match.js'; | ||
* return match(input) | ||
* .with("A", () => "It's a A!") | ||
* .with("A", () => "It's an A!") | ||
* .with("B", () => "It's a B!") | ||
@@ -17,0 +17,0 @@ * .exhaustive(); |
import type * as symbols from '../internals/symbols.js'; | ||
import type { AnyMatcher, Matcher, Pattern } from './Pattern.js'; | ||
import type { Equal, Primitives, ValueOf, UnionToTuple } from './helpers.js'; | ||
import type { Equal, Primitives, ValueOf, MergeUnion, IsUnion } from './helpers.js'; | ||
type SelectionsRecord = Record<string, [unknown, unknown[]]>; | ||
@@ -20,15 +20,15 @@ export type None = { | ||
type ReduceFindSelectionUnion<i, ps extends readonly any[], output = never> = ps extends readonly [infer head, ...infer tail] ? ReduceFindSelectionUnion<i, tail, output | FindSelectionUnion<i, head>> : output; | ||
type FindSelectionUnionInArray<i, p, path extends any[] = [], output = never> = i extends readonly (infer ii)[] ? p extends readonly [] ? output : p extends readonly [infer p1, ...infer pRest] ? i extends readonly [infer i1, ...infer iRest] ? FindSelectionUnionInArray<iRest, pRest, [ | ||
type FindSelectionUnionInArray<i, p, path extends any[] = [], output = never> = i extends readonly (infer iItem)[] ? p extends readonly [] ? output : p extends readonly [infer p1, ...infer pRest] ? i extends readonly [infer i1, ...infer iRest] ? FindSelectionUnionInArray<iRest, pRest, [ | ||
...path, | ||
p['length'] | ||
], output | FindSelectionUnion<i1, p1, [...path, p['length']]>> : FindSelectionUnionInArray<ii[], pRest, [ | ||
], output | FindSelectionUnion<i1, p1, [...path, p['length']]>> : FindSelectionUnionInArray<iItem[], pRest, [ | ||
...path, | ||
p['length'] | ||
], output | FindSelectionUnion<ii, p1, [...path, p['length']]>> : p extends readonly [...infer pInit, infer p1] ? i extends readonly [...infer iInit, infer i1] ? FindSelectionUnionInArray<iInit, pInit, [ | ||
], output | FindSelectionUnion<iItem, p1, [...path, p['length']]>> : p extends readonly [...infer pInit, infer p1] ? i extends readonly [...infer iInit, infer i1] ? FindSelectionUnionInArray<iInit, pInit, [ | ||
...path, | ||
p['length'] | ||
], output | FindSelectionUnion<i1, p1, [...path, p['length']]>> : FindSelectionUnionInArray<ii[], pInit, [ | ||
], output | FindSelectionUnion<i1, p1, [...path, p['length']]>> : FindSelectionUnionInArray<iItem[], pInit, [ | ||
...path, | ||
p['length'] | ||
], output | FindSelectionUnion<ii, p1, [...path, p['length']]>> : p extends readonly [...(readonly (infer pRest & AnyMatcher)[])] ? output | FindSelectionUnion<i, pRest, [...path, p['length']]> : output | FindSelectionUnion<ii, ValueOf<p>, [ | ||
], output | FindSelectionUnion<iItem, p1, [...path, p['length']]>> : p extends readonly [...(readonly (infer pRest & AnyMatcher)[])] ? output | FindSelectionUnion<i, pRest, [...path, p['length']]> : output | FindSelectionUnion<iItem, ValueOf<p>, [ | ||
...path, | ||
@@ -41,3 +41,3 @@ Extract<p, readonly any[]>['length'] | ||
} | FindSelectionUnion<i, pattern, path> : never; | ||
array: i extends readonly (infer ii)[] ? MapList<FindSelectionUnion<ii, pattern>> : never; | ||
array: i extends readonly (infer iItem)[] ? MapList<FindSelectionUnion<iItem, pattern>> : never; | ||
map: never; | ||
@@ -62,17 +62,7 @@ set: never; | ||
} & a; | ||
export type SelectionToArgs<selections extends SelectionsRecord> = symbols.anonymousSelectKey extends keyof selections ? [ | ||
selections[symbols.anonymousSelectKey][1] | ||
] extends [never] ? SeveralAnonymousSelectError : keyof selections extends symbols.anonymousSelectKey ? selections[symbols.anonymousSelectKey][0] : MixedNamedAndAnonymousSelectError : { | ||
export type SelectionToArgs<selections extends SelectionsRecord> = symbols.anonymousSelectKey extends keyof selections ? IsUnion<selections[symbols.anonymousSelectKey][1]> extends true ? SeveralAnonymousSelectError : keyof selections extends symbols.anonymousSelectKey ? selections[symbols.anonymousSelectKey][0] : MixedNamedAndAnonymousSelectError : { | ||
[k in keyof selections]: selections[k][0]; | ||
}; | ||
type ConcatSelections<a extends SelectionsRecord, b extends SelectionsRecord> = { | ||
[k in keyof a & keyof b]: [a[k][0] | b[k][0], a[k][1] & b[k][1]]; | ||
} & { | ||
[k in Exclude<keyof a, keyof b>]: a[k]; | ||
} & { | ||
[k in Exclude<keyof b, keyof a>]: b[k]; | ||
}; | ||
type ReduceToRecord<selections extends any[], output extends SelectionsRecord = {}> = selections extends [infer sel, ...infer rest] ? ReduceToRecord<rest, ConcatSelections<Extract<sel, SelectionsRecord>, output>> : output; | ||
export type Selections<i, p> = FindSelectionUnion<i, p> extends infer u ? [u] extends [never] ? i : SelectionToArgs<ReduceToRecord<UnionToTuple<u>>> : i; | ||
export type Selections<i, p> = FindSelectionUnion<i, p> extends infer u ? [u] extends [never] ? i : SelectionToArgs<Extract<MergeUnion<u>, SelectionsRecord>> : i; | ||
export type FindSelected<i, p> = Equal<p, Pattern<i>> extends true ? i : Selections<i, p>; | ||
export {}; |
@@ -46,3 +46,2 @@ export type ValueOf<a> = a extends readonly any[] ? a[number] : a[keyof a]; | ||
export type WithDefault<a, def> = [a] extends [never] ? def : a; | ||
export type ExtractWithDefault<a, b, def> = a extends b ? a : def; | ||
export type IsLiteral<a> = [a] extends [null | undefined] ? true : [a] extends [string] ? string extends a ? false : true : [a] extends [number] ? number extends a ? false : true : [a] extends [boolean] ? boolean extends a ? false : true : [a] extends [symbol] ? symbol extends a ? false : true : [a] extends [bigint] ? bigint extends a ? false : true : false; | ||
@@ -64,3 +63,3 @@ export type Primitives = number | boolean | string | undefined | null | symbol | bigint; | ||
export type MergeUnion<a> = { | ||
readonly [k in AllKeys<a>]: a extends any ? k extends keyof a ? a[k] : never : never; | ||
[k in AllKeys<a>]: a extends any ? k extends keyof a ? a[k] : never : never; | ||
} | never; | ||
@@ -67,0 +66,0 @@ export type IsFixedSizeTuple<a extends readonly any[]> = IsLiteral<Length<a>>; |
import { DeepExclude } from './DeepExclude.js'; | ||
import { IsPlainObject, Primitives, IsLiteral, ValueOf, Compute, Equal, Extends, Not, All, NonLiteralPrimitive, MaybeAddReadonly, IsReadonlyArray, MapKey, MapValue, SetValue, ExtractPlainObject, GetKey, Call, Fn, ReadonlyArrayValue, ExtractWithDefault, WithDefault } from './helpers.js'; | ||
import { IsPlainObject, Primitives, IsLiteral, ValueOf, Compute, Equal, Extends, Not, All, NonLiteralPrimitive, MaybeAddReadonly, IsReadonlyArray, MapKey, MapValue, SetValue, ExtractPlainObject, GetKey, Call, Fn, ReadonlyArrayValue, WithDefault } from './helpers.js'; | ||
import type { Matcher, Pattern, Override, AnyMatcher } from './Pattern.js'; | ||
@@ -43,3 +43,3 @@ type OptionalKeys<p> = ValueOf<{ | ||
custom: Override<narrowedOrFn extends Fn ? Call<narrowedOrFn, input> : narrowedOrFn>; | ||
}[matcherType] : p extends Primitives ? p : p extends readonly any[] ? InvertArrayPattern<p, ExtractWithDefault<input, readonly any[], unknown[]>> : IsPlainObject<p> extends true ? OptionalKeys<p> extends infer optKeys ? [optKeys] extends [never] ? { | ||
}[matcherType] : p extends Primitives ? p : p extends readonly any[] ? InvertArrayPattern<p, WithDefault<Extract<input, readonly any[]>, unknown[]>> : IsPlainObject<p> extends true ? OptionalKeys<p> extends infer optKeys ? [optKeys] extends [never] ? { | ||
[k in Exclude<keyof p, optKeys>]: InvertPatternInternal<p[k], WithDefault<GetKey<ExtractPlainObject<input>, k>, unknown>>; | ||
@@ -46,0 +46,0 @@ } : Compute<{ |
@@ -25,12 +25,3 @@ import type * as symbols from '../internals/symbols.js'; | ||
**/ | ||
with<const p extends Pattern<i>, c, value extends MatchedValue<i, InvertPattern<p, i>>, excluded = InvertPatternForExclude<p, value>>( | ||
/** | ||
* HACK: Using `IsNever<p>` here is a hack to | ||
* make sure the type checker forwards | ||
* the input type parameter to pattern | ||
* creator functions like `P.when`, `P.not` | ||
* `P.union` when they are passed to `.with` | ||
* directly. | ||
*/ | ||
pattern: IsNever<p> extends true ? Pattern<i> : p, handler: (selections: FindSelected<value, p>, value: value) => PickReturnValue<o, c>): Match<Exclude<i, excluded>, o, [ | ||
with<const p extends Pattern<i>, c, value extends MatchedValue<i, InvertPattern<p, i>>, excluded = InvertPatternForExclude<p, value>>(pattern: IsNever<p> extends true ? Pattern<i> : p, handler: (selections: FindSelected<value, p>, value: value) => PickReturnValue<o, c>): Match<Exclude<i, excluded>, o, [ | ||
...handledCases, | ||
@@ -95,3 +86,3 @@ excluded | ||
/** | ||
* `.exhaustive()` checks that all cases are handled, and return the result value. | ||
* `.exhaustive()` checks that all cases are handled, and returns the result value. | ||
* | ||
@@ -98,0 +89,0 @@ * If you get a `NonExhaustiveError`, it means that you aren't handling |
@@ -62,3 +62,3 @@ import type * as symbols from '../internals/symbols.js'; | ||
type KnownPattern<a> = KnownPatternInternal<a>; | ||
type KnownPatternInternal<a, objs = Exclude<a, Primitives | Map<any, any> | Set<any> | readonly any[]>, arrays = Extract<a, readonly any[]>, primitives = Exclude<a, object>> = primitives | PatternMatcher<a> | ([objs] extends [never] ? never : ObjectPattern<MergeUnion<objs>>) | ([arrays] extends [never] ? never : ArrayPattern<arrays>); | ||
type KnownPatternInternal<a, objs = Exclude<a, Primitives | Map<any, any> | Set<any> | readonly any[]>, arrays = Extract<a, readonly any[]>, primitives = Exclude<a, object>> = primitives | PatternMatcher<a> | ([objs] extends [never] ? never : ObjectPattern<Readonly<MergeUnion<objs>>>) | ([arrays] extends [never] ? never : ArrayPattern<arrays>); | ||
type ObjectPattern<a> = { | ||
@@ -65,0 +65,0 @@ readonly [k in keyof a]?: Pattern<a[k]>; |
{ | ||
"name": "ts-pattern", | ||
"version": "5.0.1", | ||
"version": "5.0.2", | ||
"description": " The exhaustive Pattern Matching library for TypeScript.", | ||
@@ -5,0 +5,0 @@ "type": "module", |
@@ -50,3 +50,3 @@ <h1 align="center">TS-Pattern</h1> | ||
- Pattern-match on **any data structure**: nested [Objects](#objects), [Arrays](#tuples-arrays), [Tuples](#tuples-arrays), [Sets](#sets), [Maps](#maps) and all primitive types. | ||
- Pattern-match on **any data structure**: nested [Objects](#objects), [Arrays](#tuples-arrays), [Tuples](#tuples-arrays), [Sets](#pset-patterns), [Maps](#pmap-patterns) and all primitive types. | ||
- **Typesafe**, with helpful [type inference](#type-inference). | ||
@@ -103,2 +103,3 @@ - **Exhaustiveness checking** support, enforcing that you are matching every possible case with [`.exhaustive()`](#exhaustive). | ||
- [`.when`](#when) | ||
- [`.returnType`](#returntype) | ||
- [`.exhaustive`](#exhaustive) | ||
@@ -113,4 +114,4 @@ - [`.otherwise`](#otherwise) | ||
- [Tuples (arrays)](#tuples-arrays) | ||
- [Sets](#sets) | ||
- [Maps](#maps) | ||
- [Sets](#pset-patterns) | ||
- [Maps](#pmap-patterns) | ||
- [`P.array` patterns](#Parray-patterns) | ||
@@ -549,2 +550,25 @@ - [`P.when` patterns](#Pwhen-patterns) | ||
### `.returnType` | ||
```ts | ||
match(...) | ||
.returnType<string>() | ||
.with(..., () => "has to be a string") | ||
.with(..., () => "Oops".length) | ||
// ~~~~~~~~~~~~~ ❌ `number` isn't a string! | ||
``` | ||
The `.returnType<SomeType>()` method allows you to control the return type of all of your branches of code. It accepts a single type parameter that will be used as the return type of your `match` expression. All code branches must return values assignable to this type. | ||
#### Signature | ||
```ts | ||
function returnType<TOutputOverride>(): Match<TInput, TOutputOverride>; | ||
``` | ||
#### Type arguments | ||
- `TOutputOverride` | ||
- The type that your `match` expression will return. All branches must return values assignable to it. | ||
### `.exhaustive` | ||
@@ -646,2 +670,3 @@ | ||
const isBlogPost = isMatching({ | ||
type: 'blogpost', | ||
title: P.string, | ||
@@ -652,3 +677,3 @@ description: P.string, | ||
if (isBlogPost(value)) { | ||
// value: { title: string, description: string } | ||
// value: { type: 'blogpost', title: string, description: string } | ||
} | ||
@@ -661,8 +686,9 @@ ``` | ||
const blogPostPattern = { | ||
type: 'blogpost', | ||
title: P.string, | ||
description: P.string, | ||
}; | ||
} as const; | ||
if (isMatching(blogPostPattern, value)) { | ||
// value: { title: string, description: string } | ||
// value: { type: 'blogpost', title: string, description: string } | ||
} | ||
@@ -708,3 +734,3 @@ ``` | ||
.with(Pattern.string, (str) => str) | ||
.with(Pattern.number, (num) => num.toFixed()) | ||
.with(Pattern.number, (num) => num.toFixed(2)) | ||
.with(Pattern.boolean, (bool) => `${bool}`) | ||
@@ -722,3 +748,3 @@ .otherwise(() => 'Unknown'); | ||
.with(P.string, (str) => str) | ||
.with(P.number, (num) => num.toFixed()) | ||
.with(P.number, (num) => num.toFixed(2)) | ||
.with(P.boolean, (bool) => `${bool}`) | ||
@@ -1332,3 +1358,3 @@ .otherwise(() => 'Unknown'); | ||
match(input) | ||
.with(P.string.minLength(5), () => '🎉') | ||
.with(P.string.maxLength(5), () => '🎉') | ||
.otherwise(() => 'too long'); | ||
@@ -1359,3 +1385,3 @@ | ||
match(input) | ||
.with(P.string.regex(/^[a-z]$/), () => 'single word') | ||
.with(P.string.regex(/^[a-z]+$/), () => 'single word') | ||
.otherwise(() => 'other strings'); | ||
@@ -1505,3 +1531,3 @@ | ||
}, | ||
}; | ||
} as const; | ||
@@ -1518,2 +1544,4 @@ type Post = P.infer<typeof postPattern>; | ||
Although not strictly necessary, using `as const` after the pattern definition ensures that TS-Pattern infers the most precise types possible. | ||
### `P.Pattern` | ||
@@ -1520,0 +1548,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1642
463725
1589