selaws 0.0.0-stage → 0.1.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +355 -2
  3. package/dist/evidence.d.ts +45 -0
  4. package/dist/evidence.d.ts.map +1 -0
  5. package/dist/evidence.js +22 -0
  6. package/dist/evidence.js.map +1 -0
  7. package/dist/identity.d.ts +52 -0
  8. package/dist/identity.d.ts.map +1 -0
  9. package/dist/identity.js +22 -0
  10. package/dist/identity.js.map +1 -0
  11. package/dist/index.d.ts +35 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +18 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/internal/callback.d.ts +13 -0
  16. package/dist/internal/callback.d.ts.map +1 -0
  17. package/dist/internal/callback.js +2 -0
  18. package/dist/internal/callback.js.map +1 -0
  19. package/dist/internal/promise-like.d.ts +8 -0
  20. package/dist/internal/promise-like.d.ts.map +1 -0
  21. package/dist/internal/promise-like.js +12 -0
  22. package/dist/internal/promise-like.js.map +1 -0
  23. package/dist/internal/scalar.d.ts +18 -0
  24. package/dist/internal/scalar.d.ts.map +1 -0
  25. package/dist/internal/scalar.js +6 -0
  26. package/dist/internal/scalar.js.map +1 -0
  27. package/dist/option.d.ts +90 -0
  28. package/dist/option.d.ts.map +1 -0
  29. package/dist/option.js +96 -0
  30. package/dist/option.js.map +1 -0
  31. package/dist/protocol.d.ts +42 -0
  32. package/dist/protocol.d.ts.map +1 -0
  33. package/dist/protocol.js +67 -0
  34. package/dist/protocol.js.map +1 -0
  35. package/dist/result/capture.d.ts +42 -0
  36. package/dist/result/capture.d.ts.map +1 -0
  37. package/dist/result/capture.js +41 -0
  38. package/dist/result/capture.js.map +1 -0
  39. package/dist/result/core.d.ts +98 -0
  40. package/dist/result/core.d.ts.map +1 -0
  41. package/dist/result/core.js +103 -0
  42. package/dist/result/core.js.map +1 -0
  43. package/dist/result/index.d.ts +4 -0
  44. package/dist/result/index.d.ts.map +1 -0
  45. package/dist/result/index.js +4 -0
  46. package/dist/result/index.js.map +1 -0
  47. package/dist/result/throw.d.ts +4 -0
  48. package/dist/result/throw.d.ts.map +1 -0
  49. package/dist/result/throw.js +8 -0
  50. package/dist/result/throw.js.map +1 -0
  51. package/dist/validation.d.ts +126 -0
  52. package/dist/validation.d.ts.map +1 -0
  53. package/dist/validation.js +240 -0
  54. package/dist/validation.js.map +1 -0
  55. package/dist/variant.d.ts +97 -0
  56. package/dist/variant.d.ts.map +1 -0
  57. package/dist/variant.js +102 -0
  58. package/dist/variant.js.map +1 -0
  59. package/docs/API.md +543 -0
  60. package/docs/GUIDE.md +739 -0
  61. package/docs/SEMANTICS.md +319 -0
  62. package/docs/laws/evidence.md +113 -0
  63. package/docs/laws/identity.md +126 -0
  64. package/docs/laws/match.md +163 -0
  65. package/docs/laws/option.md +100 -0
  66. package/docs/laws/protocol.md +152 -0
  67. package/docs/laws/result.md +124 -0
  68. package/docs/laws/validation.md +111 -0
  69. package/docs/laws/variant.md +251 -0
  70. package/package.json +87 -3
  71. package/src/evidence.ts +120 -0
  72. package/src/identity.ts +129 -0
  73. package/src/index.ts +54 -0
  74. package/src/internal/callback.ts +54 -0
  75. package/src/internal/promise-like.ts +32 -0
  76. package/src/internal/scalar.ts +43 -0
  77. package/src/option.ts +214 -0
  78. package/src/protocol.ts +174 -0
  79. package/src/result/capture.ts +209 -0
  80. package/src/result/core.ts +229 -0
  81. package/src/result/index.ts +3 -0
  82. package/src/result/throw.ts +13 -0
  83. package/src/validation.ts +491 -0
  84. package/src/variant.ts +363 -0
