@cjser/ts-pattern 5.9.0-cjser.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1776 -0
- package/dist/errors.d.cts +8 -0
- package/dist/errors.d.ts +8 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/internals/helpers.d.cts +12 -0
- package/dist/internals/helpers.d.ts +12 -0
- package/dist/internals/symbols.d.cts +24 -0
- package/dist/internals/symbols.d.ts +24 -0
- package/dist/is-matching.d.cts +40 -0
- package/dist/is-matching.d.ts +40 -0
- package/dist/match.d.cts +19 -0
- package/dist/match.d.ts +19 -0
- package/dist/patterns.d.cts +345 -0
- package/dist/patterns.d.ts +345 -0
- package/dist/types/BuildMany.d.cts +22 -0
- package/dist/types/BuildMany.d.ts +22 -0
- package/dist/types/DeepExclude.d.cts +2 -0
- package/dist/types/DeepExclude.d.ts +2 -0
- package/dist/types/DistributeUnions.d.cts +111 -0
- package/dist/types/DistributeUnions.d.ts +111 -0
- package/dist/types/ExtractPreciseValue.d.cts +27 -0
- package/dist/types/ExtractPreciseValue.d.ts +27 -0
- package/dist/types/FindSelected.d.cts +78 -0
- package/dist/types/FindSelected.d.ts +78 -0
- package/dist/types/InvertPattern.d.cts +104 -0
- package/dist/types/InvertPattern.d.ts +104 -0
- package/dist/types/IsMatching.d.cts +13 -0
- package/dist/types/IsMatching.d.ts +13 -0
- package/dist/types/Match.d.cts +171 -0
- package/dist/types/Match.d.ts +171 -0
- package/dist/types/Pattern.d.cts +401 -0
- package/dist/types/Pattern.d.ts +401 -0
- package/dist/types/helpers.d.cts +80 -0
- package/dist/types/helpers.d.ts +80 -0
- package/dist/types/index.d.cts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist-cjser/index.cjs +319 -0
- package/package.json +135 -0
package/dist/errors.d.ts
ADDED
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function n(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function t(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,r){if(t){if("string"==typeof t)return n(t,r);var e={}.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?n(t,r):void 0}}(t))||r&&t&&"number"==typeof t.length){e&&(t=e);var u=0;return function(){return u>=t.length?{done:!0}:{done:!1,value:t[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.")}function r(n){return r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},r(n)}function e(){try{var n=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(n){}return(e=function(){return!!n})()}function u(n,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},u(n,t)}function i(n){var t="function"==typeof Map?new Map:void 0;return i=function(n){if(null===n||!function(n){try{return-1!==Function.toString.call(n).indexOf("[native code]")}catch(t){return"function"==typeof n}}(n))return n;if("function"!=typeof n)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(n))return t.get(n);t.set(n,i)}function i(){return function(n,t,r){if(e())return Reflect.construct.apply(null,arguments);var i=[null];i.push.apply(i,t);var o=new(n.bind.apply(n,i));return r&&u(o,r.prototype),o}(n,arguments,r(this).constructor)}return i.prototype=Object.create(n.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),u(i,n)},i(n)}var o=Symbol.for("@ts-pattern/matcher"),c=Symbol.for("@ts-pattern/isVariadic"),a="@ts-pattern/anonymous-select-key",f=function(n){return Boolean(n&&"object"==typeof n)},l=function(n){return n&&!!n[o]},s=function n(r,e,u){if(l(r)){var i=r[o]().match(e),a=i.matched,s=i.selections;return a&&s&&Object.keys(s).forEach(function(n){return u(n,s[n])}),a}if(f(r)){if(!f(e))return!1;if(Array.isArray(r)){if(!Array.isArray(e))return!1;for(var h,v=[],p=[],g=[],y=t(r.keys());!(h=y()).done;){var d=r[h.value];l(d)&&d[c]?g.push(d):g.length?p.push(d):v.push(d)}if(g.length){if(g.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(e.length<v.length+p.length)return!1;var m=e.slice(0,v.length),b=0===p.length?[]:e.slice(-p.length),w=e.slice(v.length,0===p.length?Infinity:-p.length);return v.every(function(t,r){return n(t,m[r],u)})&&p.every(function(t,r){return n(t,b[r],u)})&&(0===g.length||n(g[0],w,u))}return r.length===e.length&&r.every(function(t,r){return n(t,e[r],u)})}return Reflect.ownKeys(r).every(function(t){var i,c=r[t];return(t in e||l(i=c)&&"optional"===i[o]().matcherType)&&n(c,e[t],u)})}return Object.is(e,r)},h=function n(t){var r,e,u;return f(t)?l(t)?null!=(r=null==(e=(u=t[o]()).getSelectionKeys)?void 0:e.call(u))?r:[]:Array.isArray(t)?v(t,n):v(Object.values(t),n):[]},v=function(n,t){return n.reduce(function(n,r){return n.concat(t(r))},[])};function p(){var n=[].slice.call(arguments);if(1===n.length){var t=n[0];return function(n){return s(t,n,function(){})}}if(2===n.length)return s(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 g(n){return Object.assign(n,{optional:function(){return d(n)},and:function(t){return O(n,t)},or:function(t){return S(n,t)},select:function(t){return void 0===t?x(n):x(t,n)}})}function y(n){return Object.assign(function(n){var t;return Object.assign(n,((t={})[Symbol.iterator]=function(){var t,r=0,e=[{value:Object.assign(n,((t={})[c]=!0,t)),done:!1},{done:!0,value:void 0}];return{next:function(){var n;return null!=(n=e[r++])?n:e.at(-1)}}},t))}(n),{optional:function(){return y(d(n))},select:function(t){return y(void 0===t?x(n):x(t,n))}})}function d(n){var t;return g(((t={})[o]=function(){return{match:function(t){var r={},e=function(n,t){r[n]=t};return void 0===t?(h(n).forEach(function(n){return e(n,void 0)}),{matched:!0,selections:r}):{matched:s(n,t,e),selections:r}},getSelectionKeys:function(){return h(n)},matcherType:"optional"}},t))}var m=function(n,r){for(var e,u=t(n);!(e=u()).done;)if(!r(e.value))return!1;return!0},b=function(n,r){for(var e,u=t(n.entries());!(e=u()).done;){var i=e.value;if(!r(i[1],i[0]))return!1}return!0},w=function(n,r){for(var e,u=t(Reflect.ownKeys(n));!(e=u()).done;){var i=e.value;if(!r(i,n[i]))return!1}return!0};function O(){var n,t=[].slice.call(arguments);return g(((n={})[o]=function(){return{match:function(n){var r={},e=function(n,t){r[n]=t};return{matched:t.every(function(t){return s(t,n,e)}),selections:r}},getSelectionKeys:function(){return v(t,h)},matcherType:"and"}},n))}function S(){var n,t=[].slice.call(arguments);return g(((n={})[o]=function(){return{match:function(n){var r={},e=function(n,t){r[n]=t};return v(t,h).forEach(function(n){return e(n,void 0)}),{matched:t.some(function(t){return s(t,n,e)}),selections:r}},getSelectionKeys:function(){return v(t,h)},matcherType:"or"}},n))}function j(n){var t;return(t={})[o]=function(){return{match:function(t){return{matched:Boolean(n(t))}}}},t}function x(){var n,t=[].slice.call(arguments),r="string"==typeof t[0]?t[0]:void 0,e=2===t.length?t[1]:"string"==typeof t[0]?void 0:t[0];return g(((n={})[o]=function(){return{match:function(n){var t,u=((t={})[null!=r?r:a]=n,t);return{matched:void 0===e||s(e,n,function(n,t){u[n]=t}),selections:u}},getSelectionKeys:function(){return[null!=r?r:a].concat(void 0===e?[]:h(e))}}},n))}function A(n){return!0}function E(n){return"number"==typeof n}function _(n){return"string"==typeof n}function K(n){return"bigint"==typeof n}var P=g(j(A)),N=g(j(A)),T=P,B=function n(t){return Object.assign(g(t),{startsWith:function(r){return n(O(t,(e=r,j(function(n){return _(n)&&n.startsWith(e)}))));var e},endsWith:function(r){return n(O(t,(e=r,j(function(n){return _(n)&&n.endsWith(e)}))));var e},minLength:function(r){return n(O(t,function(n){return j(function(t){return _(t)&&t.length>=n})}(r)))},length:function(r){return n(O(t,function(n){return j(function(t){return _(t)&&t.length===n})}(r)))},maxLength:function(r){return n(O(t,function(n){return j(function(t){return _(t)&&t.length<=n})}(r)))},includes:function(r){return n(O(t,(e=r,j(function(n){return _(n)&&n.includes(e)}))));var e},regex:function(r){return n(O(t,(e=r,j(function(n){return _(n)&&Boolean(n.match(e))}))));var e}})}(j(_)),k=function n(t){return Object.assign(g(t),{between:function(r,e){return n(O(t,function(n,t){return j(function(r){return E(r)&&n<=r&&t>=r})}(r,e)))},lt:function(r){return n(O(t,function(n){return j(function(t){return E(t)&&t<n})}(r)))},gt:function(r){return n(O(t,function(n){return j(function(t){return E(t)&&t>n})}(r)))},lte:function(r){return n(O(t,function(n){return j(function(t){return E(t)&&t<=n})}(r)))},gte:function(r){return n(O(t,function(n){return j(function(t){return E(t)&&t>=n})}(r)))},int:function(){return n(O(t,j(function(n){return E(n)&&Number.isInteger(n)})))},finite:function(){return n(O(t,j(function(n){return E(n)&&Number.isFinite(n)})))},positive:function(){return n(O(t,j(function(n){return E(n)&&n>0})))},negative:function(){return n(O(t,j(function(n){return E(n)&&n<0})))}})}(j(E)),M=function n(t){return Object.assign(g(t),{between:function(r,e){return n(O(t,function(n,t){return j(function(r){return K(r)&&n<=r&&t>=r})}(r,e)))},lt:function(r){return n(O(t,function(n){return j(function(t){return K(t)&&t<n})}(r)))},gt:function(r){return n(O(t,function(n){return j(function(t){return K(t)&&t>n})}(r)))},lte:function(r){return n(O(t,function(n){return j(function(t){return K(t)&&t<=n})}(r)))},gte:function(r){return n(O(t,function(n){return j(function(t){return K(t)&&t>=n})}(r)))},positive:function(){return n(O(t,j(function(n){return K(n)&&n>0})))},negative:function(){return n(O(t,j(function(n){return K(n)&&n<0})))}})}(j(K)),I=g(j(function(n){return"boolean"==typeof n})),R=g(j(function(n){return"symbol"==typeof n})),W=g(j(function(n){return null==n})),z=g(j(function(n){return null!=n})),F={__proto__:null,matcher:o,optional:d,array:function(){var n,t=[].slice.call(arguments);return y(((n={})[o]=function(){return{match:function(n){if(!Array.isArray(n))return{matched:!1};if(0===t.length)return{matched:!0};var r=t[0],e={};if(0===n.length)return h(r).forEach(function(n){e[n]=[]}),{matched:!0,selections:e};var u=function(n,t){e[n]=(e[n]||[]).concat([t])};return{matched:n.every(function(n){return s(r,n,u)}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:h(t[0])}}},n))},set:function(){var n,t=[].slice.call(arguments);return g(((n={})[o]=function(){return{match:function(n){if(!(n instanceof Set))return{matched:!1};var r={};if(0===n.size)return{matched:!0,selections:r};if(0===t.length)return{matched:!0};var e=function(n,t){r[n]=(r[n]||[]).concat([t])},u=t[0];return{matched:m(n,function(n){return s(u,n,e)}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:h(t[0])}}},n))},map:function(){var n,t=[].slice.call(arguments);return g(((n={})[o]=function(){return{match:function(n){if(!(n instanceof Map))return{matched:!1};var r={};if(0===n.size)return{matched:!0,selections:r};var e,u=function(n,t){r[n]=(r[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==(e=t[0])?void 0:e.toString()));var i=t[0],o=t[1];return{matched:b(n,function(n,t){var r=s(i,t,u),e=s(o,n,u);return r&&e}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(h(t[0]),h(t[1]))}}},n))},record:function(){var n,t=[].slice.call(arguments);return g(((n={})[o]=function(){return{match:function(n){if(null===n||"object"!=typeof n||Array.isArray(n))return{matched:!1};var r;if(0===t.length)throw new Error("`P.record` wasn't given enough arguments. Expected (value) or (key, value), received "+(null==(r=t[0])?void 0:r.toString()));var e={},u=function(n,t){e[n]=(e[n]||[]).concat([t])},i=1===t.length?[B,t[0]]:t,o=i[0],c=i[1];return{matched:w(n,function(n,t){var r="string"!=typeof n||Number.isNaN(Number(n))?null:Number(n),e=null!==r&&s(o,r,u),i=s(o,n,u),a=s(c,t,u);return(i||e)&&a}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(h(t[0]),h(t[1]))}}},n))},intersection:O,union:S,not:function(n){var t;return g(((t={})[o]=function(){return{match:function(t){return{matched:!s(n,t,function(){})}},getSelectionKeys:function(){return[]},matcherType:"not"}},t))},when:j,select:x,any:P,unknown:N,_:T,string:B,number:k,bigint:M,boolean:I,symbol:R,nullish:W,nonNullable:z,instanceOf:function(n){return g(j(function(n){return function(t){return t instanceof n}}(n)))},shape:function(n){return g(j(p(n)))}},L=/*#__PURE__*/function(n){var t,r;function e(t){var r,e;try{e=JSON.stringify(t)}catch(n){e=t}return(r=n.call(this,"Pattern matching error: no pattern matches value "+e)||this).input=void 0,r.input=t,r}return r=n,(t=e).prototype=Object.create(r.prototype),t.prototype.constructor=t,u(t,r),e}(/*#__PURE__*/i(Error)),U={matched:!1,value:void 0},C=/*#__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,r=[].slice.call(arguments);if(this.state.matched)return this;var e=r[r.length-1],u=[r[0]],i=void 0;3===r.length&&"function"==typeof r[1]?i=r[1]:r.length>2&&u.push.apply(u,r.slice(1,r.length-1));var o=!1,c={},f=function(n,t){o=!0,c[n]=t},l=!u.some(function(n){return s(n,t.input,f)})||i&&!Boolean(i(this.input))?U:{matched:!0,value:e(o?a in c?c[a]:c:this.input,this.input)};return new n(this.input,l)},t.when=function(t,r){if(this.state.matched)return this;var e=Boolean(t(this.input));return new n(this.input,e?{matched:!0,value:r(this.input,this.input)}:U)},t.otherwise=function(n){return this.state.matched?this.state.value:n(this.input)},t.exhaustive=function(n){return void 0===n&&(n=J),this.state.matched?this.state.value:n(this.input)},t.run=function(){return this.exhaustive()},t.returnType=function(){return this},t.narrow=function(){return this},n}();function J(n){throw new L(n)}exports.NonExhaustiveError=L,exports.P=F,exports.Pattern=F,exports.isMatching=p,exports.match=function(n){return new C(n,U)};
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/internals/symbols.ts","../src/internals/helpers.ts","../src/is-matching.ts","../src/patterns.ts","../src/errors.ts","../src/match.ts"],"sourcesContent":["/**\n * Symbols used internally within ts-pattern to construct and discriminate\n * Guard, Not, and Select, and AnonymousSelect patterns\n *\n * Symbols have the advantage of not appearing in auto-complete suggestions in\n * user defined patterns, and eliminate the risk of property\n * overlap between ts-pattern internals and user defined patterns.\n *\n * These symbols have to be visible to tsc for type inference to work, but\n * users should not import them\n * @module\n * @private\n * @internal\n */\n\nexport const matcher = Symbol.for('@ts-pattern/matcher');\nexport type matcher = typeof matcher;\n\nexport const unset = Symbol.for('@ts-pattern/unset');\nexport type unset = typeof unset;\n\nexport const isVariadic = Symbol.for('@ts-pattern/isVariadic');\nexport type isVariadic = typeof isVariadic;\n\n// can't be a symbol because this key has to be enumerable.\nexport const anonymousSelectKey = '@ts-pattern/anonymous-select-key';\nexport type anonymousSelectKey = typeof anonymousSelectKey;\n\nexport const override = Symbol.for('@ts-pattern/override');\nexport type override = typeof override;\n","/**\n * @module\n * @private\n * @internal\n */\n\nimport * as symbols from './symbols';\nimport { SelectionType } from '../types/FindSelected';\nimport { Pattern, Matcher, MatcherType, AnyMatcher } from '../types/Pattern';\n\n// @internal\nexport const isObject = (value: unknown): value is Object =>\n Boolean(value && typeof value === 'object');\n\n// @internal\nexport const isMatcher = (\n x: unknown\n): x is Matcher<unknown, unknown, MatcherType, SelectionType> => {\n const pattern = x as Matcher<unknown, unknown, MatcherType, SelectionType>;\n return pattern && !!pattern[symbols.matcher];\n};\n\n// @internal\nconst isOptionalPattern = (\n x: unknown\n): x is Matcher<unknown, unknown, 'optional', SelectionType> => {\n return isMatcher(x) && x[symbols.matcher]().matcherType === 'optional';\n};\n\n// tells us if the value matches a given pattern.\n// @internal\nexport const matchPattern = (\n pattern: any,\n value: any,\n select: (key: string, value: unknown) => void\n): boolean => {\n if (isMatcher(pattern)) {\n const matcher = pattern[symbols.matcher]();\n const { matched, selections } = matcher.match(value);\n if (matched && selections) {\n Object.keys(selections).forEach((key) => select(key, selections[key]));\n }\n return matched;\n }\n\n if (isObject(pattern)) {\n if (!isObject(value)) return false;\n\n // Tuple pattern\n if (Array.isArray(pattern)) {\n if (!Array.isArray(value)) return false;\n let startPatterns = [];\n let endPatterns = [];\n let variadicPatterns: AnyMatcher[] = [];\n\n for (const i of pattern.keys()) {\n const subpattern = pattern[i];\n if (isMatcher(subpattern) && subpattern[symbols.isVariadic]) {\n variadicPatterns.push(subpattern);\n } else if (variadicPatterns.length) {\n endPatterns.push(subpattern);\n } else {\n startPatterns.push(subpattern);\n }\n }\n\n if (variadicPatterns.length) {\n if (variadicPatterns.length > 1) {\n throw new Error(\n `Pattern error: Using \\`...P.array(...)\\` several times in a single pattern is not allowed.`\n );\n }\n\n if (value.length < startPatterns.length + endPatterns.length) {\n return false;\n }\n\n const startValues = value.slice(0, startPatterns.length);\n const endValues =\n endPatterns.length === 0 ? [] : value.slice(-endPatterns.length);\n const middleValues = value.slice(\n startPatterns.length,\n endPatterns.length === 0 ? Infinity : -endPatterns.length\n );\n\n return (\n startPatterns.every((subPattern, i) =>\n matchPattern(subPattern, startValues[i], select)\n ) &&\n endPatterns.every((subPattern, i) =>\n matchPattern(subPattern, endValues[i], select)\n ) &&\n (variadicPatterns.length === 0\n ? true\n : matchPattern(variadicPatterns[0], middleValues, select))\n );\n }\n\n return pattern.length === value.length\n ? pattern.every((subPattern, i) =>\n matchPattern(subPattern, value[i], select)\n )\n : false;\n }\n\n return Reflect.ownKeys(pattern).every((k): boolean => {\n const subPattern = pattern[k];\n\n return (\n (k in value || isOptionalPattern(subPattern)) &&\n matchPattern(subPattern, value[k], select)\n );\n });\n }\n\n return Object.is(value, pattern);\n};\n\n// @internal\nexport const getSelectionKeys = (pattern: any): string[] => {\n if (isObject(pattern)) {\n if (isMatcher(pattern)) {\n return pattern[symbols.matcher]().getSelectionKeys?.() ?? [];\n }\n if (Array.isArray(pattern)) return flatMap(pattern, getSelectionKeys);\n return flatMap(Object.values(pattern), getSelectionKeys);\n }\n return [];\n};\n\n// @internal\nexport const flatMap = <a, b>(\n xs: readonly a[],\n f: (v: a) => readonly b[]\n): b[] => xs.reduce<b[]>((acc, x) => acc.concat(f(x)), []);\n","import { MatchedValue, Pattern, UnknownProperties } from './types/Pattern';\nimport * as P from './patterns';\nimport { matchPattern } from './internals/helpers';\nimport { WithDefault } from './types/helpers';\n\n/**\n * This constraint allows using additional properties\n * in object patterns. See \"should allow targetting unknown properties\"\n * unit test in `is-matching.test.ts`.\n */\ntype PatternConstraint<T> = T extends readonly any[]\n ? P.Pattern<T>\n : T extends object\n ? P.Pattern<T> & UnknownProperties\n : P.Pattern<T>;\n\n/**\n * `isMatching` takes pattern and returns a **type guard** function, cheching if a value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * const hasName = isMatching({ name: P.string })\n *\n * declare let input: unknown\n *\n * if (hasName(input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const p extends Pattern<unknown>>(\n pattern: p\n): (value: unknown) => value is P.infer<p>;\n/**\n * `isMatching` takes pattern and a value and checks if the value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * declare let input: unknown\n *\n * if (isMatching({ name: P.string }, input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const T, const P extends PatternConstraint<T>>(\n pattern: P,\n value: T\n): value is T & WithDefault<P.narrow<T, P>, P.infer<P>>;\n\nexport function isMatching<const p extends Pattern<any>>(\n ...args: [pattern: p, value?: any]\n): boolean | ((vale: any) => boolean) {\n if (args.length === 1) {\n const [pattern] = args;\n return (value: any): value is MatchedValue<any, P.infer<p>> =>\n matchPattern(pattern, value, () => {});\n }\n if (args.length === 2) {\n const [pattern, value] = args;\n return matchPattern(pattern, value, () => {});\n }\n\n throw new Error(\n `isMatching wasn't given the right number of arguments: expected 1 or 2, received ${args.length}.`\n );\n}\n","/**\n * The `P` module contains patterns for primitive types, wildcards and\n * other pattern-matching utilities.\n *\n * @module\n */\n\nimport { matchPattern, getSelectionKeys, flatMap } from './internals/helpers';\nimport * as symbols from './internals/symbols';\nimport { matcher } from './internals/symbols';\nimport { isMatching } from './is-matching';\nimport { ExtractPreciseValue } from './types/ExtractPreciseValue';\nimport { Fn } from './types/helpers';\nimport { InvertPattern } from './types/InvertPattern';\nimport {\n Pattern,\n UnknownValuePattern,\n OptionalP,\n ArrayP,\n MapP,\n SetP,\n AndP,\n OrP,\n NotP,\n GuardP,\n SelectP,\n AnonymousSelectP,\n GuardExcludeP,\n CustomP,\n Matcher,\n StringPattern,\n UnknownPattern,\n NumberPattern,\n BooleanPattern,\n BigIntPattern,\n NullishPattern,\n SymbolPattern,\n Chainable,\n BigIntChainable,\n NumberChainable,\n StringChainable,\n ArrayChainable,\n Variadic,\n NonNullablePattern,\n RecordP,\n} from './types/Pattern';\n\nexport type {\n /**\n * `Pattern<T>` is the type of all patterns\n * that can match a value of type `T`.\n */\n Pattern,\n\n /**\n * `unstable_Fn` can be used to created a\n * a Matchable instance – a custom type that\n * can be used as a pattern.\n *\n * @experimental This feature is unstable.\n */\n Fn as unstable_Fn,\n};\n\nexport { matcher };\n\n/**\n * A `Matchable` is an object implementing\n * the Matcher Protocol. It must have a `[P.matcher]: P.Matcher<NarrowFn>`\n * key, which defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matchable<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = CustomP<input, pattern, narrowedOrFn>;\n\n/**\n * A `Matcher` is an object with `match` function, which\n * defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matcher<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = ReturnType<CustomP<input, pattern, narrowedOrFn>[matcher]>;\n\n/**\n * `P.infer<typeof somePattern>` will return the type of the value\n * matched by this pattern.\n *\n * [Read the documentation for `P.infer` on GitHub](https://github.com/gvergnaud/ts-pattern#pinfer)\n *\n * @example\n * const userPattern = { name: P.string }\n * type User = P.infer<typeof userPattern>\n */\nexport type infer<pattern> = InvertPattern<NoInfer<pattern>, unknown>;\n\n/**\n * `P.narrow<Input, Pattern>` will narrow the input type to only keep\n * the set of values that are compatible with the provided pattern type.\n *\n * [Read the documentation for `P.narrow` on GitHub](https://github.com/gvergnaud/ts-pattern#pnarrow)\n *\n * @example\n * type Input = ['a' | 'b' | 'c', 'a' | 'b' | 'c']\n * const Pattern = ['a', P.union('a', 'b')] as const\n *\n * type Narrowed = P.narrow<Input, typeof Pattern>\n * // ^? ['a', 'a' | 'b']\n */\nexport type narrow<input, pattern> = ExtractPreciseValue<\n input,\n InvertPattern<pattern, input>\n>;\n\nfunction chainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): Chainable<pattern> {\n return Object.assign(pattern, {\n optional: () => optional(pattern),\n and: (p2: any) => intersection(pattern, p2),\n or: (p2: any) => union(pattern, p2),\n select: (key: any) =>\n key === undefined ? select(pattern) : select(key, pattern),\n }) as Chainable<pattern>;\n}\n\nconst variadic = <pattern extends {}>(pattern: pattern): Variadic<pattern> =>\n Object.assign(pattern, {\n [Symbol.iterator](): Iterator<pattern, void, undefined> {\n let i = 0;\n const variadicPattern = Object.assign(pattern, {\n [symbols.isVariadic]: true,\n });\n const values: IteratorResult<pattern, void>[] = [\n { value: variadicPattern, done: false },\n { done: true, value: undefined },\n ];\n return {\n next: () => values[i++] ?? values.at(-1)!,\n };\n },\n });\n\nfunction arrayChainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): ArrayChainable<pattern> {\n return Object.assign(variadic(pattern), {\n optional: () => arrayChainable(optional(pattern)),\n select: (key: any) =>\n arrayChainable(\n key === undefined ? select(pattern) : select(key, pattern)\n ),\n }) as any;\n}\n\n/**\n * `P.optional(subpattern)` takes a sub pattern and returns a pattern which matches if the\n * key is undefined or if it is defined and the sub pattern matches its value.\n *\n * [Read the documentation for `P.optional` on GitHub](https://github.com/gvergnaud/ts-pattern#poptional-patterns)\n *\n * @example\n * match(value)\n * .with({ greeting: P.optional('Hello') }, () => 'will match { greeting?: \"Hello\" }')\n */\nexport function optional<\n input,\n const pattern extends unknown extends input\n ? UnknownValuePattern\n : Pattern<input>\n>(pattern: pattern): Chainable<OptionalP<input, pattern>, 'optional'> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n if (value === undefined) {\n getSelectionKeys(pattern).forEach((key) =>\n selector(key, undefined)\n );\n return { matched: true, selections };\n }\n const matched = matchPattern(pattern, value, selector);\n return { matched, selections };\n },\n getSelectionKeys: () => getSelectionKeys(pattern),\n matcherType: 'optional',\n };\n },\n });\n}\n\ntype UnwrapArray<xs> = xs extends readonly (infer x)[] ? x : never;\n\ntype UnwrapSet<xs> = xs extends Set<infer x> ? x : never;\n\ntype UnwrapMapKey<xs> = xs extends Map<infer k, any> ? k : never;\n\ntype UnwrapMapValue<xs> = xs extends Map<any, infer v> ? v : never;\n\ntype UnwrapRecordKey<xs> = xs extends Record<infer k, any> ? k : never;\n\ntype UnwrapRecordValue<xs> = xs extends Record<any, infer v> ? v : never;\n\ntype WithDefault<a, b> = [a] extends [never] ? b : a;\n\n/**\n * `P.array(subpattern)` takes a sub pattern and returns a pattern, which matches\n * arrays if all their elements match the sub pattern.\n *\n * [Read the documentation for `P.array` on GitHub](https://github.com/gvergnaud/ts-pattern#parray-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.array({ name: P.string }) }, () => 'will match { name: string }[]')\n */\nexport function array<input>(): ArrayChainable<ArrayP<input, unknown>>;\nexport function array<\n input,\n const pattern extends Pattern<WithDefault<UnwrapArray<input>, unknown>>\n>(pattern: pattern): ArrayChainable<ArrayP<input, pattern>>;\nexport function array(\n ...args: [pattern?: any]\n): ArrayChainable<ArrayP<any, any>> {\n return arrayChainable({\n [matcher]() {\n return {\n match: (value: any) => {\n if (!Array.isArray(value)) return { matched: false };\n\n if (args.length === 0) return { matched: true };\n\n const pattern = args[0];\n let selections: Record<string, unknown[]> = {};\n\n if (value.length === 0) {\n getSelectionKeys(pattern).forEach((key) => {\n selections[key] = [];\n });\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const matched = value.every((v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\n/**\n * `P.set(subpattern)` takes a sub pattern and returns a pattern that matches\n * sets if all their elements match the sub pattern.\n *\n * [Read `P.set` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pset-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.set(P.string) }, () => 'will match Set<string>')\n */\nexport function set<input>(): Chainable<SetP<input, unknown>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(pattern: pattern): Chainable<SetP<input, pattern>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(...args: [pattern?: pattern]): Chainable<SetP<input, pattern>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Set)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n if (args.length === 0) return { matched: true };\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const pattern = args[0];\n\n const matched = setEvery(value, (v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\nconst setEvery = <T>(set: Set<T>, predicate: (value: T) => boolean) => {\n for (const value of set) {\n if (predicate(value)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.map(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on maps where all elements inside the map match those two\n * subpatterns.\n *\n * [Read `P.map` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pmap-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.map(P.map(P.string, P.number)) }, (map) => `map's type is Map<string, number>`)\n */\nexport function map<input>(): Chainable<MapP<input, unknown, unknown>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(patternKey: pkey, patternValue: pvalue): Chainable<MapP<input, pkey, pvalue>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(\n ...args: [patternKey?: pkey, patternValue?: pvalue]\n): Chainable<MapP<input, pkey, pvalue>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Map)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n if (args.length === 0) return { matched: true };\n if (args.length === 1) {\n throw new Error(\n `\\`P.map\\` wasn\\'t given enough arguments. Expected (key, value), received ${args[0]?.toString()}`\n );\n }\n const [patternKey, patternValue] = args;\n\n const matched = mapEvery(value, (v, k) => {\n const keyMatch = matchPattern(patternKey, k, selector);\n const valueMatch = matchPattern(patternValue, v, selector);\n return keyMatch && valueMatch;\n });\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0\n ? []\n : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n };\n },\n });\n}\n\nconst mapEvery = <K, T>(\n map: Map<K, T>,\n predicate: (value: T, key: K) => boolean\n) => {\n for (const [key, value] of map.entries()) {\n if (predicate(value, key)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.record(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on objects where all entries match those two\n * subpatterns.\n *\n * [Read `P.record` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#precord-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.record(P.string, P.number) }, (obj) => `object's type is Record<string, number>`)\n */\nexport function record<\n input,\n const pvalue extends Pattern<UnwrapRecordValue<input>>\n>(patternValue: pvalue): Chainable<RecordP<input, StringPattern, pvalue>>;\nexport function record<\n input,\n const pkey extends Pattern<WithDefault<UnwrapRecordKey<input>, PropertyKey>>,\n const pvalue extends Pattern<WithDefault<UnwrapRecordValue<input>, unknown>>\n>(\n patternKey: pkey,\n patternValue?: pvalue\n): Chainable<RecordP<input, pkey, pvalue>>;\nexport function record(\n ...args: [patternKey?: unknown, patternValue?: unknown]\n): Chainable<RecordP<unknown, unknown, unknown>> {\n return chainable({\n [matcher]() {\n return {\n match: (value: unknown) => {\n if (\n value === null ||\n typeof value !== 'object' ||\n Array.isArray(value)\n ) {\n return { matched: false };\n }\n\n if (args.length === 0) {\n throw new Error(\n `\\`P.record\\` wasn\\'t given enough arguments. Expected (value) or (key, value), received ${args[0]?.toString()}`\n );\n }\n\n let selections: Record<string, unknown[]> = {};\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const [patternKey, patternValue] =\n args.length === 1 ? [string, args[0]] : args;\n\n const matched = recordEvery(value, (k, v) => {\n // since number keys are coerced to strings, we need to coerce them back to numbers if the pattern is `number`\n const coercedKey =\n typeof k === 'string' && !Number.isNaN(Number(k))\n ? Number(k)\n : null;\n\n const coercedKeyMatch =\n coercedKey !== null\n ? matchPattern(patternKey, coercedKey, selector)\n : false;\n\n const keyMatch = matchPattern(patternKey, k, selector);\n\n const valueMatch = matchPattern(patternValue, v, selector);\n\n return (keyMatch || coercedKeyMatch) && valueMatch;\n });\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0\n ? []\n : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n };\n },\n });\n}\n\nconst recordEvery = <K extends PropertyKey, T>(\n record: Record<K, T>,\n predicate: (key: K, value: T) => boolean\n) => {\n const keys = Reflect.ownKeys(record);\n for (const key of keys) {\n if (predicate(key as K, record[key as K] as T)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.intersection(...patterns)` returns a pattern which matches\n * only if **every** patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.intersection` on GitHub](https://github.com/gvergnaud/ts-pattern#pintersection-patterns)\n *\n * @example\n * match(value)\n * .with(\n * {\n * user: P.intersection(\n * { firstname: P.string },\n * { lastname: P.string },\n * { age: P.when(age => age > 21) }\n * )\n * },\n * ({ user }) => 'will match { firstname: string, lastname: string, age: number } if age > 21'\n * )\n */\nexport function intersection<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<AndP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: (value) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n const matched = (patterns as readonly UnknownValuePattern[]).every(\n (p) => matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n matcherType: 'and',\n }),\n });\n}\n\n/**\n * `P.union(...patterns)` returns a pattern which matches\n * if **at least one** of the patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.union` on GitHub](https://github.com/gvergnaud/ts-pattern#punion-patterns)\n *\n * @example\n * match(value)\n * .with(\n * { type: P.union('a', 'b', 'c') },\n * ({ type }) => 'will match { type: \"a\" | \"b\" | \"c\" }'\n * )\n */\nexport function union<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<OrP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n flatMap(\n patterns as readonly UnknownValuePattern[],\n getSelectionKeys\n ).forEach((key) => selector(key, undefined));\n const matched = (patterns as readonly UnknownValuePattern[]).some((p) =>\n matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n matcherType: 'or',\n }),\n });\n}\n\n/**\n * `P.not(pattern)` returns a pattern which matches if the sub pattern\n * doesn't match.\n *\n * [Read the documentation for `P.not` on GitHub](https://github.com/gvergnaud/ts-pattern#pnot-patterns)\n *\n * @example\n * match<{ a: string | number }>(value)\n * .with({ a: P.not(P.string) }, (x) => 'will match { a: number }'\n * )\n */\n\nexport function not<\n input,\n const pattern extends Pattern<input> | UnknownValuePattern\n>(pattern: pattern): Chainable<NotP<input, pattern>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: !matchPattern(pattern, value, () => {}),\n }),\n getSelectionKeys: () => [],\n matcherType: 'not',\n }),\n });\n}\n\n/**\n * `P.when((value) => boolean)` returns a pattern which matches\n * if the predicate returns true for the current input.\n *\n * [Read the documentation for `P.when` on GitHub](https://github.com/gvergnaud/ts-pattern#pwhen-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.when(age => age > 21) }, (x) => 'will match if value.age > 21'\n * )\n */\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n>;\nexport function when<input, narrowed extends input, excluded>(\n predicate: (input: input) => input is narrowed\n): GuardExcludeP<input, narrowed, excluded>;\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n> {\n return {\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: Boolean(predicate(value as input)),\n }),\n }),\n };\n}\n\n/**\n * `P.select()` is a pattern which will always match,\n * and will inject the selected piece of input in the handler function.\n *\n * [Read the documentation for `P.select` on GitHub](https://github.com/gvergnaud/ts-pattern#pselect-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.select() }, (age) => 'age: number'\n * )\n */\nexport function select(): Chainable<AnonymousSelectP, 'select' | 'or' | 'and'>;\nexport function select<\n input,\n const patternOrKey extends\n | string\n | (unknown extends input ? UnknownValuePattern : Pattern<input>)\n>(\n patternOrKey: patternOrKey\n): patternOrKey extends string\n ? Chainable<SelectP<patternOrKey, 'select' | 'or' | 'and'>>\n : Chainable<\n SelectP<symbols.anonymousSelectKey, input, patternOrKey>,\n 'select' | 'or' | 'and'\n >;\nexport function select<\n input,\n const pattern extends unknown extends input\n ? UnknownValuePattern\n : Pattern<input>,\n const k extends string\n>(\n key: k,\n pattern: pattern\n): Chainable<SelectP<k, input, pattern>, 'select' | 'or' | 'and'>;\nexport function select(\n ...args: [keyOrPattern?: unknown | string, pattern?: unknown]\n): Chainable<SelectP<string>, 'select' | 'or' | 'and'> {\n const key: string | undefined =\n typeof args[0] === 'string' ? args[0] : undefined;\n const pattern: unknown =\n args.length === 2\n ? args[1]\n : typeof args[0] === 'string'\n ? undefined\n : args[0];\n return chainable({\n [matcher]() {\n return {\n match: (value) => {\n let selections: Record<string, unknown> = {\n [key ?? symbols.anonymousSelectKey]: value,\n };\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n return {\n matched:\n pattern === undefined\n ? true\n : matchPattern(pattern, value, selector),\n selections: selections,\n };\n },\n getSelectionKeys: () =>\n [key ?? symbols.anonymousSelectKey].concat(\n pattern === undefined ? [] : getSelectionKeys(pattern)\n ),\n };\n },\n });\n}\n\nfunction isUnknown(x: unknown): x is unknown {\n return true;\n}\n\nfunction isNumber<T>(x: T | number): x is number {\n return typeof x === 'number';\n}\n\nfunction isString<T>(x: T | string): x is string {\n return typeof x === 'string';\n}\n\nfunction isBoolean<T>(x: T | boolean): x is boolean {\n return typeof x === 'boolean';\n}\n\nfunction isBigInt<T>(x: T | bigint): x is bigint {\n return typeof x === 'bigint';\n}\n\nfunction isSymbol<T>(x: T | symbol): x is symbol {\n return typeof x === 'symbol';\n}\n\nfunction isNullish<T>(x: T | null | undefined): x is null | undefined {\n return x === null || x === undefined;\n}\n\nfunction isNonNullable(x: unknown): x is {} {\n return x !== null && x !== undefined;\n}\n\ntype AnyConstructor = abstract new (...args: any[]) => any;\n\nfunction isInstanceOf<T extends AnyConstructor>(classConstructor: T) {\n return (val: unknown): val is InstanceType<T> =>\n val instanceof classConstructor;\n}\n\n/**\n * `P.any` is a wildcard pattern, matching **any value**.\n *\n * [Read the documentation for `P.any` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P.any, () => 'will always match')\n */\nexport const any: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P.unknown` is a wildcard pattern, matching **unknown value**.\n *\n * [Read the documentation for `P.unknown` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P.unknown, () => 'will always match')\n */\nexport const unknown: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P._` is a wildcard pattern, matching **any value**.\n * It's an alias to `P.any`.\n *\n * [Read the documentation for `P._` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P._, () => 'will always match')\n */\nexport const _ = any;\n\n/**\n * `P.string.startsWith(start)` is a pattern, matching **strings** starting with `start`.\n *\n * [Read the documentation for `P.string.startsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringstartsWith)\n *\n * @example\n * match(value)\n * .with(P.string.startsWith('A'), () => 'value starts with an A')\n */\n\nconst startsWith = <input, const start extends string>(\n start: start\n): GuardP<input, `${start}${string}`> =>\n when((value) => isString(value) && value.startsWith(start));\n\n/**\n * `P.string.endsWith(end)` is a pattern, matching **strings** ending with `end`.\n *\n * [Read the documentation for `P.string.endsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringendsWith)\n *\n * @example\n * match(value)\n * .with(P.string.endsWith('!'), () => 'value ends with an !')\n */\nconst endsWith = <input, const end extends string>(\n end: end\n): GuardP<input, `${string}${end}`> =>\n when((value) => isString(value) && value.endsWith(end));\n\n/**\n * `P.string.minLength(min)` is a pattern, matching **strings** with at least `min` characters.\n *\n * [Read the documentation for `P.string.minLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringminLength)\n *\n * @example\n * match(value)\n * .with(P.string.minLength(10), () => 'string with more length >= 10')\n */\nconst minLength = <const min extends number>(min: min) =>\n when((value) => isString(value) && value.length >= min);\n\n/**\n * `P.string.length(len)` is a pattern, matching **strings** with exactly `len` characters.\n *\n * [Read the documentation for `P.string.length` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringlength)\n *\n * @example\n * match(value)\n * .with(P.string.length(10), () => 'strings with length === 10')\n */\nconst length = <const len extends number>(len: len) =>\n when((value) => isString(value) && value.length === len);\n\n/**\n * `P.string.maxLength(max)` is a pattern, matching **strings** with at most `max` characters.\n *\n * [Read the documentation for `P.string.maxLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringmaxLength)\n *\n * @example\n * match(value)\n * .with(P.string.maxLength(10), () => 'string with more length <= 10')\n */\nconst maxLength = <const max extends number>(max: max) =>\n when((value) => isString(value) && value.length <= max);\n\n/**\n * `P.string.includes(substr)` is a pattern, matching **strings** containing `substr`.\n *\n * [Read the documentation for `P.string.includes` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringincludes)\n *\n * @example\n * match(value)\n * .with(P.string.includes('http'), () => 'value contains http')\n */\nconst includes = <input, const substr extends string>(\n substr: substr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && value.includes(substr));\n\n/**\n * `P.string.regex(expr)` is a pattern, matching **strings** that `expr` regular expression.\n *\n * [Read the documentation for `P.string.regex` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringregex)\n *\n * @example\n * match(value)\n * .with(P.string.regex(/^https?:\\/\\//), () => 'url')\n */\nconst regex = <input, const expr extends string | RegExp>(\n expr: expr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && Boolean(value.match(expr)));\n\nconst stringChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): StringChainable<pattern> =>\n Object.assign(chainable(pattern), {\n startsWith: (str: string) =>\n stringChainable(intersection(pattern, startsWith(str))),\n endsWith: (str: string) =>\n stringChainable(intersection(pattern, endsWith(str))),\n minLength: (min: number) =>\n stringChainable(intersection(pattern, minLength(min))),\n length: (len: number) =>\n stringChainable(intersection(pattern, length(len))),\n maxLength: (max: number) =>\n stringChainable(intersection(pattern, maxLength(max))),\n includes: (str: string) =>\n stringChainable(intersection(pattern, includes(str))),\n regex: (str: string) => stringChainable(intersection(pattern, regex(str))),\n }) as any;\n\n/**\n * `P.string` is a wildcard pattern, matching any **string**.\n *\n * [Read the documentation for `P.string` on GitHub](https://github.com/gvergnaud/ts-pattern#pstring-wildcard)\n *\n * @example\n * match(value)\n * .with(P.string, () => 'will match on strings')\n */\nexport const string: StringPattern = stringChainable(when(isString));\n\n/**\n * `P.number.between(min, max)` matches **numbers** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.number.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.number.between(0, 10), () => '0 <= numbers <= 10')\n */\nconst between = <input, const min extends number, const max extends number>(\n min: min,\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && min <= value && max >= value);\n\n/**\n * `P.number.lt(max)` matches **numbers** smaller than `max`.\n *\n * [Read the documentation for `P.number.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.number.lt(10), () => 'numbers < 10')\n */\nconst lt = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < max);\n\n/**\n * `P.number.gt(min)` matches **numbers** greater than `min`.\n *\n * [Read the documentation for `P.number.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.number.gt(10), () => 'numbers > 10')\n */\nconst gt = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > min);\n\n/**\n * `P.number.lte(max)` matches **numbers** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.number.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.number.lte(10), () => 'numbers <= 10')\n */\nconst lte = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value <= max);\n\n/**\n * `P.number.gte(min)` matches **numbers** greater than or equal to `min`.\n *\n * [Read the documentation for `P.number.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergte)\n *\n * @example\n * match(value)\n * .with(P.number.gte(10), () => 'numbers >= 10')\n */\nconst gte = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value >= min);\n\n/**\n * `P.number.int()` matches **integer** numbers.\n *\n * [Read the documentation for `P.number.int()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberint)\n *\n * @example\n * match(value)\n * .with(P.number.int(), () => 'an integer')\n */\nconst int = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isInteger(value));\n\n/**\n * `P.number.finite` matches **finite numbers**.\n *\n * [Read the documentation for `P.number.finite` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberfinite)\n *\n * @example\n * match(value)\n * .with(P.number.finite, () => 'not Infinity')\n */\nconst finite = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isFinite(value));\n\n/**\n * `P.number.positive()` matches **positive** numbers.\n *\n * [Read the documentation for `P.number.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberpositive)\n *\n * @example\n * match(value)\n * .with(P.number.positive(), () => 'number > 0')\n */\nconst positive = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > 0);\n\n/**\n * `P.number.negative()` matches **negative** numbers.\n *\n * [Read the documentation for `P.number.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbernegative)\n *\n * @example\n * match(value)\n * .with(P.number.negative(), () => 'number < 0')\n */\nconst negative = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < 0);\n\nconst numberChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): NumberChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: number, max: number) =>\n numberChainable(intersection(pattern, between(min, max))),\n lt: (max: number) => numberChainable(intersection(pattern, lt(max))),\n gt: (min: number) => numberChainable(intersection(pattern, gt(min))),\n lte: (max: number) => numberChainable(intersection(pattern, lte(max))),\n gte: (min: number) => numberChainable(intersection(pattern, gte(min))),\n int: () => numberChainable(intersection(pattern, int())),\n finite: () => numberChainable(intersection(pattern, finite())),\n positive: () => numberChainable(intersection(pattern, positive())),\n negative: () => numberChainable(intersection(pattern, negative())),\n }) as any;\n\n/**\n * `P.number` is a wildcard pattern, matching any **number**.\n *\n * [Read the documentation for `P.number` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumber-wildcard)\n *\n * @example\n * match(value)\n * .with(P.number, () => 'will match on numbers')\n */\nexport const number: NumberPattern = numberChainable(when(isNumber));\n\n/**\n * `P.bigint.between(min, max)` matches **bigint** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.bigint.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.bigint.between(0, 10), () => '0 <= bigints <= 10')\n */\nconst betweenBigInt = <\n input,\n const min extends bigint,\n const max extends bigint\n>(\n min: min,\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && min <= value && max >= value);\n\n/**\n * `P.bigint.lt(max)` matches **bigint** smaller than `max`.\n *\n * [Read the documentation for `P.bigint.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.bigint.lt(10), () => 'bigints < 10')\n */\nconst ltBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < max);\n\n/**\n * `P.bigint.gt(min)` matches **bigint** greater than `min`.\n *\n * [Read the documentation for `P.bigint.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.bigint.gt(10), () => 'bigints > 10')\n */\nconst gtBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > min);\n\n/**\n * `P.bigint.lte(max)` matches **bigint** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.bigint.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.bigint.lte(10), () => 'bigints <= 10')\n */\nconst lteBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value <= max);\n\n/**\n * `P.bigint.gte(min)` matches **bigint** greater than or equal to `min`.\n *\n * [Read the documentation for `P.bigint.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintgte)\n *\n * @example\n * match(value)\n * .with(P.bigint.gte(10), () => 'bigints >= 10')\n */\nconst gteBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value >= min);\n\n/**\n * `P.bigint.positive()` matches **positive** bigints.\n *\n * [Read the documentation for `P.bigint.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintpositive)\n *\n * @example\n * match(value)\n * .with(P.bigint.positive(), () => 'bigint > 0')\n */\nconst positiveBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > 0);\n\n/**\n * `P.bigint.negative()` matches **negative** bigints.\n *\n * [Read the documentation for `P.bigint.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintnegative)\n *\n * @example\n * match(value)\n * .with(P.bigint.negative(), () => 'bigint < 0')\n */\nconst negativeBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < 0);\n\nconst bigintChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): BigIntChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: bigint, max: bigint) =>\n bigintChainable(intersection(pattern, betweenBigInt(min, max))),\n lt: (max: bigint) => bigintChainable(intersection(pattern, ltBigInt(max))),\n gt: (min: bigint) => bigintChainable(intersection(pattern, gtBigInt(min))),\n lte: (max: bigint) =>\n bigintChainable(intersection(pattern, lteBigInt(max))),\n gte: (min: bigint) =>\n bigintChainable(intersection(pattern, gteBigInt(min))),\n positive: () => bigintChainable(intersection(pattern, positiveBigInt())),\n negative: () => bigintChainable(intersection(pattern, negativeBigInt())),\n }) as any;\n\n/**\n * `P.bigint` is a wildcard pattern, matching any **bigint**.\n *\n * [Read the documentation for `P.bigint` on GitHub](https://github.com/gvergnaud/ts-pattern#number-wildcard)\n *\n * @example\n * .with(P.bigint, () => 'will match on bigints')\n */\nexport const bigint: BigIntPattern = bigintChainable(when(isBigInt));\n\n/**\n * `P.boolean` is a wildcard pattern, matching any **boolean**.\n *\n * [Read the documentation for `P.boolean` on GitHub](https://github.com/gvergnaud/ts-pattern#boolean-wildcard)\n *\n * @example\n * .with(P.boolean, () => 'will match on booleans')\n */\nexport const boolean: BooleanPattern = chainable(when(isBoolean));\n\n/**\n * `P.symbol` is a wildcard pattern, matching any **symbol**.\n *\n * [Read the documentation for `P.symbol` on GitHub](https://github.com/gvergnaud/ts-pattern#symbol-wildcard)\n *\n * @example\n * .with(P.symbol, () => 'will match on symbols')\n */\nexport const symbol: SymbolPattern = chainable(when(isSymbol));\n\n/**\n * `P.nullish` is a wildcard pattern, matching **null** or **undefined**.\n *\n * [Read the documentation for `P.nullish` on GitHub](https://github.com/gvergnaud/ts-pattern#nullish-wildcard)\n *\n * @example\n * .with(P.nullish, (x) => `${x} is null or undefined`)\n */\nexport const nullish: NullishPattern = chainable(when(isNullish));\n\n/**\n * `P.nonNullable` is a wildcard pattern, matching everything except **null** or **undefined**.\n *\n * [Read the documentation for `P.nonNullable` on GitHub](https://github.com/gvergnaud/ts-pattern#nonNullable-wildcard)\n *\n * @example\n * .with(P.nonNullable, (x) => `${x} isn't null nor undefined`)\n */\nexport const nonNullable: NonNullablePattern = chainable(when(isNonNullable));\n\n/**\n * `P.instanceOf(SomeClass)` is a pattern matching instances of a given class.\n *\n * [Read the documentation for `P.instanceOf` on GitHub](https://github.com/gvergnaud/ts-pattern#pinstanceof-patterns)\n *\n * @example\n * .with(P.instanceOf(SomeClass), () => 'will match on SomeClass instances')\n */\nexport function instanceOf<T extends AnyConstructor>(\n classConstructor: T\n): Chainable<GuardP<unknown, InstanceType<T>>> {\n return chainable(when(isInstanceOf(classConstructor)));\n}\n\n/**\n * `P.shape(somePattern)` lets you call methods like `.optional()`, `.and`, `.or` and `.select()`\n * On structural patterns, like objects and arrays.\n *\n * [Read the documentation for `P.shape` on GitHub](https://github.com/gvergnaud/ts-pattern#pshape-patterns)\n *\n * @example\n * .with(\n * {\n * state: P.shape({ status: \"success\" }).optional().select()\n * },\n * (state) => 'match the success state, or undefined.'\n * )\n */\nexport function shape<input, const pattern extends Pattern<input>>(\n pattern: pattern\n): Chainable<GuardP<input, InvertPattern<pattern, input>>>;\nexport function shape(pattern: UnknownValuePattern) {\n return chainable(when(isMatching(pattern)));\n}\n","/**\n * Error when the given input value does not match any included pattern\n * and .exhaustive() was specified\n */\nexport class NonExhaustiveError extends Error {\n constructor(public input: unknown) {\n let displayedValue;\n try {\n displayedValue = JSON.stringify(input);\n } catch (e) {\n displayedValue = input;\n }\n super(`Pattern matching error: no pattern matches value ${displayedValue}`);\n }\n}\n","import { Pattern } from './types/Pattern';\nimport { Match } from './types/Match';\nimport * as symbols from './internals/symbols';\nimport { matchPattern } from './internals/helpers';\nimport { NonExhaustiveError } from './errors';\n\ntype MatchState<output> =\n | { matched: true; value: output }\n | { matched: false; value: undefined };\n\nconst unmatched: MatchState<never> = {\n matched: false,\n value: undefined,\n};\n\n/**\n * `match` creates a **pattern matching expression**.\n * * Use `.with(pattern, handler)` to pattern match on the input.\n * * Use `.exhaustive()` or `.otherwise(() => defaultValue)` to end the expression and get the result.\n *\n * [Read the documentation for `match` on GitHub](https://github.com/gvergnaud/ts-pattern#match)\n *\n * @example\n * declare let input: \"A\" | \"B\";\n *\n * return match(input)\n * .with(\"A\", () => \"It's an A!\")\n * .with(\"B\", () => \"It's a B!\")\n * .exhaustive();\n *\n */\nexport function match<const input, output = symbols.unset>(\n value: input\n): Match<input, output> {\n return new MatchExpression(value, unmatched) as any;\n}\n\n/**\n * This class represents a match expression. It follows the\n * builder pattern, we chain methods to add features to the expression\n * until we call `.exhaustive`, `.otherwise` or the unsafe `.run`\n * method to execute it.\n *\n * The types of this class aren't public, the public type definition\n * can be found in src/types/Match.ts.\n */\nclass MatchExpression<input, output> {\n constructor(private input: input, private state: MatchState<output>) {}\n\n with(...args: any[]): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const handler: (selection: unknown, value: input) => output =\n args[args.length - 1];\n\n const patterns: Pattern<input>[] = [args[0]];\n let predicate: ((value: input) => unknown) | undefined = undefined;\n\n if (args.length === 3 && typeof args[1] === 'function') {\n // case with guard as second argument\n predicate = args[1];\n } else if (args.length > 2) {\n // case with several patterns\n patterns.push(...args.slice(1, args.length - 1));\n }\n\n let hasSelections = false;\n let selected: Record<string, unknown> = {};\n const select = (key: string, value: unknown) => {\n hasSelections = true;\n selected[key] = value;\n };\n\n const matched =\n patterns.some((pattern) => matchPattern(pattern, this.input, select)) &&\n (predicate ? Boolean(predicate(this.input)) : true);\n\n const selections = hasSelections\n ? symbols.anonymousSelectKey in selected\n ? selected[symbols.anonymousSelectKey]\n : selected\n : this.input;\n\n const state = matched\n ? {\n matched: true as const,\n value: handler(selections, this.input),\n }\n : unmatched;\n\n return new MatchExpression(this.input, state);\n }\n\n when(\n predicate: (value: input) => unknown,\n handler: (selection: input, value: input) => output\n ): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const matched = Boolean(predicate(this.input));\n\n return new MatchExpression<input, output>(\n this.input,\n matched\n ? { matched: true, value: handler(this.input, this.input) }\n : unmatched\n );\n }\n\n otherwise(handler: (value: input) => output): output {\n if (this.state.matched) return this.state.value;\n return handler(this.input);\n }\n\n exhaustive(unexpectedValueHandler = defaultCatcher): output {\n if (this.state.matched) return this.state.value;\n return unexpectedValueHandler(this.input);\n }\n\n run(): output {\n return this.exhaustive();\n }\n\n returnType() {\n return this;\n }\n\n narrow() {\n return this;\n }\n}\n\nfunction defaultCatcher(input: unknown): never {\n throw new NonExhaustiveError(input);\n}\n"],"names":["matcher","Symbol","isVariadic","anonymousSelectKey","isObject","value","Boolean","isMatcher","x","symbols","matchPattern","pattern","select","_matcher$match","match","matched","selections","Object","keys","forEach","key","Array","isArray","_step","startPatterns","endPatterns","variadicPatterns","_iterator","_createForOfIteratorHelperLoose","done","subpattern","push","length","Error","startValues","slice","endValues","middleValues","Infinity","every","subPattern","i","Reflect","ownKeys","k","matcherType","is","getSelectionKeys","_pattern$symbols$matc","_pattern$symbols$matc2","_pattern$symbols$matc3","call","flatMap","values","xs","f","reduce","acc","concat","isMatching","args","arguments","chainable","assign","optional","and","p2","intersection","or","union","undefined","arrayChainable","_Object$assign2","iterator","_Object$assign","next","_values$i","at","variadic","_chainable","selector","setEvery","set","predicate","mapEvery","map","_step2","_iterator2","entries","_step2$value","recordEvery","record","_step3","_iterator3","_chainable5","patterns","p","_chainable6","some","when","_ref2","_chainable8","_selections","isUnknown","isNumber","isString","isBigInt","any","unknown","_","string","stringChainable","startsWith","str","start","endsWith","end","minLength","min","len","maxLength","max","includes","substr","regex","expr","number","numberChainable","between","lt","gt","lte","gte","int","Number","isInteger","finite","isFinite","positive","negative","bigint","bigintChainable","betweenBigInt","ltBigInt","gtBigInt","lteBigInt","gteBigInt","boolean","symbol","nullish","nonNullable","_arrayChainable","v","_chainable2","Set","size","_chainable3","Map","_args$","toString","patternKey","patternValue","keyMatch","valueMatch","_chainable4","_args$2","_ref","coercedKey","isNaN","coercedKeyMatch","_chainable7","classConstructor","val","isInstanceOf","NonExhaustiveError","_Error","input","_this","displayedValue","JSON","stringify","e","this","_wrapNativeSuper","unmatched","MatchExpression","state","_proto","prototype","handler","apply","hasSelections","selected","otherwise","exhaustive","unexpectedValueHandler","defaultCatcher","run","returnType","narrow"],"mappings":"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"}
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
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],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&"optional"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:"optional"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:"and"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:"or"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...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 a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return"number"==typeof t}function S(t){return"string"==typeof t}function j(t){return"bigint"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return"boolean"==typeof t})),_=a(p(function(t){return"symbol"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[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 s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[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:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[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[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||"object"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\`P.record\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n="string"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:"not"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{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]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/internals/symbols.ts","../src/internals/helpers.ts","../src/is-matching.ts","../src/patterns.ts","../src/errors.ts","../src/match.ts"],"sourcesContent":["/**\n * Symbols used internally within ts-pattern to construct and discriminate\n * Guard, Not, and Select, and AnonymousSelect patterns\n *\n * Symbols have the advantage of not appearing in auto-complete suggestions in\n * user defined patterns, and eliminate the risk of property\n * overlap between ts-pattern internals and user defined patterns.\n *\n * These symbols have to be visible to tsc for type inference to work, but\n * users should not import them\n * @module\n * @private\n * @internal\n */\n\nexport const matcher = Symbol.for('@ts-pattern/matcher');\nexport type matcher = typeof matcher;\n\nexport const unset = Symbol.for('@ts-pattern/unset');\nexport type unset = typeof unset;\n\nexport const isVariadic = Symbol.for('@ts-pattern/isVariadic');\nexport type isVariadic = typeof isVariadic;\n\n// can't be a symbol because this key has to be enumerable.\nexport const anonymousSelectKey = '@ts-pattern/anonymous-select-key';\nexport type anonymousSelectKey = typeof anonymousSelectKey;\n\nexport const override = Symbol.for('@ts-pattern/override');\nexport type override = typeof override;\n","/**\n * @module\n * @private\n * @internal\n */\n\nimport * as symbols from './symbols';\nimport { SelectionType } from '../types/FindSelected';\nimport { Pattern, Matcher, MatcherType, AnyMatcher } from '../types/Pattern';\n\n// @internal\nexport const isObject = (value: unknown): value is Object =>\n Boolean(value && typeof value === 'object');\n\n// @internal\nexport const isMatcher = (\n x: unknown\n): x is Matcher<unknown, unknown, MatcherType, SelectionType> => {\n const pattern = x as Matcher<unknown, unknown, MatcherType, SelectionType>;\n return pattern && !!pattern[symbols.matcher];\n};\n\n// @internal\nconst isOptionalPattern = (\n x: unknown\n): x is Matcher<unknown, unknown, 'optional', SelectionType> => {\n return isMatcher(x) && x[symbols.matcher]().matcherType === 'optional';\n};\n\n// tells us if the value matches a given pattern.\n// @internal\nexport const matchPattern = (\n pattern: any,\n value: any,\n select: (key: string, value: unknown) => void\n): boolean => {\n if (isMatcher(pattern)) {\n const matcher = pattern[symbols.matcher]();\n const { matched, selections } = matcher.match(value);\n if (matched && selections) {\n Object.keys(selections).forEach((key) => select(key, selections[key]));\n }\n return matched;\n }\n\n if (isObject(pattern)) {\n if (!isObject(value)) return false;\n\n // Tuple pattern\n if (Array.isArray(pattern)) {\n if (!Array.isArray(value)) return false;\n let startPatterns = [];\n let endPatterns = [];\n let variadicPatterns: AnyMatcher[] = [];\n\n for (const i of pattern.keys()) {\n const subpattern = pattern[i];\n if (isMatcher(subpattern) && subpattern[symbols.isVariadic]) {\n variadicPatterns.push(subpattern);\n } else if (variadicPatterns.length) {\n endPatterns.push(subpattern);\n } else {\n startPatterns.push(subpattern);\n }\n }\n\n if (variadicPatterns.length) {\n if (variadicPatterns.length > 1) {\n throw new Error(\n `Pattern error: Using \\`...P.array(...)\\` several times in a single pattern is not allowed.`\n );\n }\n\n if (value.length < startPatterns.length + endPatterns.length) {\n return false;\n }\n\n const startValues = value.slice(0, startPatterns.length);\n const endValues =\n endPatterns.length === 0 ? [] : value.slice(-endPatterns.length);\n const middleValues = value.slice(\n startPatterns.length,\n endPatterns.length === 0 ? Infinity : -endPatterns.length\n );\n\n return (\n startPatterns.every((subPattern, i) =>\n matchPattern(subPattern, startValues[i], select)\n ) &&\n endPatterns.every((subPattern, i) =>\n matchPattern(subPattern, endValues[i], select)\n ) &&\n (variadicPatterns.length === 0\n ? true\n : matchPattern(variadicPatterns[0], middleValues, select))\n );\n }\n\n return pattern.length === value.length\n ? pattern.every((subPattern, i) =>\n matchPattern(subPattern, value[i], select)\n )\n : false;\n }\n\n return Reflect.ownKeys(pattern).every((k): boolean => {\n const subPattern = pattern[k];\n\n return (\n (k in value || isOptionalPattern(subPattern)) &&\n matchPattern(subPattern, value[k], select)\n );\n });\n }\n\n return Object.is(value, pattern);\n};\n\n// @internal\nexport const getSelectionKeys = (pattern: any): string[] => {\n if (isObject(pattern)) {\n if (isMatcher(pattern)) {\n return pattern[symbols.matcher]().getSelectionKeys?.() ?? [];\n }\n if (Array.isArray(pattern)) return flatMap(pattern, getSelectionKeys);\n return flatMap(Object.values(pattern), getSelectionKeys);\n }\n return [];\n};\n\n// @internal\nexport const flatMap = <a, b>(\n xs: readonly a[],\n f: (v: a) => readonly b[]\n): b[] => xs.reduce<b[]>((acc, x) => acc.concat(f(x)), []);\n","import { MatchedValue, Pattern, UnknownProperties } from './types/Pattern';\nimport * as P from './patterns';\nimport { matchPattern } from './internals/helpers';\nimport { WithDefault } from './types/helpers';\n\n/**\n * This constraint allows using additional properties\n * in object patterns. See \"should allow targetting unknown properties\"\n * unit test in `is-matching.test.ts`.\n */\ntype PatternConstraint<T> = T extends readonly any[]\n ? P.Pattern<T>\n : T extends object\n ? P.Pattern<T> & UnknownProperties\n : P.Pattern<T>;\n\n/**\n * `isMatching` takes pattern and returns a **type guard** function, cheching if a value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * const hasName = isMatching({ name: P.string })\n *\n * declare let input: unknown\n *\n * if (hasName(input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const p extends Pattern<unknown>>(\n pattern: p\n): (value: unknown) => value is P.infer<p>;\n/**\n * `isMatching` takes pattern and a value and checks if the value matches this pattern.\n *\n * [Read documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n * declare let input: unknown\n *\n * if (isMatching({ name: P.string }, input)) {\n * // `input` inferred as { name: string }\n * return input.name\n * }\n */\nexport function isMatching<const T, const P extends PatternConstraint<T>>(\n pattern: P,\n value: T\n): value is T & WithDefault<P.narrow<T, P>, P.infer<P>>;\n\nexport function isMatching<const p extends Pattern<any>>(\n ...args: [pattern: p, value?: any]\n): boolean | ((vale: any) => boolean) {\n if (args.length === 1) {\n const [pattern] = args;\n return (value: any): value is MatchedValue<any, P.infer<p>> =>\n matchPattern(pattern, value, () => {});\n }\n if (args.length === 2) {\n const [pattern, value] = args;\n return matchPattern(pattern, value, () => {});\n }\n\n throw new Error(\n `isMatching wasn't given the right number of arguments: expected 1 or 2, received ${args.length}.`\n );\n}\n","/**\n * The `P` module contains patterns for primitive types, wildcards and\n * other pattern-matching utilities.\n *\n * @module\n */\n\nimport { matchPattern, getSelectionKeys, flatMap } from './internals/helpers';\nimport * as symbols from './internals/symbols';\nimport { matcher } from './internals/symbols';\nimport { isMatching } from './is-matching';\nimport { ExtractPreciseValue } from './types/ExtractPreciseValue';\nimport { Fn } from './types/helpers';\nimport { InvertPattern } from './types/InvertPattern';\nimport {\n Pattern,\n UnknownValuePattern,\n OptionalP,\n ArrayP,\n MapP,\n SetP,\n AndP,\n OrP,\n NotP,\n GuardP,\n SelectP,\n AnonymousSelectP,\n GuardExcludeP,\n CustomP,\n Matcher,\n StringPattern,\n UnknownPattern,\n NumberPattern,\n BooleanPattern,\n BigIntPattern,\n NullishPattern,\n SymbolPattern,\n Chainable,\n BigIntChainable,\n NumberChainable,\n StringChainable,\n ArrayChainable,\n Variadic,\n NonNullablePattern,\n RecordP,\n} from './types/Pattern';\n\nexport type {\n /**\n * `Pattern<T>` is the type of all patterns\n * that can match a value of type `T`.\n */\n Pattern,\n\n /**\n * `unstable_Fn` can be used to created a\n * a Matchable instance – a custom type that\n * can be used as a pattern.\n *\n * @experimental This feature is unstable.\n */\n Fn as unstable_Fn,\n};\n\nexport { matcher };\n\n/**\n * A `Matchable` is an object implementing\n * the Matcher Protocol. It must have a `[P.matcher]: P.Matcher<NarrowFn>`\n * key, which defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matchable<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = CustomP<input, pattern, narrowedOrFn>;\n\n/**\n * A `Matcher` is an object with `match` function, which\n * defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n * [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matcher<\n narrowedOrFn,\n input = unknown,\n pattern = never\n> = ReturnType<CustomP<input, pattern, narrowedOrFn>[matcher]>;\n\n/**\n * `P.infer<typeof somePattern>` will return the type of the value\n * matched by this pattern.\n *\n * [Read the documentation for `P.infer` on GitHub](https://github.com/gvergnaud/ts-pattern#pinfer)\n *\n * @example\n * const userPattern = { name: P.string }\n * type User = P.infer<typeof userPattern>\n */\nexport type infer<pattern> = InvertPattern<NoInfer<pattern>, unknown>;\n\n/**\n * `P.narrow<Input, Pattern>` will narrow the input type to only keep\n * the set of values that are compatible with the provided pattern type.\n *\n * [Read the documentation for `P.narrow` on GitHub](https://github.com/gvergnaud/ts-pattern#pnarrow)\n *\n * @example\n * type Input = ['a' | 'b' | 'c', 'a' | 'b' | 'c']\n * const Pattern = ['a', P.union('a', 'b')] as const\n *\n * type Narrowed = P.narrow<Input, typeof Pattern>\n * // ^? ['a', 'a' | 'b']\n */\nexport type narrow<input, pattern> = ExtractPreciseValue<\n input,\n InvertPattern<pattern, input>\n>;\n\nfunction chainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): Chainable<pattern> {\n return Object.assign(pattern, {\n optional: () => optional(pattern),\n and: (p2: any) => intersection(pattern, p2),\n or: (p2: any) => union(pattern, p2),\n select: (key: any) =>\n key === undefined ? select(pattern) : select(key, pattern),\n }) as Chainable<pattern>;\n}\n\nconst variadic = <pattern extends {}>(pattern: pattern): Variadic<pattern> =>\n Object.assign(pattern, {\n [Symbol.iterator](): Iterator<pattern, void, undefined> {\n let i = 0;\n const variadicPattern = Object.assign(pattern, {\n [symbols.isVariadic]: true,\n });\n const values: IteratorResult<pattern, void>[] = [\n { value: variadicPattern, done: false },\n { done: true, value: undefined },\n ];\n return {\n next: () => values[i++] ?? values.at(-1)!,\n };\n },\n });\n\nfunction arrayChainable<pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): ArrayChainable<pattern> {\n return Object.assign(variadic(pattern), {\n optional: () => arrayChainable(optional(pattern)),\n select: (key: any) =>\n arrayChainable(\n key === undefined ? select(pattern) : select(key, pattern)\n ),\n }) as any;\n}\n\n/**\n * `P.optional(subpattern)` takes a sub pattern and returns a pattern which matches if the\n * key is undefined or if it is defined and the sub pattern matches its value.\n *\n * [Read the documentation for `P.optional` on GitHub](https://github.com/gvergnaud/ts-pattern#poptional-patterns)\n *\n * @example\n * match(value)\n * .with({ greeting: P.optional('Hello') }, () => 'will match { greeting?: \"Hello\" }')\n */\nexport function optional<\n input,\n const pattern extends unknown extends input\n ? UnknownValuePattern\n : Pattern<input>\n>(pattern: pattern): Chainable<OptionalP<input, pattern>, 'optional'> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n if (value === undefined) {\n getSelectionKeys(pattern).forEach((key) =>\n selector(key, undefined)\n );\n return { matched: true, selections };\n }\n const matched = matchPattern(pattern, value, selector);\n return { matched, selections };\n },\n getSelectionKeys: () => getSelectionKeys(pattern),\n matcherType: 'optional',\n };\n },\n });\n}\n\ntype UnwrapArray<xs> = xs extends readonly (infer x)[] ? x : never;\n\ntype UnwrapSet<xs> = xs extends Set<infer x> ? x : never;\n\ntype UnwrapMapKey<xs> = xs extends Map<infer k, any> ? k : never;\n\ntype UnwrapMapValue<xs> = xs extends Map<any, infer v> ? v : never;\n\ntype UnwrapRecordKey<xs> = xs extends Record<infer k, any> ? k : never;\n\ntype UnwrapRecordValue<xs> = xs extends Record<any, infer v> ? v : never;\n\ntype WithDefault<a, b> = [a] extends [never] ? b : a;\n\n/**\n * `P.array(subpattern)` takes a sub pattern and returns a pattern, which matches\n * arrays if all their elements match the sub pattern.\n *\n * [Read the documentation for `P.array` on GitHub](https://github.com/gvergnaud/ts-pattern#parray-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.array({ name: P.string }) }, () => 'will match { name: string }[]')\n */\nexport function array<input>(): ArrayChainable<ArrayP<input, unknown>>;\nexport function array<\n input,\n const pattern extends Pattern<WithDefault<UnwrapArray<input>, unknown>>\n>(pattern: pattern): ArrayChainable<ArrayP<input, pattern>>;\nexport function array(\n ...args: [pattern?: any]\n): ArrayChainable<ArrayP<any, any>> {\n return arrayChainable({\n [matcher]() {\n return {\n match: (value: any) => {\n if (!Array.isArray(value)) return { matched: false };\n\n if (args.length === 0) return { matched: true };\n\n const pattern = args[0];\n let selections: Record<string, unknown[]> = {};\n\n if (value.length === 0) {\n getSelectionKeys(pattern).forEach((key) => {\n selections[key] = [];\n });\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const matched = value.every((v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\n/**\n * `P.set(subpattern)` takes a sub pattern and returns a pattern that matches\n * sets if all their elements match the sub pattern.\n *\n * [Read `P.set` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pset-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.set(P.string) }, () => 'will match Set<string>')\n */\nexport function set<input>(): Chainable<SetP<input, unknown>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(pattern: pattern): Chainable<SetP<input, pattern>>;\nexport function set<\n input,\n const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(...args: [pattern?: pattern]): Chainable<SetP<input, pattern>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Set)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n if (args.length === 0) return { matched: true };\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const pattern = args[0];\n\n const matched = setEvery(value, (v) =>\n matchPattern(pattern, v, selector)\n );\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0 ? [] : getSelectionKeys(args[0]),\n };\n },\n });\n}\n\nconst setEvery = <T>(set: Set<T>, predicate: (value: T) => boolean) => {\n for (const value of set) {\n if (predicate(value)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.map(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on maps where all elements inside the map match those two\n * subpatterns.\n *\n * [Read `P.map` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pmap-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.map(P.map(P.string, P.number)) }, (map) => `map's type is Map<string, number>`)\n */\nexport function map<input>(): Chainable<MapP<input, unknown, unknown>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(patternKey: pkey, patternValue: pvalue): Chainable<MapP<input, pkey, pvalue>>;\nexport function map<\n input,\n const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(\n ...args: [patternKey?: pkey, patternValue?: pvalue]\n): Chainable<MapP<input, pkey, pvalue>> {\n return chainable({\n [matcher]() {\n return {\n match: <UnknownInput>(value: UnknownInput | input) => {\n if (!(value instanceof Map)) return { matched: false };\n\n let selections: Record<string, unknown[]> = {};\n\n if (value.size === 0) {\n return { matched: true, selections };\n }\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n if (args.length === 0) return { matched: true };\n if (args.length === 1) {\n throw new Error(\n `\\`P.map\\` wasn\\'t given enough arguments. Expected (key, value), received ${args[0]?.toString()}`\n );\n }\n const [patternKey, patternValue] = args;\n\n const matched = mapEvery(value, (v, k) => {\n const keyMatch = matchPattern(patternKey, k, selector);\n const valueMatch = matchPattern(patternValue, v, selector);\n return keyMatch && valueMatch;\n });\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0\n ? []\n : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n };\n },\n });\n}\n\nconst mapEvery = <K, T>(\n map: Map<K, T>,\n predicate: (value: T, key: K) => boolean\n) => {\n for (const [key, value] of map.entries()) {\n if (predicate(value, key)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.record(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on objects where all entries match those two\n * subpatterns.\n *\n * [Read `P.record` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#precord-patterns)\n *\n * @example\n * match(value)\n * .with({ users: P.record(P.string, P.number) }, (obj) => `object's type is Record<string, number>`)\n */\nexport function record<\n input,\n const pvalue extends Pattern<UnwrapRecordValue<input>>\n>(patternValue: pvalue): Chainable<RecordP<input, StringPattern, pvalue>>;\nexport function record<\n input,\n const pkey extends Pattern<WithDefault<UnwrapRecordKey<input>, PropertyKey>>,\n const pvalue extends Pattern<WithDefault<UnwrapRecordValue<input>, unknown>>\n>(\n patternKey: pkey,\n patternValue?: pvalue\n): Chainable<RecordP<input, pkey, pvalue>>;\nexport function record(\n ...args: [patternKey?: unknown, patternValue?: unknown]\n): Chainable<RecordP<unknown, unknown, unknown>> {\n return chainable({\n [matcher]() {\n return {\n match: (value: unknown) => {\n if (\n value === null ||\n typeof value !== 'object' ||\n Array.isArray(value)\n ) {\n return { matched: false };\n }\n\n if (args.length === 0) {\n throw new Error(\n `\\`P.record\\` wasn\\'t given enough arguments. Expected (value) or (key, value), received ${args[0]?.toString()}`\n );\n }\n\n let selections: Record<string, unknown[]> = {};\n\n const selector = (key: string, value: unknown) => {\n selections[key] = (selections[key] || []).concat([value]);\n };\n\n const [patternKey, patternValue] =\n args.length === 1 ? [string, args[0]] : args;\n\n const matched = recordEvery(value, (k, v) => {\n // since number keys are coerced to strings, we need to coerce them back to numbers if the pattern is `number`\n const coercedKey =\n typeof k === 'string' && !Number.isNaN(Number(k))\n ? Number(k)\n : null;\n\n const coercedKeyMatch =\n coercedKey !== null\n ? matchPattern(patternKey, coercedKey, selector)\n : false;\n\n const keyMatch = matchPattern(patternKey, k, selector);\n\n const valueMatch = matchPattern(patternValue, v, selector);\n\n return (keyMatch || coercedKeyMatch) && valueMatch;\n });\n\n return { matched, selections };\n },\n getSelectionKeys: () =>\n args.length === 0\n ? []\n : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n };\n },\n });\n}\n\nconst recordEvery = <K extends PropertyKey, T>(\n record: Record<K, T>,\n predicate: (key: K, value: T) => boolean\n) => {\n const keys = Reflect.ownKeys(record);\n for (const key of keys) {\n if (predicate(key as K, record[key as K] as T)) continue;\n return false;\n }\n return true;\n};\n\n/**\n * `P.intersection(...patterns)` returns a pattern which matches\n * only if **every** patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.intersection` on GitHub](https://github.com/gvergnaud/ts-pattern#pintersection-patterns)\n *\n * @example\n * match(value)\n * .with(\n * {\n * user: P.intersection(\n * { firstname: P.string },\n * { lastname: P.string },\n * { age: P.when(age => age > 21) }\n * )\n * },\n * ({ user }) => 'will match { firstname: string, lastname: string, age: number } if age > 21'\n * )\n */\nexport function intersection<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<AndP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: (value) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n const matched = (patterns as readonly UnknownValuePattern[]).every(\n (p) => matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n matcherType: 'and',\n }),\n });\n}\n\n/**\n * `P.union(...patterns)` returns a pattern which matches\n * if **at least one** of the patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.union` on GitHub](https://github.com/gvergnaud/ts-pattern#punion-patterns)\n *\n * @example\n * match(value)\n * .with(\n * { type: P.union('a', 'b', 'c') },\n * ({ type }) => 'will match { type: \"a\" | \"b\" | \"c\" }'\n * )\n */\nexport function union<\n input,\n const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<OrP<input, patterns>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => {\n let selections: Record<string, unknown[]> = {};\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n flatMap(\n patterns as readonly UnknownValuePattern[],\n getSelectionKeys\n ).forEach((key) => selector(key, undefined));\n const matched = (patterns as readonly UnknownValuePattern[]).some((p) =>\n matchPattern(p, value, selector)\n );\n return { matched, selections };\n },\n getSelectionKeys: () =>\n flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n matcherType: 'or',\n }),\n });\n}\n\n/**\n * `P.not(pattern)` returns a pattern which matches if the sub pattern\n * doesn't match.\n *\n * [Read the documentation for `P.not` on GitHub](https://github.com/gvergnaud/ts-pattern#pnot-patterns)\n *\n * @example\n * match<{ a: string | number }>(value)\n * .with({ a: P.not(P.string) }, (x) => 'will match { a: number }'\n * )\n */\n\nexport function not<\n input,\n const pattern extends Pattern<input> | UnknownValuePattern\n>(pattern: pattern): Chainable<NotP<input, pattern>> {\n return chainable({\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: !matchPattern(pattern, value, () => {}),\n }),\n getSelectionKeys: () => [],\n matcherType: 'not',\n }),\n });\n}\n\n/**\n * `P.when((value) => boolean)` returns a pattern which matches\n * if the predicate returns true for the current input.\n *\n * [Read the documentation for `P.when` on GitHub](https://github.com/gvergnaud/ts-pattern#pwhen-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.when(age => age > 21) }, (x) => 'will match if value.age > 21'\n * )\n */\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n>;\nexport function when<input, narrowed extends input, excluded>(\n predicate: (input: input) => input is narrowed\n): GuardExcludeP<input, narrowed, excluded>;\nexport function when<input, predicate extends (value: input) => unknown>(\n predicate: predicate\n): GuardP<\n input,\n predicate extends (value: any) => value is infer narrowed ? narrowed : never\n> {\n return {\n [matcher]: () => ({\n match: <UnknownInput>(value: UnknownInput | input) => ({\n matched: Boolean(predicate(value as input)),\n }),\n }),\n };\n}\n\n/**\n * `P.select()` is a pattern which will always match,\n * and will inject the selected piece of input in the handler function.\n *\n * [Read the documentation for `P.select` on GitHub](https://github.com/gvergnaud/ts-pattern#pselect-patterns)\n *\n * @example\n * match<{ age: number }>(value)\n * .with({ age: P.select() }, (age) => 'age: number'\n * )\n */\nexport function select(): Chainable<AnonymousSelectP, 'select' | 'or' | 'and'>;\nexport function select<\n input,\n const patternOrKey extends\n | string\n | (unknown extends input ? UnknownValuePattern : Pattern<input>)\n>(\n patternOrKey: patternOrKey\n): patternOrKey extends string\n ? Chainable<SelectP<patternOrKey, 'select' | 'or' | 'and'>>\n : Chainable<\n SelectP<symbols.anonymousSelectKey, input, patternOrKey>,\n 'select' | 'or' | 'and'\n >;\nexport function select<\n input,\n const pattern extends unknown extends input\n ? UnknownValuePattern\n : Pattern<input>,\n const k extends string\n>(\n key: k,\n pattern: pattern\n): Chainable<SelectP<k, input, pattern>, 'select' | 'or' | 'and'>;\nexport function select(\n ...args: [keyOrPattern?: unknown | string, pattern?: unknown]\n): Chainable<SelectP<string>, 'select' | 'or' | 'and'> {\n const key: string | undefined =\n typeof args[0] === 'string' ? args[0] : undefined;\n const pattern: unknown =\n args.length === 2\n ? args[1]\n : typeof args[0] === 'string'\n ? undefined\n : args[0];\n return chainable({\n [matcher]() {\n return {\n match: (value) => {\n let selections: Record<string, unknown> = {\n [key ?? symbols.anonymousSelectKey]: value,\n };\n const selector = (key: string, value: any) => {\n selections[key] = value;\n };\n return {\n matched:\n pattern === undefined\n ? true\n : matchPattern(pattern, value, selector),\n selections: selections,\n };\n },\n getSelectionKeys: () =>\n [key ?? symbols.anonymousSelectKey].concat(\n pattern === undefined ? [] : getSelectionKeys(pattern)\n ),\n };\n },\n });\n}\n\nfunction isUnknown(x: unknown): x is unknown {\n return true;\n}\n\nfunction isNumber<T>(x: T | number): x is number {\n return typeof x === 'number';\n}\n\nfunction isString<T>(x: T | string): x is string {\n return typeof x === 'string';\n}\n\nfunction isBoolean<T>(x: T | boolean): x is boolean {\n return typeof x === 'boolean';\n}\n\nfunction isBigInt<T>(x: T | bigint): x is bigint {\n return typeof x === 'bigint';\n}\n\nfunction isSymbol<T>(x: T | symbol): x is symbol {\n return typeof x === 'symbol';\n}\n\nfunction isNullish<T>(x: T | null | undefined): x is null | undefined {\n return x === null || x === undefined;\n}\n\nfunction isNonNullable(x: unknown): x is {} {\n return x !== null && x !== undefined;\n}\n\ntype AnyConstructor = abstract new (...args: any[]) => any;\n\nfunction isInstanceOf<T extends AnyConstructor>(classConstructor: T) {\n return (val: unknown): val is InstanceType<T> =>\n val instanceof classConstructor;\n}\n\n/**\n * `P.any` is a wildcard pattern, matching **any value**.\n *\n * [Read the documentation for `P.any` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P.any, () => 'will always match')\n */\nexport const any: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P.unknown` is a wildcard pattern, matching **unknown value**.\n *\n * [Read the documentation for `P.unknown` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P.unknown, () => 'will always match')\n */\nexport const unknown: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P._` is a wildcard pattern, matching **any value**.\n * It's an alias to `P.any`.\n *\n * [Read the documentation for `P._` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n * match(value)\n * .with(P._, () => 'will always match')\n */\nexport const _ = any;\n\n/**\n * `P.string.startsWith(start)` is a pattern, matching **strings** starting with `start`.\n *\n * [Read the documentation for `P.string.startsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringstartsWith)\n *\n * @example\n * match(value)\n * .with(P.string.startsWith('A'), () => 'value starts with an A')\n */\n\nconst startsWith = <input, const start extends string>(\n start: start\n): GuardP<input, `${start}${string}`> =>\n when((value) => isString(value) && value.startsWith(start));\n\n/**\n * `P.string.endsWith(end)` is a pattern, matching **strings** ending with `end`.\n *\n * [Read the documentation for `P.string.endsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringendsWith)\n *\n * @example\n * match(value)\n * .with(P.string.endsWith('!'), () => 'value ends with an !')\n */\nconst endsWith = <input, const end extends string>(\n end: end\n): GuardP<input, `${string}${end}`> =>\n when((value) => isString(value) && value.endsWith(end));\n\n/**\n * `P.string.minLength(min)` is a pattern, matching **strings** with at least `min` characters.\n *\n * [Read the documentation for `P.string.minLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringminLength)\n *\n * @example\n * match(value)\n * .with(P.string.minLength(10), () => 'string with more length >= 10')\n */\nconst minLength = <const min extends number>(min: min) =>\n when((value) => isString(value) && value.length >= min);\n\n/**\n * `P.string.length(len)` is a pattern, matching **strings** with exactly `len` characters.\n *\n * [Read the documentation for `P.string.length` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringlength)\n *\n * @example\n * match(value)\n * .with(P.string.length(10), () => 'strings with length === 10')\n */\nconst length = <const len extends number>(len: len) =>\n when((value) => isString(value) && value.length === len);\n\n/**\n * `P.string.maxLength(max)` is a pattern, matching **strings** with at most `max` characters.\n *\n * [Read the documentation for `P.string.maxLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringmaxLength)\n *\n * @example\n * match(value)\n * .with(P.string.maxLength(10), () => 'string with more length <= 10')\n */\nconst maxLength = <const max extends number>(max: max) =>\n when((value) => isString(value) && value.length <= max);\n\n/**\n * `P.string.includes(substr)` is a pattern, matching **strings** containing `substr`.\n *\n * [Read the documentation for `P.string.includes` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringincludes)\n *\n * @example\n * match(value)\n * .with(P.string.includes('http'), () => 'value contains http')\n */\nconst includes = <input, const substr extends string>(\n substr: substr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && value.includes(substr));\n\n/**\n * `P.string.regex(expr)` is a pattern, matching **strings** that `expr` regular expression.\n *\n * [Read the documentation for `P.string.regex` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringregex)\n *\n * @example\n * match(value)\n * .with(P.string.regex(/^https?:\\/\\//), () => 'url')\n */\nconst regex = <input, const expr extends string | RegExp>(\n expr: expr\n): GuardExcludeP<input, string, never> =>\n when((value) => isString(value) && Boolean(value.match(expr)));\n\nconst stringChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): StringChainable<pattern> =>\n Object.assign(chainable(pattern), {\n startsWith: (str: string) =>\n stringChainable(intersection(pattern, startsWith(str))),\n endsWith: (str: string) =>\n stringChainable(intersection(pattern, endsWith(str))),\n minLength: (min: number) =>\n stringChainable(intersection(pattern, minLength(min))),\n length: (len: number) =>\n stringChainable(intersection(pattern, length(len))),\n maxLength: (max: number) =>\n stringChainable(intersection(pattern, maxLength(max))),\n includes: (str: string) =>\n stringChainable(intersection(pattern, includes(str))),\n regex: (str: string) => stringChainable(intersection(pattern, regex(str))),\n }) as any;\n\n/**\n * `P.string` is a wildcard pattern, matching any **string**.\n *\n * [Read the documentation for `P.string` on GitHub](https://github.com/gvergnaud/ts-pattern#pstring-wildcard)\n *\n * @example\n * match(value)\n * .with(P.string, () => 'will match on strings')\n */\nexport const string: StringPattern = stringChainable(when(isString));\n\n/**\n * `P.number.between(min, max)` matches **numbers** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.number.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.number.between(0, 10), () => '0 <= numbers <= 10')\n */\nconst between = <input, const min extends number, const max extends number>(\n min: min,\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && min <= value && max >= value);\n\n/**\n * `P.number.lt(max)` matches **numbers** smaller than `max`.\n *\n * [Read the documentation for `P.number.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.number.lt(10), () => 'numbers < 10')\n */\nconst lt = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < max);\n\n/**\n * `P.number.gt(min)` matches **numbers** greater than `min`.\n *\n * [Read the documentation for `P.number.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.number.gt(10), () => 'numbers > 10')\n */\nconst gt = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > min);\n\n/**\n * `P.number.lte(max)` matches **numbers** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.number.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.number.lte(10), () => 'numbers <= 10')\n */\nconst lte = <input, const max extends number>(\n max: max\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value <= max);\n\n/**\n * `P.number.gte(min)` matches **numbers** greater than or equal to `min`.\n *\n * [Read the documentation for `P.number.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergte)\n *\n * @example\n * match(value)\n * .with(P.number.gte(10), () => 'numbers >= 10')\n */\nconst gte = <input, const min extends number>(\n min: min\n): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value >= min);\n\n/**\n * `P.number.int()` matches **integer** numbers.\n *\n * [Read the documentation for `P.number.int()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberint)\n *\n * @example\n * match(value)\n * .with(P.number.int(), () => 'an integer')\n */\nconst int = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isInteger(value));\n\n/**\n * `P.number.finite` matches **finite numbers**.\n *\n * [Read the documentation for `P.number.finite` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberfinite)\n *\n * @example\n * match(value)\n * .with(P.number.finite, () => 'not Infinity')\n */\nconst finite = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && Number.isFinite(value));\n\n/**\n * `P.number.positive()` matches **positive** numbers.\n *\n * [Read the documentation for `P.number.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberpositive)\n *\n * @example\n * match(value)\n * .with(P.number.positive(), () => 'number > 0')\n */\nconst positive = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value > 0);\n\n/**\n * `P.number.negative()` matches **negative** numbers.\n *\n * [Read the documentation for `P.number.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbernegative)\n *\n * @example\n * match(value)\n * .with(P.number.negative(), () => 'number < 0')\n */\nconst negative = <input>(): GuardExcludeP<input, number, never> =>\n when((value) => isNumber(value) && value < 0);\n\nconst numberChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): NumberChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: number, max: number) =>\n numberChainable(intersection(pattern, between(min, max))),\n lt: (max: number) => numberChainable(intersection(pattern, lt(max))),\n gt: (min: number) => numberChainable(intersection(pattern, gt(min))),\n lte: (max: number) => numberChainable(intersection(pattern, lte(max))),\n gte: (min: number) => numberChainable(intersection(pattern, gte(min))),\n int: () => numberChainable(intersection(pattern, int())),\n finite: () => numberChainable(intersection(pattern, finite())),\n positive: () => numberChainable(intersection(pattern, positive())),\n negative: () => numberChainable(intersection(pattern, negative())),\n }) as any;\n\n/**\n * `P.number` is a wildcard pattern, matching any **number**.\n *\n * [Read the documentation for `P.number` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumber-wildcard)\n *\n * @example\n * match(value)\n * .with(P.number, () => 'will match on numbers')\n */\nexport const number: NumberPattern = numberChainable(when(isNumber));\n\n/**\n * `P.bigint.between(min, max)` matches **bigint** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.bigint.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n * match(value)\n * .with(P.bigint.between(0, 10), () => '0 <= bigints <= 10')\n */\nconst betweenBigInt = <\n input,\n const min extends bigint,\n const max extends bigint\n>(\n min: min,\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && min <= value && max >= value);\n\n/**\n * `P.bigint.lt(max)` matches **bigint** smaller than `max`.\n *\n * [Read the documentation for `P.bigint.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n * match(value)\n * .with(P.bigint.lt(10), () => 'bigints < 10')\n */\nconst ltBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < max);\n\n/**\n * `P.bigint.gt(min)` matches **bigint** greater than `min`.\n *\n * [Read the documentation for `P.bigint.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n * match(value)\n * .with(P.bigint.gt(10), () => 'bigints > 10')\n */\nconst gtBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > min);\n\n/**\n * `P.bigint.lte(max)` matches **bigint** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.bigint.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n * match(value)\n * .with(P.bigint.lte(10), () => 'bigints <= 10')\n */\nconst lteBigInt = <input, const max extends bigint>(\n max: max\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value <= max);\n\n/**\n * `P.bigint.gte(min)` matches **bigint** greater than or equal to `min`.\n *\n * [Read the documentation for `P.bigint.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintgte)\n *\n * @example\n * match(value)\n * .with(P.bigint.gte(10), () => 'bigints >= 10')\n */\nconst gteBigInt = <input, const min extends bigint>(\n min: min\n): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value >= min);\n\n/**\n * `P.bigint.positive()` matches **positive** bigints.\n *\n * [Read the documentation for `P.bigint.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintpositive)\n *\n * @example\n * match(value)\n * .with(P.bigint.positive(), () => 'bigint > 0')\n */\nconst positiveBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value > 0);\n\n/**\n * `P.bigint.negative()` matches **negative** bigints.\n *\n * [Read the documentation for `P.bigint.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintnegative)\n *\n * @example\n * match(value)\n * .with(P.bigint.negative(), () => 'bigint < 0')\n */\nconst negativeBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n when((value) => isBigInt(value) && value < 0);\n\nconst bigintChainable = <pattern extends Matcher<any, any, any, any, any>>(\n pattern: pattern\n): BigIntChainable<pattern> =>\n Object.assign(chainable(pattern), {\n between: (min: bigint, max: bigint) =>\n bigintChainable(intersection(pattern, betweenBigInt(min, max))),\n lt: (max: bigint) => bigintChainable(intersection(pattern, ltBigInt(max))),\n gt: (min: bigint) => bigintChainable(intersection(pattern, gtBigInt(min))),\n lte: (max: bigint) =>\n bigintChainable(intersection(pattern, lteBigInt(max))),\n gte: (min: bigint) =>\n bigintChainable(intersection(pattern, gteBigInt(min))),\n positive: () => bigintChainable(intersection(pattern, positiveBigInt())),\n negative: () => bigintChainable(intersection(pattern, negativeBigInt())),\n }) as any;\n\n/**\n * `P.bigint` is a wildcard pattern, matching any **bigint**.\n *\n * [Read the documentation for `P.bigint` on GitHub](https://github.com/gvergnaud/ts-pattern#number-wildcard)\n *\n * @example\n * .with(P.bigint, () => 'will match on bigints')\n */\nexport const bigint: BigIntPattern = bigintChainable(when(isBigInt));\n\n/**\n * `P.boolean` is a wildcard pattern, matching any **boolean**.\n *\n * [Read the documentation for `P.boolean` on GitHub](https://github.com/gvergnaud/ts-pattern#boolean-wildcard)\n *\n * @example\n * .with(P.boolean, () => 'will match on booleans')\n */\nexport const boolean: BooleanPattern = chainable(when(isBoolean));\n\n/**\n * `P.symbol` is a wildcard pattern, matching any **symbol**.\n *\n * [Read the documentation for `P.symbol` on GitHub](https://github.com/gvergnaud/ts-pattern#symbol-wildcard)\n *\n * @example\n * .with(P.symbol, () => 'will match on symbols')\n */\nexport const symbol: SymbolPattern = chainable(when(isSymbol));\n\n/**\n * `P.nullish` is a wildcard pattern, matching **null** or **undefined**.\n *\n * [Read the documentation for `P.nullish` on GitHub](https://github.com/gvergnaud/ts-pattern#nullish-wildcard)\n *\n * @example\n * .with(P.nullish, (x) => `${x} is null or undefined`)\n */\nexport const nullish: NullishPattern = chainable(when(isNullish));\n\n/**\n * `P.nonNullable` is a wildcard pattern, matching everything except **null** or **undefined**.\n *\n * [Read the documentation for `P.nonNullable` on GitHub](https://github.com/gvergnaud/ts-pattern#nonNullable-wildcard)\n *\n * @example\n * .with(P.nonNullable, (x) => `${x} isn't null nor undefined`)\n */\nexport const nonNullable: NonNullablePattern = chainable(when(isNonNullable));\n\n/**\n * `P.instanceOf(SomeClass)` is a pattern matching instances of a given class.\n *\n * [Read the documentation for `P.instanceOf` on GitHub](https://github.com/gvergnaud/ts-pattern#pinstanceof-patterns)\n *\n * @example\n * .with(P.instanceOf(SomeClass), () => 'will match on SomeClass instances')\n */\nexport function instanceOf<T extends AnyConstructor>(\n classConstructor: T\n): Chainable<GuardP<unknown, InstanceType<T>>> {\n return chainable(when(isInstanceOf(classConstructor)));\n}\n\n/**\n * `P.shape(somePattern)` lets you call methods like `.optional()`, `.and`, `.or` and `.select()`\n * On structural patterns, like objects and arrays.\n *\n * [Read the documentation for `P.shape` on GitHub](https://github.com/gvergnaud/ts-pattern#pshape-patterns)\n *\n * @example\n * .with(\n * {\n * state: P.shape({ status: \"success\" }).optional().select()\n * },\n * (state) => 'match the success state, or undefined.'\n * )\n */\nexport function shape<input, const pattern extends Pattern<input>>(\n pattern: pattern\n): Chainable<GuardP<input, InvertPattern<pattern, input>>>;\nexport function shape(pattern: UnknownValuePattern) {\n return chainable(when(isMatching(pattern)));\n}\n","/**\n * Error when the given input value does not match any included pattern\n * and .exhaustive() was specified\n */\nexport class NonExhaustiveError extends Error {\n constructor(public input: unknown) {\n let displayedValue;\n try {\n displayedValue = JSON.stringify(input);\n } catch (e) {\n displayedValue = input;\n }\n super(`Pattern matching error: no pattern matches value ${displayedValue}`);\n }\n}\n","import { Pattern } from './types/Pattern';\nimport { Match } from './types/Match';\nimport * as symbols from './internals/symbols';\nimport { matchPattern } from './internals/helpers';\nimport { NonExhaustiveError } from './errors';\n\ntype MatchState<output> =\n | { matched: true; value: output }\n | { matched: false; value: undefined };\n\nconst unmatched: MatchState<never> = {\n matched: false,\n value: undefined,\n};\n\n/**\n * `match` creates a **pattern matching expression**.\n * * Use `.with(pattern, handler)` to pattern match on the input.\n * * Use `.exhaustive()` or `.otherwise(() => defaultValue)` to end the expression and get the result.\n *\n * [Read the documentation for `match` on GitHub](https://github.com/gvergnaud/ts-pattern#match)\n *\n * @example\n * declare let input: \"A\" | \"B\";\n *\n * return match(input)\n * .with(\"A\", () => \"It's an A!\")\n * .with(\"B\", () => \"It's a B!\")\n * .exhaustive();\n *\n */\nexport function match<const input, output = symbols.unset>(\n value: input\n): Match<input, output> {\n return new MatchExpression(value, unmatched) as any;\n}\n\n/**\n * This class represents a match expression. It follows the\n * builder pattern, we chain methods to add features to the expression\n * until we call `.exhaustive`, `.otherwise` or the unsafe `.run`\n * method to execute it.\n *\n * The types of this class aren't public, the public type definition\n * can be found in src/types/Match.ts.\n */\nclass MatchExpression<input, output> {\n constructor(private input: input, private state: MatchState<output>) {}\n\n with(...args: any[]): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const handler: (selection: unknown, value: input) => output =\n args[args.length - 1];\n\n const patterns: Pattern<input>[] = [args[0]];\n let predicate: ((value: input) => unknown) | undefined = undefined;\n\n if (args.length === 3 && typeof args[1] === 'function') {\n // case with guard as second argument\n predicate = args[1];\n } else if (args.length > 2) {\n // case with several patterns\n patterns.push(...args.slice(1, args.length - 1));\n }\n\n let hasSelections = false;\n let selected: Record<string, unknown> = {};\n const select = (key: string, value: unknown) => {\n hasSelections = true;\n selected[key] = value;\n };\n\n const matched =\n patterns.some((pattern) => matchPattern(pattern, this.input, select)) &&\n (predicate ? Boolean(predicate(this.input)) : true);\n\n const selections = hasSelections\n ? symbols.anonymousSelectKey in selected\n ? selected[symbols.anonymousSelectKey]\n : selected\n : this.input;\n\n const state = matched\n ? {\n matched: true as const,\n value: handler(selections, this.input),\n }\n : unmatched;\n\n return new MatchExpression(this.input, state);\n }\n\n when(\n predicate: (value: input) => unknown,\n handler: (selection: input, value: input) => output\n ): MatchExpression<input, output> {\n if (this.state.matched) return this;\n\n const matched = Boolean(predicate(this.input));\n\n return new MatchExpression<input, output>(\n this.input,\n matched\n ? { matched: true, value: handler(this.input, this.input) }\n : unmatched\n );\n }\n\n otherwise(handler: (value: input) => output): output {\n if (this.state.matched) return this.state.value;\n return handler(this.input);\n }\n\n exhaustive(unexpectedValueHandler = defaultCatcher): output {\n if (this.state.matched) return this.state.value;\n return unexpectedValueHandler(this.input);\n }\n\n run(): output {\n return this.exhaustive();\n }\n\n returnType() {\n return this;\n }\n\n narrow() {\n return this;\n }\n}\n\nfunction defaultCatcher(input: unknown): never {\n throw new NonExhaustiveError(input);\n}\n"],"names":["matcher","Symbol","for","isVariadic","anonymousSelectKey","isObject","value","Boolean","isMatcher","x","symbols","matchPattern","pattern","select","matched","selections","match","Object","keys","forEach","key","Array","isArray","startPatterns","endPatterns","variadicPatterns","i","subpattern","push","length","Error","startValues","slice","endValues","middleValues","Infinity","every","subPattern","Reflect","ownKeys","k","matcherType","is","getSelectionKeys","_pattern$symbols$matc","_pattern$symbols$matc2","_pattern$symbols$matc3","call","flatMap","values","xs","f","reduce","acc","concat","isMatching","args","chainable","assign","optional","and","p2","intersection","or","union","undefined","arrayChainable","iterator","done","next","_values$i","at","variadic","selector","setEvery","set","predicate","mapEvery","map","entries","recordEvery","record","patterns","p","some","when","isUnknown","isNumber","isString","isBigInt","any","unknown","_","stringChainable","startsWith","str","start","endsWith","end","minLength","min","len","maxLength","max","includes","substr","regex","expr","string","numberChainable","between","lt","gt","lte","gte","int","Number","isInteger","finite","isFinite","positive","negative","number","bigintChainable","betweenBigInt","ltBigInt","gtBigInt","lteBigInt","gteBigInt","bigint","boolean","symbol","nullish","nonNullable","v","Set","size","Map","_args$","toString","patternKey","patternValue","keyMatch","valueMatch","_args$2","coercedKey","isNaN","coercedKeyMatch","classConstructor","val","isInstanceOf","NonExhaustiveError","constructor","input","displayedValue","JSON","stringify","e","super","this","unmatched","MatchExpression","state","with","handler","hasSelections","selected","otherwise","exhaustive","unexpectedValueHandler","defaultCatcher","run","returnType","narrow"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!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=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={}.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.")}function r(n){return r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},r(n)}function u(){try{var n=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(n){}return(u=function(){return!!n})()}function i(n,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},i(n,t)}function o(n){var t="function"==typeof Map?new Map:void 0;return o=function(n){if(null===n||!function(n){try{return-1!==Function.toString.call(n).indexOf("[native code]")}catch(t){return"function"==typeof n}}(n))return n;if("function"!=typeof n)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(n))return t.get(n);t.set(n,e)}function e(){return function(n,t,e){if(u())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var o=new(n.bind.apply(n,r));return e&&i(o,e.prototype),o}(n,arguments,r(this).constructor)}return e.prototype=Object.create(n.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),i(e,n)},o(n)}var c=Symbol.for("@ts-pattern/matcher"),f=Symbol.for("@ts-pattern/isVariadic"),a="@ts-pattern/anonymous-select-key",l=function(n){return Boolean(n&&"object"==typeof n)},s=function(n){return n&&!!n[c]},h=function n(t,r,u){if(s(t)){var i=t[c]().match(r),o=i.matched,a=i.selections;return o&&a&&Object.keys(a).forEach(function(n){return u(n,a[n])}),o}if(l(t)){if(!l(r))return!1;if(Array.isArray(t)){if(!Array.isArray(r))return!1;for(var h,v=[],p=[],g=[],y=e(t.keys());!(h=y()).done;){var d=t[h.value];s(d)&&d[f]?g.push(d):g.length?p.push(d):v.push(d)}if(g.length){if(g.length>1)throw new Error("Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.");if(r.length<v.length+p.length)return!1;var m=r.slice(0,v.length),b=0===p.length?[]:r.slice(-p.length),w=r.slice(v.length,0===p.length?Infinity:-p.length);return v.every(function(t,e){return n(t,m[e],u)})&&p.every(function(t,e){return n(t,b[e],u)})&&(0===g.length||n(g[0],w,u))}return t.length===r.length&&t.every(function(t,e){return n(t,r[e],u)})}return Reflect.ownKeys(t).every(function(e){var i,o=t[e];return(e in r||s(i=o)&&"optional"===i[c]().matcherType)&&n(o,r[e],u)})}return Object.is(r,t)},v=function n(t){var e,r,u;return l(t)?s(t)?null!=(e=null==(r=(u=t[c]()).getSelectionKeys)?void 0:r.call(u))?e:[]:Array.isArray(t)?p(t,n):p(Object.values(t),n):[]},p=function(n,t){return n.reduce(function(n,e){return n.concat(t(e))},[])};function g(){var n=[].slice.call(arguments);if(1===n.length){var t=n[0];return function(n){return h(t,n,function(){})}}if(2===n.length)return h(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 y(n){return Object.assign(n,{optional:function(){return m(n)},and:function(t){return S(n,t)},or:function(t){return j(n,t)},select:function(t){return void 0===t?x(n):x(t,n)}})}function d(n){return Object.assign(function(n){var t;return Object.assign(n,((t={})[Symbol.iterator]=function(){var t,e=0,r=[{value:Object.assign(n,((t={})[f]=!0,t)),done:!1},{done:!0,value:void 0}];return{next:function(){var n;return null!=(n=r[e++])?n:r.at(-1)}}},t))}(n),{optional:function(){return d(m(n))},select:function(t){return d(void 0===t?x(n):x(t,n))}})}function m(n){var t;return y(((t={})[c]=function(){return{match:function(t){var e={},r=function(n,t){e[n]=t};return void 0===t?(v(n).forEach(function(n){return r(n,void 0)}),{matched:!0,selections:e}):{matched:h(n,t,r),selections:e}},getSelectionKeys:function(){return v(n)},matcherType:"optional"}},t))}var b=function(n,t){for(var r,u=e(n);!(r=u()).done;)if(!t(r.value))return!1;return!0},w=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},O=function(n,t){for(var r,u=e(Reflect.ownKeys(n));!(r=u()).done;){var i=r.value;if(!t(i,n[i]))return!1}return!0};function S(){var n,t=[].slice.call(arguments);return y(((n={})[c]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return{matched:t.every(function(t){return h(t,n,r)}),selections:e}},getSelectionKeys:function(){return p(t,v)},matcherType:"and"}},n))}function j(){var n,t=[].slice.call(arguments);return y(((n={})[c]=function(){return{match:function(n){var e={},r=function(n,t){e[n]=t};return p(t,v).forEach(function(n){return r(n,void 0)}),{matched:t.some(function(t){return h(t,n,r)}),selections:e}},getSelectionKeys:function(){return p(t,v)},matcherType:"or"}},n))}function A(n){var t;return(t={})[c]=function(){return{match:function(t){return{matched:Boolean(n(t))}}}},t}function x(){var n,t=[].slice.call(arguments),e="string"==typeof t[0]?t[0]:void 0,r=2===t.length?t[1]:"string"==typeof t[0]?void 0:t[0];return y(((n={})[c]=function(){return{match:function(n){var t,u=((t={})[null!=e?e:a]=n,t);return{matched:void 0===r||h(r,n,function(n,t){u[n]=t}),selections:u}},getSelectionKeys:function(){return[null!=e?e:a].concat(void 0===r?[]:v(r))}}},n))}function E(n){return!0}function P(n){return"number"==typeof n}function _(n){return"string"==typeof n}function K(n){return"bigint"==typeof n}var N=y(A(E)),T=y(A(E)),B=N,k=function n(t){return Object.assign(y(t),{startsWith:function(e){return n(S(t,(r=e,A(function(n){return _(n)&&n.startsWith(r)}))));var r},endsWith:function(e){return n(S(t,(r=e,A(function(n){return _(n)&&n.endsWith(r)}))));var r},minLength:function(e){return n(S(t,function(n){return A(function(t){return _(t)&&t.length>=n})}(e)))},length:function(e){return n(S(t,function(n){return A(function(t){return _(t)&&t.length===n})}(e)))},maxLength:function(e){return n(S(t,function(n){return A(function(t){return _(t)&&t.length<=n})}(e)))},includes:function(e){return n(S(t,(r=e,A(function(n){return _(n)&&n.includes(r)}))));var r},regex:function(e){return n(S(t,(r=e,A(function(n){return _(n)&&Boolean(n.match(r))}))));var r}})}(A(_)),M=function n(t){return Object.assign(y(t),{between:function(e,r){return n(S(t,function(n,t){return A(function(e){return P(e)&&n<=e&&t>=e})}(e,r)))},lt:function(e){return n(S(t,function(n){return A(function(t){return P(t)&&t<n})}(e)))},gt:function(e){return n(S(t,function(n){return A(function(t){return P(t)&&t>n})}(e)))},lte:function(e){return n(S(t,function(n){return A(function(t){return P(t)&&t<=n})}(e)))},gte:function(e){return n(S(t,function(n){return A(function(t){return P(t)&&t>=n})}(e)))},int:function(){return n(S(t,A(function(n){return P(n)&&Number.isInteger(n)})))},finite:function(){return n(S(t,A(function(n){return P(n)&&Number.isFinite(n)})))},positive:function(){return n(S(t,A(function(n){return P(n)&&n>0})))},negative:function(){return n(S(t,A(function(n){return P(n)&&n<0})))}})}(A(P)),I=function n(t){return Object.assign(y(t),{between:function(e,r){return n(S(t,function(n,t){return A(function(e){return K(e)&&n<=e&&t>=e})}(e,r)))},lt:function(e){return n(S(t,function(n){return A(function(t){return K(t)&&t<n})}(e)))},gt:function(e){return n(S(t,function(n){return A(function(t){return K(t)&&t>n})}(e)))},lte:function(e){return n(S(t,function(n){return A(function(t){return K(t)&&t<=n})}(e)))},gte:function(e){return n(S(t,function(n){return A(function(t){return K(t)&&t>=n})}(e)))},positive:function(){return n(S(t,A(function(n){return K(n)&&n>0})))},negative:function(){return n(S(t,A(function(n){return K(n)&&n<0})))}})}(A(K)),R=y(A(function(n){return"boolean"==typeof n})),W=y(A(function(n){return"symbol"==typeof n})),z=y(A(function(n){return null==n})),F=y(A(function(n){return null!=n})),L={__proto__:null,matcher:c,optional:m,array:function(){var n,t=[].slice.call(arguments);return d(((n={})[c]=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 v(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 h(e,n,u)}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:v(t[0])}}},n))},set:function(){var n,t=[].slice.call(arguments);return y(((n={})[c]=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:b(n,function(n){return h(u,n,r)}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:v(t[0])}}},n))},map:function(){var n,t=[].slice.call(arguments);return y(((n={})[c]=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:w(n,function(n,t){var e=h(i,t,u),r=h(o,n,u);return e&&r}),selections:e}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(v(t[0]),v(t[1]))}}},n))},record:function(){var n,t=[].slice.call(arguments);return y(((n={})[c]=function(){return{match:function(n){if(null===n||"object"!=typeof n||Array.isArray(n))return{matched:!1};var e;if(0===t.length)throw new Error("`P.record` wasn't given enough arguments. Expected (value) or (key, value), received "+(null==(e=t[0])?void 0:e.toString()));var r={},u=function(n,t){r[n]=(r[n]||[]).concat([t])},i=1===t.length?[k,t[0]]:t,o=i[0],c=i[1];return{matched:O(n,function(n,t){var e="string"!=typeof n||Number.isNaN(Number(n))?null:Number(n),r=null!==e&&h(o,e,u),i=h(o,n,u),f=h(c,t,u);return(i||r)&&f}),selections:r}},getSelectionKeys:function(){return 0===t.length?[]:[].concat(v(t[0]),v(t[1]))}}},n))},intersection:S,union:j,not:function(n){var t;return y(((t={})[c]=function(){return{match:function(t){return{matched:!h(n,t,function(){})}},getSelectionKeys:function(){return[]},matcherType:"not"}},t))},when:A,select:x,any:N,unknown:T,_:B,string:k,number:M,bigint:I,boolean:R,symbol:W,nullish:z,nonNullable:F,instanceOf:function(n){return y(A(function(n){return function(t){return t instanceof n}}(n)))},shape:function(n){return y(A(g(n)))}},U=/*#__PURE__*/function(n){var t,e;function r(t){var e,r;try{r=JSON.stringify(t)}catch(n){r=t}return(e=n.call(this,"Pattern matching error: no pattern matches value "+r)||this).input=void 0,e.input=t,e}return e=n,(t=r).prototype=Object.create(e.prototype),t.prototype.constructor=t,i(t,e),r}(/*#__PURE__*/o(Error)),C={matched:!1,value:void 0},J=/*#__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]],i=void 0;3===e.length&&"function"==typeof e[1]?i=e[1]:e.length>2&&u.push.apply(u,e.slice(1,e.length-1));var o=!1,c={},f=function(n,t){o=!0,c[n]=t},l=!u.some(function(n){return h(n,t.input,f)})||i&&!Boolean(i(this.input))?C:{matched:!0,value:r(o?a in c?c[a]:c: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)}:C)},t.otherwise=function(n){return this.state.matched?this.state.value:n(this.input)},t.exhaustive=function(n){return void 0===n&&(n=V),this.state.matched?this.state.value:n(this.input)},t.run=function(){return this.exhaustive()},t.returnType=function(){return this},t.narrow=function(){return this},n}();function V(n){throw new U(n)}n.NonExhaustiveError=U,n.P=L,n.Pattern=L,n.isMatching=g,n.match=function(n){return new J(n,C)}});
|
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|