@consolidados/results 0.1.5 → 0.2.0
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/README.md +593 -253
- package/dist/helpers/match.cjs +28 -5
- package/dist/helpers/match.cjs.map +1 -1
- package/dist/helpers/match.d.cts +30 -3
- package/dist/helpers/match.d.ts +30 -3
- package/dist/helpers/match.js +28 -5
- package/dist/helpers/match.js.map +1 -1
- package/dist/index.cjs +310 -151
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +309 -150
- package/dist/index.js.map +1 -1
- package/dist/option/index.cjs +321 -18
- package/dist/option/index.cjs.map +1 -1
- package/dist/option/index.d.cts +1 -1
- package/dist/option/index.d.ts +1 -1
- package/dist/option/index.js +321 -18
- package/dist/option/index.js.map +1 -1
- package/dist/option/option.cjs +321 -18
- package/dist/option/option.cjs.map +1 -1
- package/dist/option/option.d.cts +5 -4
- package/dist/option/option.d.ts +5 -4
- package/dist/option/option.js +321 -18
- package/dist/option/option.js.map +1 -1
- package/dist/option-B_KKIecf.d.cts +352 -0
- package/dist/option-B_KKIecf.d.ts +352 -0
- package/dist/result/index.cjs +86 -23
- package/dist/result/index.cjs.map +1 -1
- package/dist/result/index.d.cts +1 -2
- package/dist/result/index.d.ts +1 -2
- package/dist/result/index.js +86 -23
- package/dist/result/index.js.map +1 -1
- package/dist/result/result.cjs +86 -23
- package/dist/result/result.cjs.map +1 -1
- package/dist/result/result.d.cts +4 -12
- package/dist/result/result.d.ts +4 -12
- package/dist/result/result.js +86 -23
- package/dist/result/result.js.map +1 -1
- package/dist/types/globals.d.cts +26 -146
- package/dist/types/globals.d.ts +26 -146
- package/package.json +5 -5
- package/dist/option-DpT8KCGE.d.cts +0 -96
- package/dist/option-DpT8KCGE.d.ts +0 -96
package/dist/helpers/match.cjs
CHANGED
|
@@ -1,20 +1,43 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
// src/helpers/match.ts
|
|
4
|
-
function match(matcher, cases) {
|
|
5
|
-
if ("
|
|
4
|
+
function match(matcher, cases, discriminant) {
|
|
5
|
+
if (typeof matcher === "string" || typeof matcher === "number" || typeof matcher === "symbol") {
|
|
6
|
+
const handler = cases[matcher];
|
|
7
|
+
if (handler) {
|
|
8
|
+
return handler();
|
|
9
|
+
}
|
|
10
|
+
if (cases.default) {
|
|
11
|
+
return cases.default();
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`No case found for value: ${String(matcher)}`);
|
|
14
|
+
}
|
|
15
|
+
if (discriminant && typeof matcher === "object" && matcher !== null) {
|
|
16
|
+
const discriminantValue = matcher[discriminant];
|
|
17
|
+
const handler = cases[discriminantValue];
|
|
18
|
+
if (handler) {
|
|
19
|
+
return handler(matcher);
|
|
20
|
+
}
|
|
21
|
+
if (cases.default) {
|
|
22
|
+
return cases.default(matcher);
|
|
23
|
+
}
|
|
24
|
+
throw new Error(
|
|
25
|
+
`No case found for discriminant value: ${String(discriminantValue)}`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
if (typeof matcher === "object" && matcher !== null && "isOk" in matcher && matcher.isOk()) {
|
|
6
29
|
if (!cases.Ok) throw new Error("Missing case for Ok");
|
|
7
30
|
return cases.Ok(matcher.unwrap());
|
|
8
31
|
}
|
|
9
|
-
if ("isErr" in matcher && matcher.isErr()) {
|
|
32
|
+
if (typeof matcher === "object" && matcher !== null && "isErr" in matcher && matcher.isErr()) {
|
|
10
33
|
if (!cases.Err) throw new Error("Missing case for Err");
|
|
11
34
|
return cases.Err(matcher.unwrapErr());
|
|
12
35
|
}
|
|
13
|
-
if ("isSome" in matcher && matcher.isSome()) {
|
|
36
|
+
if (typeof matcher === "object" && matcher !== null && "isSome" in matcher && matcher.isSome()) {
|
|
14
37
|
if (!cases.Some) throw new Error("Missing case for Some");
|
|
15
38
|
return cases.Some(matcher.unwrap());
|
|
16
39
|
}
|
|
17
|
-
if ("isNone" in matcher && matcher.isNone()) {
|
|
40
|
+
if (typeof matcher === "object" && matcher !== null && "isNone" in matcher && matcher.isNone()) {
|
|
18
41
|
if (!cases.None) throw new Error("Missing case for None");
|
|
19
42
|
return cases.None();
|
|
20
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/helpers/match.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/match.ts"],"names":[],"mappings":";;;AA4EO,SAAS,KAAA,CACd,OACA,EAAA,KAAA,EACA,YACG,EAAA;AAEH,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAO,YAAY,QACnB,IAAA,OAAO,YAAY,QACnB,EAAA;AACA,IAAM,MAAA,OAAA,GAAU,MAAM,OAAO,CAAA;AAE7B,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAO,OAAQ,EAAA;AAAA;AAGjB,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAA,OAAO,MAAM,OAAQ,EAAA;AAAA;AAGvB,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,yBAAA,EAA4B,MAAO,CAAA,OAAO,CAAC,CAAE,CAAA,CAAA;AAAA;AAI/D,EAAA,IAAI,YAAgB,IAAA,OAAO,OAAY,KAAA,QAAA,IAAY,YAAY,IAAM,EAAA;AACnE,IAAM,MAAA,iBAAA,GAAoB,QAAQ,YAAY,CAAA;AAC9C,IAAM,MAAA,OAAA,GAAU,MAAM,iBAAiB,CAAA;AAEvC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAO,QAAQ,OAAO,CAAA;AAAA;AAGxB,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAO,OAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA;AAG9B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,sCAAA,EAAyC,MAAO,CAAA,iBAAiB,CAAC,CAAA;AAAA,KACpE;AAAA;AAIF,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,MAAU,IAAA,OAAA,IACV,OAAQ,CAAA,IAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,EAAA,EAAU,MAAA,IAAI,MAAM,qBAAqB,CAAA;AACpD,IAAA,OAAO,KAAM,CAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,EAAQ,CAAA;AAAA;AAIlC,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,OAAW,IAAA,OAAA,IACX,OAAQ,CAAA,KAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,GAAA,EAAW,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACtD,IAAA,OAAO,KAAM,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAgB,CAAA;AAAA;AAI3C,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,QAAY,IAAA,OAAA,IACZ,OAAQ,CAAA,MAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,IAAA,EAAY,MAAA,IAAI,MAAM,uBAAuB,CAAA;AACxD,IAAA,OAAO,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,EAAQ,CAAA;AAAA;AAIpC,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,QAAY,IAAA,OAAA,IACZ,OAAQ,CAAA,MAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,IAAA,EAAY,MAAA,IAAI,MAAM,uBAAuB,CAAA;AACxD,IAAA,OAAO,MAAM,IAAK,EAAA;AAAA;AAGpB,EAAM,MAAA,IAAI,MAAM,iCAAiC,CAAA;AACnD;AAGC,MAAA,CAAe,KAAQ,GAAA,KAAA","file":"match.cjs","sourcesContent":["import type { Option } from \"../option\";\nimport type { Result } from \"../result\";\n\n// Overload for Result type\nexport function match<T, E, R>(\n matcher: Result<T, E>,\n cases: {\n Ok: (value: T) => R;\n Err: (error: E) => R;\n },\n): R;\n\n// Overload for Option type\nexport function match<T, R>(\n matcher: Option<T>,\n cases: {\n Some: (value: T) => R;\n None: () => R;\n },\n): R;\n\n// Overload for primitives with default case\nexport function match<T extends PropertyKey, R>(\n matcher: T,\n cases: Partial<Record<T, () => R>> & { default: () => R },\n): R;\n\n// Overload for primitives without default case (exhaustive)\nexport function match<T extends PropertyKey, R>(\n matcher: T,\n cases: Record<T, () => R>,\n): R;\n\n// Overload for discriminated unions with default case\nexport function match<\n T extends { [K in D]: string | number | symbol },\n D extends keyof T,\n R,\n>(\n matcher: T,\n cases: { [K in T[D]]?: (value: Extract<T, { [P in D]: K }>) => R } & {\n default: (value: T) => R;\n },\n discriminant: D,\n): R;\n\n// Overload for discriminated unions without default case (exhaustive)\nexport function match<\n T extends { [K in D]: string | number | symbol },\n D extends keyof T,\n R,\n>(\n matcher: T,\n cases: { [K in T[D]]: (value: Extract<T, { [P in D]: K }>) => R },\n discriminant: D,\n): R;\n\n// Result -> Option conversion\nexport function match<T, E>(\n matcher: Result<T, E>,\n cases: {\n Ok: (value: T) => Option<T>;\n Err: (error: E) => Option<T>;\n },\n): Option<T>;\n\n// Option -> Result conversion\nexport function match<T, E>(\n matcher: Option<T>,\n cases: {\n Some: (value: T) => Result<T, E>;\n None: () => Result<T, E>;\n },\n): Result<T, E>;\n\n// Implementation\nexport function match<T, E, R>(\n matcher: Result<T, E> | Option<T> | any,\n cases: any,\n discriminant?: keyof any,\n): R {\n // Handle primitives (string, number, symbol) FIRST\n if (\n typeof matcher === \"string\" ||\n typeof matcher === \"number\" ||\n typeof matcher === \"symbol\"\n ) {\n const handler = cases[matcher];\n\n if (handler) {\n return handler();\n }\n\n if (cases.default) {\n return cases.default();\n }\n\n throw new Error(`No case found for value: ${String(matcher)}`);\n }\n\n // Handle discriminated unions\n if (discriminant && typeof matcher === \"object\" && matcher !== null) {\n const discriminantValue = matcher[discriminant];\n const handler = cases[discriminantValue];\n\n if (handler) {\n return handler(matcher);\n }\n\n if (cases.default) {\n return cases.default(matcher);\n }\n\n throw new Error(\n `No case found for discriminant value: ${String(discriminantValue)}`,\n );\n }\n\n // Early return for Result.Ok\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isOk\" in matcher &&\n matcher.isOk()\n ) {\n if (!cases.Ok) throw new Error(\"Missing case for Ok\");\n return cases.Ok(matcher.unwrap());\n }\n\n // Early return for Result.Err\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isErr\" in matcher &&\n matcher.isErr()\n ) {\n if (!cases.Err) throw new Error(\"Missing case for Err\");\n return cases.Err(matcher.unwrapErr() as E);\n }\n\n // Early return for Option.Some\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isSome\" in matcher &&\n matcher.isSome()\n ) {\n if (!cases.Some) throw new Error(\"Missing case for Some\");\n return cases.Some(matcher.unwrap());\n }\n\n // Early return for Option.None\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isNone\" in matcher &&\n matcher.isNone()\n ) {\n if (!cases.None) throw new Error(\"Missing case for None\");\n return cases.None();\n }\n\n throw new Error(\"Invalid matcher or missing case\");\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n(global as any).match = match;\n"]}
|
package/dist/helpers/match.d.cts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { O as Option } from '../option-
|
|
2
|
-
import { R as Result } from '../types/globals.cjs';
|
|
1
|
+
import { R as Result, O as Option } from '../option-B_KKIecf.cjs';
|
|
3
2
|
|
|
4
|
-
declare function match<T, E
|
|
3
|
+
declare function match<T, E, R>(matcher: Result<T, E>, cases: {
|
|
5
4
|
Ok: (value: T) => R;
|
|
6
5
|
Err: (error: E) => R;
|
|
7
6
|
}): R;
|
|
@@ -9,5 +8,33 @@ declare function match<T, R>(matcher: Option<T>, cases: {
|
|
|
9
8
|
Some: (value: T) => R;
|
|
10
9
|
None: () => R;
|
|
11
10
|
}): R;
|
|
11
|
+
declare function match<T extends PropertyKey, R>(matcher: T, cases: Partial<Record<T, () => R>> & {
|
|
12
|
+
default: () => R;
|
|
13
|
+
}): R;
|
|
14
|
+
declare function match<T extends PropertyKey, R>(matcher: T, cases: Record<T, () => R>): R;
|
|
15
|
+
declare function match<T extends {
|
|
16
|
+
[K in D]: string | number | symbol;
|
|
17
|
+
}, D extends keyof T, R>(matcher: T, cases: {
|
|
18
|
+
[K in T[D]]?: (value: Extract<T, {
|
|
19
|
+
[P in D]: K;
|
|
20
|
+
}>) => R;
|
|
21
|
+
} & {
|
|
22
|
+
default: (value: T) => R;
|
|
23
|
+
}, discriminant: D): R;
|
|
24
|
+
declare function match<T extends {
|
|
25
|
+
[K in D]: string | number | symbol;
|
|
26
|
+
}, D extends keyof T, R>(matcher: T, cases: {
|
|
27
|
+
[K in T[D]]: (value: Extract<T, {
|
|
28
|
+
[P in D]: K;
|
|
29
|
+
}>) => R;
|
|
30
|
+
}, discriminant: D): R;
|
|
31
|
+
declare function match<T, E>(matcher: Result<T, E>, cases: {
|
|
32
|
+
Ok: (value: T) => Option<T>;
|
|
33
|
+
Err: (error: E) => Option<T>;
|
|
34
|
+
}): Option<T>;
|
|
35
|
+
declare function match<T, E>(matcher: Option<T>, cases: {
|
|
36
|
+
Some: (value: T) => Result<T, E>;
|
|
37
|
+
None: () => Result<T, E>;
|
|
38
|
+
}): Result<T, E>;
|
|
12
39
|
|
|
13
40
|
export { match };
|
package/dist/helpers/match.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { O as Option } from '../option-
|
|
2
|
-
import { R as Result } from '../types/globals.js';
|
|
1
|
+
import { R as Result, O as Option } from '../option-B_KKIecf.js';
|
|
3
2
|
|
|
4
|
-
declare function match<T, E
|
|
3
|
+
declare function match<T, E, R>(matcher: Result<T, E>, cases: {
|
|
5
4
|
Ok: (value: T) => R;
|
|
6
5
|
Err: (error: E) => R;
|
|
7
6
|
}): R;
|
|
@@ -9,5 +8,33 @@ declare function match<T, R>(matcher: Option<T>, cases: {
|
|
|
9
8
|
Some: (value: T) => R;
|
|
10
9
|
None: () => R;
|
|
11
10
|
}): R;
|
|
11
|
+
declare function match<T extends PropertyKey, R>(matcher: T, cases: Partial<Record<T, () => R>> & {
|
|
12
|
+
default: () => R;
|
|
13
|
+
}): R;
|
|
14
|
+
declare function match<T extends PropertyKey, R>(matcher: T, cases: Record<T, () => R>): R;
|
|
15
|
+
declare function match<T extends {
|
|
16
|
+
[K in D]: string | number | symbol;
|
|
17
|
+
}, D extends keyof T, R>(matcher: T, cases: {
|
|
18
|
+
[K in T[D]]?: (value: Extract<T, {
|
|
19
|
+
[P in D]: K;
|
|
20
|
+
}>) => R;
|
|
21
|
+
} & {
|
|
22
|
+
default: (value: T) => R;
|
|
23
|
+
}, discriminant: D): R;
|
|
24
|
+
declare function match<T extends {
|
|
25
|
+
[K in D]: string | number | symbol;
|
|
26
|
+
}, D extends keyof T, R>(matcher: T, cases: {
|
|
27
|
+
[K in T[D]]: (value: Extract<T, {
|
|
28
|
+
[P in D]: K;
|
|
29
|
+
}>) => R;
|
|
30
|
+
}, discriminant: D): R;
|
|
31
|
+
declare function match<T, E>(matcher: Result<T, E>, cases: {
|
|
32
|
+
Ok: (value: T) => Option<T>;
|
|
33
|
+
Err: (error: E) => Option<T>;
|
|
34
|
+
}): Option<T>;
|
|
35
|
+
declare function match<T, E>(matcher: Option<T>, cases: {
|
|
36
|
+
Some: (value: T) => Result<T, E>;
|
|
37
|
+
None: () => Result<T, E>;
|
|
38
|
+
}): Result<T, E>;
|
|
12
39
|
|
|
13
40
|
export { match };
|
package/dist/helpers/match.js
CHANGED
|
@@ -1,18 +1,41 @@
|
|
|
1
1
|
// src/helpers/match.ts
|
|
2
|
-
function match(matcher, cases) {
|
|
3
|
-
if ("
|
|
2
|
+
function match(matcher, cases, discriminant) {
|
|
3
|
+
if (typeof matcher === "string" || typeof matcher === "number" || typeof matcher === "symbol") {
|
|
4
|
+
const handler = cases[matcher];
|
|
5
|
+
if (handler) {
|
|
6
|
+
return handler();
|
|
7
|
+
}
|
|
8
|
+
if (cases.default) {
|
|
9
|
+
return cases.default();
|
|
10
|
+
}
|
|
11
|
+
throw new Error(`No case found for value: ${String(matcher)}`);
|
|
12
|
+
}
|
|
13
|
+
if (discriminant && typeof matcher === "object" && matcher !== null) {
|
|
14
|
+
const discriminantValue = matcher[discriminant];
|
|
15
|
+
const handler = cases[discriminantValue];
|
|
16
|
+
if (handler) {
|
|
17
|
+
return handler(matcher);
|
|
18
|
+
}
|
|
19
|
+
if (cases.default) {
|
|
20
|
+
return cases.default(matcher);
|
|
21
|
+
}
|
|
22
|
+
throw new Error(
|
|
23
|
+
`No case found for discriminant value: ${String(discriminantValue)}`
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
if (typeof matcher === "object" && matcher !== null && "isOk" in matcher && matcher.isOk()) {
|
|
4
27
|
if (!cases.Ok) throw new Error("Missing case for Ok");
|
|
5
28
|
return cases.Ok(matcher.unwrap());
|
|
6
29
|
}
|
|
7
|
-
if ("isErr" in matcher && matcher.isErr()) {
|
|
30
|
+
if (typeof matcher === "object" && matcher !== null && "isErr" in matcher && matcher.isErr()) {
|
|
8
31
|
if (!cases.Err) throw new Error("Missing case for Err");
|
|
9
32
|
return cases.Err(matcher.unwrapErr());
|
|
10
33
|
}
|
|
11
|
-
if ("isSome" in matcher && matcher.isSome()) {
|
|
34
|
+
if (typeof matcher === "object" && matcher !== null && "isSome" in matcher && matcher.isSome()) {
|
|
12
35
|
if (!cases.Some) throw new Error("Missing case for Some");
|
|
13
36
|
return cases.Some(matcher.unwrap());
|
|
14
37
|
}
|
|
15
|
-
if ("isNone" in matcher && matcher.isNone()) {
|
|
38
|
+
if (typeof matcher === "object" && matcher !== null && "isNone" in matcher && matcher.isNone()) {
|
|
16
39
|
if (!cases.None) throw new Error("Missing case for None");
|
|
17
40
|
return cases.None();
|
|
18
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/helpers/match.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../src/helpers/match.ts"],"names":[],"mappings":";AA4EO,SAAS,KAAA,CACd,OACA,EAAA,KAAA,EACA,YACG,EAAA;AAEH,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAO,YAAY,QACnB,IAAA,OAAO,YAAY,QACnB,EAAA;AACA,IAAM,MAAA,OAAA,GAAU,MAAM,OAAO,CAAA;AAE7B,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAO,OAAQ,EAAA;AAAA;AAGjB,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAA,OAAO,MAAM,OAAQ,EAAA;AAAA;AAGvB,IAAA,MAAM,IAAI,KAAM,CAAA,CAAA,yBAAA,EAA4B,MAAO,CAAA,OAAO,CAAC,CAAE,CAAA,CAAA;AAAA;AAI/D,EAAA,IAAI,YAAgB,IAAA,OAAO,OAAY,KAAA,QAAA,IAAY,YAAY,IAAM,EAAA;AACnE,IAAM,MAAA,iBAAA,GAAoB,QAAQ,YAAY,CAAA;AAC9C,IAAM,MAAA,OAAA,GAAU,MAAM,iBAAiB,CAAA;AAEvC,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAO,QAAQ,OAAO,CAAA;AAAA;AAGxB,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAO,OAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA;AAG9B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,sCAAA,EAAyC,MAAO,CAAA,iBAAiB,CAAC,CAAA;AAAA,KACpE;AAAA;AAIF,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,MAAU,IAAA,OAAA,IACV,OAAQ,CAAA,IAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,EAAA,EAAU,MAAA,IAAI,MAAM,qBAAqB,CAAA;AACpD,IAAA,OAAO,KAAM,CAAA,EAAA,CAAG,OAAQ,CAAA,MAAA,EAAQ,CAAA;AAAA;AAIlC,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,OAAW,IAAA,OAAA,IACX,OAAQ,CAAA,KAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,GAAA,EAAW,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACtD,IAAA,OAAO,KAAM,CAAA,GAAA,CAAI,OAAQ,CAAA,SAAA,EAAgB,CAAA;AAAA;AAI3C,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,QAAY,IAAA,OAAA,IACZ,OAAQ,CAAA,MAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,IAAA,EAAY,MAAA,IAAI,MAAM,uBAAuB,CAAA;AACxD,IAAA,OAAO,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,EAAQ,CAAA;AAAA;AAIpC,EACE,IAAA,OAAO,YAAY,QACnB,IAAA,OAAA,KAAY,QACZ,QAAY,IAAA,OAAA,IACZ,OAAQ,CAAA,MAAA,EACR,EAAA;AACA,IAAA,IAAI,CAAC,KAAM,CAAA,IAAA,EAAY,MAAA,IAAI,MAAM,uBAAuB,CAAA;AACxD,IAAA,OAAO,MAAM,IAAK,EAAA;AAAA;AAGpB,EAAM,MAAA,IAAI,MAAM,iCAAiC,CAAA;AACnD;AAGC,MAAA,CAAe,KAAQ,GAAA,KAAA","file":"match.js","sourcesContent":["import type { Option } from \"../option\";\nimport type { Result } from \"../result\";\n\n// Overload for Result type\nexport function match<T, E, R>(\n matcher: Result<T, E>,\n cases: {\n Ok: (value: T) => R;\n Err: (error: E) => R;\n },\n): R;\n\n// Overload for Option type\nexport function match<T, R>(\n matcher: Option<T>,\n cases: {\n Some: (value: T) => R;\n None: () => R;\n },\n): R;\n\n// Overload for primitives with default case\nexport function match<T extends PropertyKey, R>(\n matcher: T,\n cases: Partial<Record<T, () => R>> & { default: () => R },\n): R;\n\n// Overload for primitives without default case (exhaustive)\nexport function match<T extends PropertyKey, R>(\n matcher: T,\n cases: Record<T, () => R>,\n): R;\n\n// Overload for discriminated unions with default case\nexport function match<\n T extends { [K in D]: string | number | symbol },\n D extends keyof T,\n R,\n>(\n matcher: T,\n cases: { [K in T[D]]?: (value: Extract<T, { [P in D]: K }>) => R } & {\n default: (value: T) => R;\n },\n discriminant: D,\n): R;\n\n// Overload for discriminated unions without default case (exhaustive)\nexport function match<\n T extends { [K in D]: string | number | symbol },\n D extends keyof T,\n R,\n>(\n matcher: T,\n cases: { [K in T[D]]: (value: Extract<T, { [P in D]: K }>) => R },\n discriminant: D,\n): R;\n\n// Result -> Option conversion\nexport function match<T, E>(\n matcher: Result<T, E>,\n cases: {\n Ok: (value: T) => Option<T>;\n Err: (error: E) => Option<T>;\n },\n): Option<T>;\n\n// Option -> Result conversion\nexport function match<T, E>(\n matcher: Option<T>,\n cases: {\n Some: (value: T) => Result<T, E>;\n None: () => Result<T, E>;\n },\n): Result<T, E>;\n\n// Implementation\nexport function match<T, E, R>(\n matcher: Result<T, E> | Option<T> | any,\n cases: any,\n discriminant?: keyof any,\n): R {\n // Handle primitives (string, number, symbol) FIRST\n if (\n typeof matcher === \"string\" ||\n typeof matcher === \"number\" ||\n typeof matcher === \"symbol\"\n ) {\n const handler = cases[matcher];\n\n if (handler) {\n return handler();\n }\n\n if (cases.default) {\n return cases.default();\n }\n\n throw new Error(`No case found for value: ${String(matcher)}`);\n }\n\n // Handle discriminated unions\n if (discriminant && typeof matcher === \"object\" && matcher !== null) {\n const discriminantValue = matcher[discriminant];\n const handler = cases[discriminantValue];\n\n if (handler) {\n return handler(matcher);\n }\n\n if (cases.default) {\n return cases.default(matcher);\n }\n\n throw new Error(\n `No case found for discriminant value: ${String(discriminantValue)}`,\n );\n }\n\n // Early return for Result.Ok\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isOk\" in matcher &&\n matcher.isOk()\n ) {\n if (!cases.Ok) throw new Error(\"Missing case for Ok\");\n return cases.Ok(matcher.unwrap());\n }\n\n // Early return for Result.Err\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isErr\" in matcher &&\n matcher.isErr()\n ) {\n if (!cases.Err) throw new Error(\"Missing case for Err\");\n return cases.Err(matcher.unwrapErr() as E);\n }\n\n // Early return for Option.Some\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isSome\" in matcher &&\n matcher.isSome()\n ) {\n if (!cases.Some) throw new Error(\"Missing case for Some\");\n return cases.Some(matcher.unwrap());\n }\n\n // Early return for Option.None\n if (\n typeof matcher === \"object\" &&\n matcher !== null &&\n \"isNone\" in matcher &&\n matcher.isNone()\n ) {\n if (!cases.None) throw new Error(\"Missing case for None\");\n return cases.None();\n }\n\n throw new Error(\"Invalid matcher or missing case\");\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n(global as any).match = match;\n"]}
|