@@ -0,0 +1,12 @@
1
+ export const isPromiseLike = (value) => {
2
+ if ((typeof value !== "object" && typeof value !== "function") || value === null) {
3
+ return false;
4
+ }
5
+ return typeof value.then === "function";
6
+ };
7
+ export const assertNotPromiseLike = (value, message) => {
8
+ if (isPromiseLike(value)) {
9
+ throw new TypeError(message);
10
+ }
11
+ };
12
+ //# sourceMappingURL=promise-like.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-like.js","sourceRoot":"","sources":["../../src/internal/promise-like.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAiC,EAAE;IAC7E,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAQ,KAAqC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAE,OAAe,EAAQ,EAAE;IAC5E,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /** Immutable scalar carriers that can hold Selaws phantom meaning. */
2
+ export type Scalar = string | number | bigint | boolean | symbol;
3
+ export type Token = string | symbol;
4
+ type IsUnion<T, Whole = T> = T extends Whole ? [Whole] extends [T] ? false : true : never;
5
+ type SingleToken<Key extends Token> = true extends IsUnion<Key> ? never : Record<never, never> extends Record<Key, never> ? never : Key;
6
+ type SingletonSymbolMembers<Key extends symbol> = Key extends unknown ? SingleToken<Key> : never;
7
+ export type NarrowSymbolSet<Key extends symbol> = [Key] extends [
8
+ SingletonSymbolMembers<Key>
9
+ ] ? Key : never;
10
+ export type SingleSymbol<Key extends symbol> = SingleToken<Key>;
11
+ export type SingleName<Name extends string> = SingleToken<Name>;
12
+ export declare const isString: (value: unknown) => value is string;
13
+ export declare const isNumber: (value: unknown) => value is number;
14
+ export declare const isBigint: (value: unknown) => value is bigint;
15
+ export declare const isBoolean: (value: unknown) => value is boolean;
16
+ export declare const isSymbol: (value: unknown) => value is symbol;
17
+ export {};
18
+ //# sourceMappingURL=scalar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar.d.ts","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjE,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,GACxC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GACjB,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAIV,KAAK,WAAW,CAAC,GAAG,SAAS,KAAK,IAChC,IAAI,SAAS,OAAO,CAAC,GAAG,CAAC,GACrB,KAAK,GACL,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAC7C,KAAK,GACL,GAAG,CAAC;AAEZ,KAAK,sBAAsB,CAAC,GAAG,SAAS,MAAM,IAAI,GAAG,SAAS,OAAO,GACjE,WAAW,CAAC,GAAG,CAAC,GAChB,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS;IAC9D,sBAAsB,CAAC,GAAG,CAAC;CAC5B,GACG,GAAG,GACH,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,CAAC,GAAG,SAAS,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,CAAC,IAAI,SAAS,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AAEhE,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAmC,CAAC;AAEvF,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAmC,CAAC;AAEvF,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAmC,CAAC;AAEvF,eAAO,MAAM,SAAS,UAAW,OAAO,KAAG,KAAK,IAAI,OACxB,CAAC;AAE7B,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAmC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const isString = (value) => typeof value === "string";
2
+ export const isNumber = (value) => typeof value === "number";
3
+ export const isBigint = (value) => typeof value === "bigint";
4
+ export const isBoolean = (value) => typeof value === "boolean";
5
+ export const isSymbol = (value) => typeof value === "symbol";
6
+ //# sourceMappingURL=scalar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAEvF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAEvF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;AAEvF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAoB,EAAE,CAC5D,OAAO,KAAK,KAAK,SAAS,CAAC;AAE7B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC"}
@@ -0,0 +1,90 @@
1
+ import type { CallbackResult } from "./internal/callback.js";
2
+ import { type NotPromiseLike } from "./internal/promise-like.js";
3
+ /** A present Option value. */
4
+ export type Some<T> = Readonly<{
5
+ some: true;
6
+ value: T;
7
+ }>;
8
+ /** Reasonless absence. */
9
+ export type None = Readonly<{
10
+ some: false;
11
+ }>;
12
+ /** Explicit presence or absence. */
13
+ export type Option<T> = Some<T> | None;
14
+ /** Extracts the present value type from an Option union. */
15
+ export type OptionValue<O> = O extends Some<infer T> ? T : never;
16
+ type OptionValues<O extends readonly Option<unknown>[]> = {
17
+ [K in keyof O]: OptionValue<O[K]>;
18
+ };
19
+ type SynchronousReturn<T> = [T] extends [NotPromiseLike<T>] ? unknown : never;
20
+ type IsMutableArray<Value> = Value extends unknown[] ? true : false;
21
+ type StableArrayInput<Value extends readonly unknown[]> = true extends IsMutableArray<Value> ? never : unknown;
22
+ /** Constructs a present Option value. */
23
+ export declare const some: <T>(value: T) => Option<T>;
24
+ /** Constructs reasonless absence. */
25
+ export declare const none: () => Option<never>;
26
+ /** Narrows an Option to Some. */
27
+ export declare const isSome: <T>(option: Option<T>) => option is Some<T>;
28
+ /** Narrows an Option to None. */
29
+ export declare const isNone: <T>(option: Option<T>) => option is None;
30
+ /** Eliminates an Option under the shared Match law. */
31
+ export declare const match: <T, Some extends (this: void, value: NoInfer<T>) => unknown, None extends (this: void) => unknown>(option: Option<T>, arms: Readonly<{
32
+ some: Some;
33
+ none: None;
34
+ }>) => CallbackResult<Some> | CallbackResult<None>;
35
+ /** Transforms the Some value and preserves None. */
36
+ export declare const map: <T, U>(option: Option<T>, transform: (value: T) => U) => Option<U>;
37
+ /** Sequences an Option-producing computation when a value is present. */
38
+ export declare const andThen: <T, U>(option: Option<T>, next: (value: T) => Option<U>) => Option<U>;
39
+ /** Lazily provides another Option when the input is None. */
40
+ export declare const orElse: <T, U>(option: Option<T>, fallback: () => Option<U>) => Option<T | U>;
41
+ /** Removes one explicit nested Option layer. */
42
+ export declare const flatten: <T>(option: Option<Option<T>>) => Option<T>;
43
+ /** Retains Some when a type-guard predicate accepts its value. */
44
+ export declare function filter<T, U extends T>(option: Option<T>, predicate: (value: T) => value is U): Option<U>;
45
+ /** Retains Some when the predicate accepts its value. */
46
+ export declare function filter<T>(option: Option<T>, predicate: (value: T) => boolean): Option<T>;
47
+ /** Synchronously observes Some and returns the original Option. */
48
+ export declare const inspect: <T, R>(option: Option<T>, observe: ((value: T) => R) & SynchronousReturn<R>) => Option<T>;
49
+ /** Returns the Some value or an eager fallback. */
50
+ export declare const unwrapOr: <T, U>(option: Option<T>, fallback: U) => T | U;
51
+ /** Returns the Some value or evaluates a lazy fallback. */
52
+ export declare const unwrapOrElse: <T, U>(option: Option<T>, fallback: () => U) => T | U;
53
+ /**
54
+ * Combines already-materialized Options.
55
+ *
56
+ * All Some values produce a position-preserving tuple; any None produces None.
57
+ */
58
+ export declare const all: <const O extends readonly Option<unknown>[]>(options: O & StableArrayInput<O>) => Option<OptionValues<O>>;
59
+ /** Maps exactly undefined to None and every other value to Some. */
60
+ export declare const fromUndefined: <T>(value: T) => Option<Exclude<T, undefined>>;
61
+ /** Maps null or undefined to None and every other value to Some. */
62
+ export declare const fromNullable: <T>(value: T) => Option<NonNullable<T>>;
63
+ /** Maps None to undefined and returns the Some value unchanged. */
64
+ export declare const toUndefined: <T>(option: Option<T>) => T | undefined;
65
+ /** Maps None to null and returns the Some value unchanged. */
66
+ export declare const toNullable: <T>(option: Option<T>) => T | null;
67
+ type OptionFacade = Readonly<{
68
+ all: typeof all;
69
+ andThen: typeof andThen;
70
+ filter: typeof filter;
71
+ flatten: typeof flatten;
72
+ fromNullable: typeof fromNullable;
73
+ fromUndefined: typeof fromUndefined;
74
+ inspect: typeof inspect;
75
+ isNone: typeof isNone;
76
+ isSome: typeof isSome;
77
+ map: typeof map;
78
+ match: typeof match;
79
+ none: typeof none;
80
+ orElse: typeof orElse;
81
+ some: typeof some;
82
+ toNullable: typeof toNullable;
83
+ toUndefined: typeof toUndefined;
84
+ unwrapOr: typeof unwrapOr;
85
+ unwrapOrElse: typeof unwrapOrElse;
86
+ }>;
87
+ /** Facade for Option construction, transformation, elimination, and collection. */
88
+ export declare const Option: OptionFacade;
89
+ export {};
90
+ //# sourceMappingURL=option.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.d.ts","sourceRoot":"","sources":["../src/option.ts"],"names":[],"mappings":"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"}
package/dist/option.js ADDED
@@ -0,0 +1,96 @@
1
+ import { assertNotPromiseLike } from "./internal/promise-like.js";
2
+ /** Constructs a present Option value. */
3
+ export const some = (value) => ({
4
+ some: true,
5
+ value,
6
+ });
7
+ /** Constructs reasonless absence. */
8
+ export const none = () => ({
9
+ some: false,
10
+ });
11
+ /** Narrows an Option to Some. */
12
+ export const isSome = (option) => option.some;
13
+ /** Narrows an Option to None. */
14
+ export const isNone = (option) => !option.some;
15
+ /** Eliminates an Option under the shared Match law. */
16
+ export const match = (option, arms) => {
17
+ if (option.some) {
18
+ const selected = arms.some;
19
+ return selected(option.value);
20
+ }
21
+ const selected = arms.none;
22
+ return selected();
23
+ };
24
+ /** Transforms the Some value and preserves None. */
25
+ export const map = (option, transform) => option.some ? some(transform(option.value)) : option;
26
+ /** Sequences an Option-producing computation when a value is present. */
27
+ export const andThen = (option, next) => (option.some ? next(option.value) : option);
28
+ /** Lazily provides another Option when the input is None. */
29
+ export const orElse = (option, fallback) => (option.some ? option : fallback());
30
+ /** Removes one explicit nested Option layer. */
31
+ export const flatten = (option) => option.some ? option.value : option;
32
+ export function filter(option, predicate) {
33
+ if (!option.some) {
34
+ return option;
35
+ }
36
+ return predicate(option.value) ? option : none();
37
+ }
38
+ /** Synchronously observes Some and returns the original Option. */
39
+ export const inspect = (option, observe) => {
40
+ if (option.some) {
41
+ const completion = observe(option.value);
42
+ assertNotPromiseLike(completion, "Option.inspect() expects a synchronous observer.");
43
+ }
44
+ return option;
45
+ };
46
+ /** Returns the Some value or an eager fallback. */
47
+ export const unwrapOr = (option, fallback) => option.some ? option.value : fallback;
48
+ /** Returns the Some value or evaluates a lazy fallback. */
49
+ export const unwrapOrElse = (option, fallback) => option.some ? option.value : fallback();
50
+ /**
51
+ * Combines already-materialized Options.
52
+ *
53
+ * All Some values produce a position-preserving tuple; any None produces None.
54
+ */
55
+ export const all = (options) => {
56
+ const values = [];
57
+ const length = options.length;
58
+ for (let index = 0; index < length; index += 1) {
59
+ const option = options[index];
60
+ if (!option.some) {
61
+ return none();
62
+ }
63
+ values.push(option.value);
64
+ }
65
+ return some(values);
66
+ };
67
+ /** Maps exactly undefined to None and every other value to Some. */
68
+ export const fromUndefined = (value) => value === undefined ? none() : some(value);
69
+ /** Maps null or undefined to None and every other value to Some. */
70
+ export const fromNullable = (value) => value === undefined || value === null ? none() : some(value);
71
+ /** Maps None to undefined and returns the Some value unchanged. */
72
+ export const toUndefined = (option) => option.some ? option.value : undefined;
73
+ /** Maps None to null and returns the Some value unchanged. */
74
+ export const toNullable = (option) => option.some ? option.value : null;
75
+ /** Facade for Option construction, transformation, elimination, and collection. */
76
+ export const Option = {
77
+ all,
78
+ andThen,
79
+ filter,
80
+ flatten,
81
+ fromNullable,
82
+ fromUndefined,
83
+ inspect,
84
+ isNone,
85
+ isSome,
86
+ map,
87
+ match,
88
+ none,
89
+ orElse,
90
+ some,
91
+ toNullable,
92
+ toUndefined,
93
+ unwrapOr,
94
+ unwrapOrElse,
95
+ };
96
+ //# sourceMappingURL=option.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option.js","sourceRoot":"","sources":["../src/option.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { Scalar } from "./internal/scalar.js";
2
+ /** Scalar identifiers used as Protocol states. */
3
+ export type State = Scalar;
4
+ /** Scalar identifiers used to distinguish transitions. */
5
+ export type Label = Scalar;
6
+ /** One admissible labeled transition. */
7
+ export type Transition<From extends State = State, Via extends Label = Label, To extends State = State> = readonly [from: From, label: Via, to: To];
8
+ type TransitionUnion<Transitions extends readonly Transition[]> = Transitions[number];
9
+ type SourceOf<One> = One extends readonly [infer From extends State, Label, State] ? From : never;
10
+ type LabelOf<One> = One extends readonly [State, infer Via extends Label, State] ? Via : never;
11
+ type TargetOf<One> = One extends readonly [State, Label, infer To extends State] ? To : never;
12
+ /** All state identifiers that occur as a source or target. */
13
+ export type States<Transitions extends readonly Transition[]> = SourceOf<TransitionUnion<Transitions>> | TargetOf<TransitionUnion<Transitions>>;
14
+ /** All transition labels that occur in a declaration. */
15
+ export type Labels<Transitions extends readonly Transition[]> = LabelOf<TransitionUnion<Transitions>>;
16
+ type NextFrom<One, From extends State, Via extends Label> = One extends readonly [
17
+ infer Source extends State,
18
+ infer EdgeLabel extends Label,
19
+ infer To extends State
20
+ ] ? [Source & From] extends [never] ? never : [EdgeLabel & Via] extends [never] ? never : To : never;
21
+ /** The statically admissible targets for one source state and transition label. */
22
+ export type Next<Transitions extends readonly Transition[], From extends States<Transitions>, Via extends Labels<Transitions>> = NextFrom<TransitionUnion<Transitions>, From, Via>;
23
+ type IsMutableArray<Value> = Value extends unknown[] ? true : false;
24
+ type ClosedTransitions<Transitions extends readonly Transition[]> = true extends IsMutableArray<Transitions> ? never : true extends IsMutableArray<Transitions[number]> ? never : Transitions;
25
+ /** Runtime membership for one immutable labeled transition relation. */
26
+ export type Protocol<Transitions extends readonly Transition[]> = Readonly<{
27
+ allows<From extends States<Transitions>, Via extends Labels<Transitions>, To extends States<Transitions>>(from: From, label: Via, to: To): boolean;
28
+ }>;
29
+ /**
30
+ * Defines one immutable admissible labeled transition relation.
31
+ *
32
+ * The runtime relation snapshots the supplied triples and uses SameValueZero
33
+ * equality through Map and Set.
34
+ */
35
+ export declare const define: <const Transitions extends readonly Transition[]>(transitions: Transitions & (ClosedTransitions<Transitions> extends never ? never : unknown)) => Protocol<Transitions>;
36
+ type ProtocolFacade = Readonly<{
37
+ define: typeof define;
38
+ }>;
39
+ /** Admissible labeled transition relations. */
40
+ export declare const Protocol: ProtocolFacade;
41
+ export {};
42
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ const isScalarIdentifier = (value) => {
2
+ switch (typeof value) {
3
+ case "string":
4
+ case "number":
5
+ case "bigint":
6
+ case "boolean":
7
+ case "symbol":
8
+ return true;
9
+ default:
10
+ return false;
11
+ }
12
+ };
13
+ /**
14
+ * Defines one immutable admissible labeled transition relation.
15
+ *
16
+ * The runtime relation snapshots the supplied triples and uses SameValueZero
17
+ * equality through Map and Set.
18
+ */
19
+ export const define = (transitions) => {
20
+ if (!Array.isArray(transitions)) {
21
+ throw new TypeError("Protocol declarations must be arrays.");
22
+ }
23
+ const relation = new Map();
24
+ const length = transitions.length;
25
+ for (let index = 0; index < length; index += 1) {
26
+ if (!Object.hasOwn(transitions, index)) {
27
+ throw new TypeError("Protocol declarations must contain own transition entries.");
28
+ }
29
+ const transition = transitions[index];
30
+ if (!Array.isArray(transition) ||
31
+ transition.length !== 3 ||
32
+ !Object.hasOwn(transition, 0) ||
33
+ !Object.hasOwn(transition, 1) ||
34
+ !Object.hasOwn(transition, 2)) {
35
+ throw new TypeError("Protocol transitions must be own [from, label, to] triples.");
36
+ }
37
+ const from = transition[0];
38
+ const label = transition[1];
39
+ const to = transition[2];
40
+ if (!isScalarIdentifier(from) ||
41
+ !isScalarIdentifier(label) ||
42
+ !isScalarIdentifier(to)) {
43
+ throw new TypeError("Protocol states and labels must be scalar identifiers.");
44
+ }
45
+ let labels = relation.get(from);
46
+ if (labels === undefined) {
47
+ labels = new Map();
48
+ relation.set(from, labels);
49
+ }
50
+ let targets = labels.get(label);
51
+ if (targets === undefined) {
52
+ targets = new Set();
53
+ labels.set(label, targets);
54
+ }
55
+ targets.add(to);
56
+ }
57
+ return Object.freeze({
58
+ allows(from, label, to) {
59
+ return relation.get(from)?.get(label)?.has(to) ?? false;
60
+ },
61
+ });
62
+ };
63
+ /** Admissible labeled transition relations. */
64
+ export const Protocol = {
65
+ define,
66
+ };
67
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type NotPromiseLike } from "../internal/promise-like.js";
2
+ import { type Result } from "./core.js";
3
+ type SyncPrimitive = string | number | boolean | bigint | symbol | null | undefined;
4
+ type NonThenableObject = object & {
5
+ readonly then?: never;
6
+ };
7
+ type OverloadUnion<Callable, Partial = unknown> = Callable extends (this: infer This, ...args: infer Args) => infer Return ? Partial extends Callable ? never : OverloadUnion<Partial & Callable, Partial & ((this: This, ...args: Args) => Return)> | ((this: This, ...args: Args) => Return) : never;
8
+ type IsUnion<T, Whole = T> = T extends unknown ? [Whole] extends [T] ? false : true : never;
9
+ type UnionToIntersection<T> = (T extends unknown ? (value: T) => void : never) extends (value: infer Intersection) => void ? Intersection : never;
10
+ type HasAsyncOverload<Callable> = true extends (OverloadUnion<Callable> extends infer One ? One extends (...args: never[]) => infer Return ? [Return] extends [NotPromiseLike<Return>] ? false : true : never : never) ? true : false;
11
+ type HasNonPromiseOverload<Callable> = true extends (OverloadUnion<Callable> extends infer One ? One extends (...args: never[]) => infer Return ? [Return] extends [PromiseLike<unknown>] ? false : true : never : never) ? true : false;
12
+ type SyncWrappedOne<Callable, E> = Callable extends (this: infer This, ...args: infer Args) => infer Return ? (this: This, ...args: Args) => Result<Return, E> : never;
13
+ type SyncWrappedOverloads<Callable, E> = UnionToIntersection<OverloadUnion<Callable> extends infer One ? One extends unknown ? SyncWrappedOne<One, E> : never : never>;
14
+ type AsyncWrappedOne<Callable, E> = Callable extends (this: infer This, ...args: infer Args) => infer Return ? (this: This, ...args: Args) => Promise<Result<Awaited<Return>, E>> : never;
15
+ type AsyncWrappedOverloads<Callable, E> = UnionToIntersection<OverloadUnion<Callable> extends infer One ? One extends unknown ? AsyncWrappedOne<One, E> : never : never>;
16
+ /**
17
+ * Captures one synchronous invocation boundary as Result.
18
+ *
19
+ * Thrown values are mapped from unknown into the caller's recoverable error
20
+ * type. Promise-like returns are rejected as a sync-boundary contract error.
21
+ * A thrown mapper remains an abrupt JavaScript completion.
22
+ */
23
+ export declare function attempt<T extends SyncPrimitive, E>(read: () => T, mapThrown: (caught: unknown) => E): Result<T, E>;
24
+ export declare function attempt<T extends NonThenableObject, E>(read: () => T, mapThrown: (caught: unknown) => E): Result<T, E>;
25
+ export declare function attempt<T, E>(read: () => NotPromiseLike<T>, mapThrown: (caught: unknown) => E): Result<T, E>;
26
+ /**
27
+ * Captures synchronous invocation plus Promise rejection as Result.
28
+ *
29
+ * The returned Promise resolves to Result; the mapper defines the recoverable
30
+ * error vocabulary for both abrupt paths.
31
+ */
32
+ export declare const attemptAsync: <T, E>(read: () => PromiseLike<T>, mapThrown: (caught: unknown) => E) => Promise<Result<Awaited<T>, E>>;
33
+ /** Wraps a synchronous function with the attempt boundary while preserving this and arguments. */
34
+ export declare function wrap<Callable extends (...args: never[]) => unknown, E>(read: Callable & (true extends IsUnion<Callable> ? never : unknown) & (true extends IsUnion<OverloadUnion<Callable>> ? unknown : never) & (HasAsyncOverload<Callable> extends false ? unknown : never), mapThrown: (caught: unknown) => E): SyncWrappedOverloads<Callable, E>;
35
+ export declare function wrap<This, Args extends unknown[], T extends SyncPrimitive, E>(read: (this: This, ...args: Args) => T, mapThrown: (caught: unknown) => E): (this: This, ...args: Args) => Result<T, E>;
36
+ export declare function wrap<This, Args extends unknown[], T extends NonThenableObject, E>(read: (this: This, ...args: Args) => T, mapThrown: (caught: unknown) => E): (this: This, ...args: Args) => Result<T, E>;
37
+ export declare function wrap<This, Args extends unknown[], T, E>(read: (this: This, ...args: Args) => NotPromiseLike<T>, mapThrown: (caught: unknown) => E): (this: This, ...args: Args) => Result<T, E>;
38
+ /** Wraps an async function with the attemptAsync boundary while preserving this and arguments. */
39
+ export declare function wrapAsync<Callable extends (...args: never[]) => unknown, E>(read: Callable & (true extends IsUnion<Callable> ? never : unknown) & (true extends IsUnion<OverloadUnion<Callable>> ? unknown : never) & (HasNonPromiseOverload<Callable> extends false ? unknown : never), mapThrown: (caught: unknown) => E): AsyncWrappedOverloads<Callable, E>;
40
+ export declare function wrapAsync<This, Args extends unknown[], T, E>(read: (this: This, ...args: Args) => PromiseLike<T>, mapThrown: (caught: unknown) => E): (this: This, ...args: Args) => Promise<Result<Awaited<T>, E>>;
41
+ export {};
42
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/result/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEjD,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEpF,KAAK,iBAAiB,GAAG,MAAM,GAAG;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,KAAK,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,IAAI,QAAQ,SAAS,CACjE,IAAI,EAAE,MAAM,IAAI,EAChB,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,OAAO,SAAS,QAAQ,GACtB,KAAK,GAED,aAAa,CACX,OAAO,GAAG,QAAQ,EAClB,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAClD,GACD,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GAC7C,KAAK,CAAC;AAEV,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,OAAO,GAC1C,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GACjB,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAEV,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CACrF,KAAK,EAAE,MAAM,YAAY,KACtB,IAAI,GACL,YAAY,GACZ,KAAK,CAAC;AAEV,KAAK,gBAAgB,CAAC,QAAQ,IAAI,IAAI,SAAS,CAC7C,aAAa,CAAC,QAAQ,CAAC,SAAS,MAAM,GAAG,GACrC,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM,MAAM,GAC5C,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GACvC,KAAK,GACL,IAAI,GACN,KAAK,GACP,KAAK,CACV,GACG,IAAI,GACJ,KAAK,CAAC;AAEV,KAAK,qBAAqB,CAAC,QAAQ,IAAI,IAAI,SAAS,CAClD,aAAa,CAAC,QAAQ,CAAC,SAAS,MAAM,GAAG,GACrC,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM,MAAM,GAC5C,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GACrC,KAAK,GACL,IAAI,GACN,KAAK,GACP,KAAK,CACV,GACG,IAAI,GACJ,KAAK,CAAC;AAEV,KAAK,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,SAAS,CAClD,IAAI,EAAE,MAAM,IAAI,EAChB,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAChD,KAAK,CAAC;AAEV,KAAK,oBAAoB,CAAC,QAAQ,EAAE,CAAC,IAAI,mBAAmB,CAC1D,aAAa,CAAC,QAAQ,CAAC,SAAS,MAAM,GAAG,GACrC,GAAG,SAAS,OAAO,GACjB,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GACtB,KAAK,GACP,KAAK,CACV,CAAC;AAEF,KAAK,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,SAAS,CACnD,IAAI,EAAE,MAAM,IAAI,EAChB,GAAG,IAAI,EAAE,MAAM,IAAI,KAChB,MAAM,MAAM,GACb,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAClE,KAAK,CAAC;AAEV,KAAK,qBAAqB,CAAC,QAAQ,EAAE,CAAC,IAAI,mBAAmB,CAC3D,aAAa,CAAC,QAAQ,CAAC,SAAS,MAAM,GAAG,GACrC,GAAG,SAAS,OAAO,GACjB,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,GACvB,KAAK,GACP,KAAK,CACV,CAAC;AAkBF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,EAChD,IAAI,EAAE,MAAM,CAAC,EACb,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhB,wBAAgB,OAAO,CAAC,CAAC,SAAS,iBAAiB,EAAE,CAAC,EACpD,IAAI,EAAE,MAAM,CAAC,EACb,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhB,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAC1B,IAAI,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,EAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAShB;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAU,CAAC,EAAE,CAAC,QAC/B,MAAM,WAAW,CAAC,CAAC,CAAC,aACf,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,KAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAM/B,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,IAAI,CAAC,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,EACpE,IAAI,EAAE,QAAQ,GACZ,CAAC,IAAI,SAAS,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,GAClD,CAAC,IAAI,SAAS,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,GACjE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,EAC9D,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,oBAAoB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAErC,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,aAAa,EAAE,CAAC,EAC3E,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EACtC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,iBAAiB,EAAE,CAAC,EAC/E,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EACtC,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EACrD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,EACtD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAW/C,kGAAkG;AAClG,wBAAgB,SAAS,CAAC,QAAQ,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC,EACzE,IAAI,EAAE,QAAQ,GACZ,CAAC,IAAI,SAAS,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC,GAClD,CAAC,IAAI,SAAS,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,GAAG,KAAK,CAAC,GACjE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,EACnE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEtC,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAC1D,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,EACnD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAChC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { assertNotPromiseLike } from "../internal/promise-like.js";
2
+ import { err, ok } from "./core.js";
3
+ const attemptRuntime = (read, mapThrown) => {
4
+ let value;
5
+ try {
6
+ value = read();
7
+ }
8
+ catch (caught) {
9
+ return err(mapThrown(caught));
10
+ }
11
+ assertNotPromiseLike(value, "attempt() expects a synchronous thunk.");
12
+ return ok(value);
13
+ };
14
+ export function attempt(read, mapThrown) {
15
+ return attemptRuntime(read, mapThrown);
16
+ }
17
+ /**
18
+ * Captures synchronous invocation plus Promise rejection as Result.
19
+ *
20
+ * The returned Promise resolves to Result; the mapper defines the recoverable
21
+ * error vocabulary for both abrupt paths.
22
+ */
23
+ export const attemptAsync = async (read, mapThrown) => {
24
+ try {
25
+ return ok(await read());
26
+ }
27
+ catch (caught) {
28
+ return err(mapThrown(caught));
29
+ }
30
+ };
31
+ export function wrap(read, mapThrown) {
32
+ return function wrapped(...args) {
33
+ return attemptRuntime(() => Reflect.apply(read, this, args), mapThrown);
34
+ };
35
+ }
36
+ export function wrapAsync(read, mapThrown) {
37
+ return function wrappedAsync(...args) {
38
+ return attemptAsync(() => Reflect.apply(read, this, args), mapThrown);
39
+ };
40
+ }
41
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/result/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,WAAW,CAAC;AAwFjD,MAAM,cAAc,GAAG,CACrB,IAAa,EACb,SAAiC,EACnB,EAAE;IAChB,IAAI,KAAQ,CAAC;IAEb,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,oBAAoB,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC,CAAC;AAwBF,MAAM,UAAU,OAAO,CACrB,IAAa,EACb,SAAiC;IAEjC,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,IAA0B,EAC1B,SAAiC,EACD,EAAE;IAClC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CAAC;AA0BF,MAAM,UAAU,IAAI,CAClB,IAAsC,EACtC,SAAiC;IAEjC,OAAO,SAAS,OAAO,CAAa,GAAG,IAAU;QAC/C,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,SAAS,CACvB,IAAmD,EACnD,SAAiC;IAEjC,OAAO,SAAS,YAAY,CAE1B,GAAG,IAAU;QAEb,OAAO,YAAY,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { CallbackResult } from "../internal/callback.js";
2
+ import { type NotPromiseLike } from "../internal/promise-like.js";
3
+ import type { Option } from "../option.js";
4
+ import type { Validation, ValidationIssues } from "../validation.js";
5
+ /** A successful Result value. */
6
+ export type Ok<T> = Readonly<{
7
+ ok: true;
8
+ value: T;
9
+ }>;
10
+ /** A recoverable Result error value. */
11
+ export type Err<E> = Readonly<{
12
+ ok: false;
13
+ error: E;
14
+ }>;
15
+ /** Recoverable success or error with fail-fast composition. */
16
+ export type Result<T, E> = Ok<T> | Err<E>;
17
+ /** Native Promise composition around a Result value. */
18
+ export type AsyncResult<T, E> = Promise<Result<T, E>>;
19
+ /** Extracts the success value type from a Result union. */
20
+ export type ResultValue<R> = R extends Ok<infer T> ? T : never;
21
+ /** Extracts the error value type from a Result union. */
22
+ export type ResultError<R> = R extends Err<infer E> ? E : never;
23
+ type ResultValues<R extends readonly Result<unknown, unknown>[]> = {
24
+ [K in keyof R]: ResultValue<R[K]>;
25
+ };
26
+ type ValidationResultError<E> = [E] extends [never] ? never : ValidationIssues<E>;
27
+ type SynchronousReturn<T> = [T] extends [NotPromiseLike<T>] ? unknown : never;
28
+ type IsMutableArray<Value> = Value extends unknown[] ? true : false;
29
+ type StableArrayInput<Value extends readonly unknown[]> = true extends IsMutableArray<Value> ? never : unknown;
30
+ /** Constructs a successful Result and preserves the error axis as never. */
31
+ export declare const ok: <T>(value: T) => Result<T, never>;
32
+ /** Constructs an error Result and preserves the value axis as never. */
33
+ export declare const err: <E>(error: E) => Result<never, E>;
34
+ /** Narrows a Result to Ok. */
35
+ export declare const isOk: <T, E>(result: Result<T, E>) => result is Ok<T>;
36
+ /** Narrows a Result to Err. */
37
+ export declare const isErr: <T, E>(result: Result<T, E>) => result is Err<E>;
38
+ /** Eliminates a Result under the shared Match law. */
39
+ export declare const match: <T, E, OkHandler extends (this: void, value: NoInfer<T>) => unknown, ErrHandler extends (this: void, error: NoInfer<E>) => unknown>(result: Result<T, E>, arms: Readonly<{
40
+ ok: OkHandler;
41
+ err: ErrHandler;
42
+ }>) => CallbackResult<OkHandler> | CallbackResult<ErrHandler>;
43
+ /** Transforms Ok and preserves Err. */
44
+ export declare const map: <T, E, U>(result: Result<T, E>, transform: (value: T) => U) => Result<U, E>;
45
+ /** Transforms Err and preserves Ok. */
46
+ export declare const mapError: <T, E, F>(result: Result<T, E>, transform: (error: E) => F) => Result<T, F>;
47
+ /** Sequences a dependent Result-producing success step. */
48
+ export declare const andThen: <T, E, U, F>(result: Result<T, E>, next: (value: T) => Result<U, F>) => Result<U, E | F>;
49
+ /** Recovers from Err with another Result. */
50
+ export declare const orElse: <T, E, U, F>(result: Result<T, E>, recover: (error: E) => Result<U, F>) => Result<T | U, F>;
51
+ /** Removes one explicit nested Result layer. */
52
+ export declare const flatten: <T, E, F>(result: Result<Result<T, F>, E>) => Result<T, E | F>;
53
+ /** Synchronously observes Ok and returns the original Result. */
54
+ export declare const inspect: <T, E, R>(result: Result<T, E>, observe: ((value: T) => R) & SynchronousReturn<R>) => Result<T, E>;
55
+ /** Synchronously observes Err and returns the original Result. */
56
+ export declare const inspectError: <T, E, R>(result: Result<T, E>, observe: ((error: E) => R) & SynchronousReturn<R>) => Result<T, E>;
57
+ /** Returns the Ok value or an eager fallback. */
58
+ export declare const unwrapOr: <T, E, U>(result: Result<T, E>, fallback: U) => T | U;
59
+ /** Returns the Ok value or evaluates a lazy fallback from Err. */
60
+ export declare const unwrapOrElse: <T, E, U>(result: Result<T, E>, fallback: (error: E) => U) => T | U;
61
+ /**
62
+ * Combines already-materialized Results in input order.
63
+ *
64
+ * The first Err is returned; complete success preserves tuple positions.
65
+ */
66
+ export declare const all: <const R extends readonly Result<unknown, unknown>[]>(results: R & StableArrayInput<R>) => Result<ResultValues<R>, ResultError<R[number]>>;
67
+ /** Converts presence into Result, lazily creating an error for None. */
68
+ export declare const fromOption: <T, E>(option: Option<T>, onNone: () => E) => Result<T, E>;
69
+ /**
70
+ * Converts Validation into Result.
71
+ *
72
+ * Invalid contributes its complete non-empty issue collection as one Result
73
+ * error value.
74
+ */
75
+ export declare const fromValidation: <T, E>(validation: Validation<T, E>) => Result<T, ValidationResultError<E>>;
76
+ type ResultFacade = Readonly<{
77
+ all: typeof all;
78
+ andThen: typeof andThen;
79
+ err: typeof err;
80
+ flatten: typeof flatten;
81
+ fromOption: typeof fromOption;
82
+ fromValidation: typeof fromValidation;
83
+ inspect: typeof inspect;
84
+ inspectError: typeof inspectError;
85
+ isErr: typeof isErr;
86
+ isOk: typeof isOk;
87
+ map: typeof map;
88
+ mapError: typeof mapError;
89
+ match: typeof match;
90
+ ok: typeof ok;
91
+ orElse: typeof orElse;
92
+ unwrapOr: typeof unwrapOr;
93
+ unwrapOrElse: typeof unwrapOrElse;
94
+ }>;
95
+ /** Facade for Result construction, transformation, elimination, and collection. */
96
+ export declare const Result: ResultFacade;
97
+ export {};
98
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/result/core.ts"],"names":[],"mappings":"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"}