@goodbyenjn/utils 1.3.1 → 26.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.
@@ -1,40 +1,21 @@
1
- import { AsyncFn, Fn, NonEmptyTuple, SyncFn } from "./types-92e74e19.js";
1
+ import { jn as NonEmptyTuple, ri as AsyncFn, si as SyncFn } from "./chunk-a07ed28f.js";
2
2
 
3
- //#region src/result/types.d.ts
4
-
5
- /**
6
- * Presets for printing the `Err` result
7
- *
8
- * - "full" - Prints full details including context and stack trace.
9
- * - "standard" - Prints error message and context, but omits stack trace.
10
- * - "minimal" - Prints only the error message without context or stack trace.
11
- *
12
- * Default is "standard".
13
- */
14
- type PrintPresets = "full" | "standard" | "minimal";
15
- /**
16
- * Options for printing the `Err` result
17
- */
18
- interface PrintOptions {
19
- /**
20
- * The log level to use. Default is "error".
21
- */
22
- level?: "error" | "warn" | "info";
23
- /**
24
- * Whether to include the context messages. Default is `true`.
25
- */
26
- context?: boolean;
27
- /**
28
- * Whether to include the stack trace. Default is `false`.
29
- */
30
- stack?: boolean;
3
+ //#region src/result/error.d.ts
4
+ declare class ResultError extends Error {
5
+ #private;
6
+ static isResultError(value: unknown): value is ResultError;
7
+ constructor(message: string | undefined, error: unknown, contexts: string[], caller?: Function);
8
+ get msg(): string;
9
+ get ctx(): string[];
10
+ toString(): string;
31
11
  }
12
+ //#endregion
13
+ //#region src/result/types.d.ts
32
14
  type ExtractOkTypes<T extends readonly Result[]> = { [K in keyof T]: T[K] extends Result<infer U, unknown> ? U : never };
33
15
  type ExtractErrTypes<T extends readonly Result[]> = { [K in keyof T]: T[K] extends Result<unknown, infer E> ? E : never };
34
- type InferOkType<R> = R extends Result<infer T, unknown> ? T : never;
35
- type InferErrType<R> = R extends Result<unknown, infer E> ? E : never;
16
+ type InferOkType<R$1> = R$1 extends Result<infer T, unknown> ? T : never;
17
+ type InferErrType<R$1> = R$1 extends Result<unknown, infer E> ? E : never;
36
18
  type ResultAll<T extends readonly Result[]> = IsLiteralArray<T> extends 1 ? Traverse<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number]>;
37
- type ResultAllSettled<T extends readonly Result[]> = IsLiteralArray<T> extends 1 ? TraverseWithAllErrors<T> : Result<ExtractOkTypes<T>, ExtractErrTypes<T>[number][]>;
38
19
  type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, ...0[]];
39
20
  type CollectResults<T, Collected extends unknown[] = [], Depth extends number = 50> = [Depth] extends [never] ? [] : T extends [infer H, ...infer Rest] ? H extends Result<infer L, infer R> ? CollectResults<Rest, [...Collected, [L, R]], Prev[Depth]> : never : Collected;
40
21
  type Transpose<A, Transposed extends unknown[][] = [], Depth extends number = 10> = A extends [infer T, ...infer Rest] ? T extends [infer L, infer R] ? Transposed extends [infer PL, infer PR] ? PL extends unknown[] ? PR extends unknown[] ? Transpose<Rest, [[...PL, L], [...PR, R]], Prev[Depth]> : never : never : Transpose<Rest, [[L], [R]], Prev[Depth]> : Transposed : Transposed;
@@ -46,28 +27,41 @@ type IsLiteralArray<T> = T extends {
46
27
  length: infer L;
47
28
  } ? L extends number ? number extends L ? 0 : 1 : 0 : 0;
48
29
  type Traverse<T, Depth extends number = 5> = Combine<T, Depth> extends [infer Oks, infer Errs] ? Result<EmptyArrayToNever<Oks, 1>, MembersToUnion<Errs>> : never;
49
- type TraverseWithAllErrors<T, Depth extends number = 5> = Traverse<T, Depth> extends Result<infer Oks, infer Errs> ? Result<Oks, Errs[]> : never;
50
30
  //#endregion
51
31
  //#region src/result/result.d.ts
52
- declare abstract class Result<T = unknown, E = unknown> {
32
+ type Ok<T = unknown> = Result<T, never>;
33
+ type Err<E = unknown> = Result<never, E>;
34
+ declare class Result<T = unknown, E = unknown> {
35
+ #private;
53
36
  static ok(): Ok<void>;
54
37
  static ok<T>(value: T): Ok<T>;
55
38
  static err(): Err<void>;
56
39
  static err<E>(error: E): Err<E>;
57
- static try<T, E = unknown>(fn: SyncFn<T>): Result<T, E>;
58
- static try<T, E>(fn: SyncFn<T>, onThrow: (error: unknown) => E): Result<T, E>;
59
- static try<T, E = unknown>(fn: AsyncFn<T>): Promise<Result<Awaited<T>, E>>;
60
- static try<T, E>(fn: AsyncFn<T>, onThrowOrReject: (error: unknown) => E): Promise<Result<Awaited<T>, E>>;
61
- static try<T, E = unknown>(data: Promise<T>): Promise<Result<Awaited<T>, E>>;
62
- static try<T, E>(data: Promise<T>, onThrow: (error: unknown) => E): Promise<Result<Awaited<T>, E>>;
63
- static try<T, E = unknown>(data: T): Result<T, E>;
64
- static try<T, E>(data: T, onThrow: (error: unknown) => E): Result<T, E>;
40
+ /**
41
+ * Creates a `Result` from a callable that may throw or return a promise that may reject
42
+ */
43
+ static fromCallable<T, E = unknown>(callable: SyncFn<T>): Result<T, E>;
44
+ static fromCallable<T>(callable: SyncFn<T>, onThrow: ErrorConstructor): Result<T, Error>;
45
+ static fromCallable<T, E>(callable: SyncFn<T>, onThrow: (error: unknown) => E): Result<T, E>;
46
+ static fromCallable<T, E = unknown>(callable: AsyncFn<T>): Promise<Result<Awaited<T>, E>>;
47
+ static fromCallable<T>(callable: AsyncFn<T>, onThrowOrReject: ErrorConstructor): Promise<Result<Awaited<T>, Error>>;
48
+ static fromCallable<T, E>(callable: AsyncFn<T>, onThrowOrReject: (error: unknown) => E): Promise<Result<Awaited<T>, E>>;
49
+ /**
50
+ * Creates a safe callable that always returns a `Result`, catching any thrown errors or rejected promises
51
+ */
52
+ static toSafeCallable<A extends any[], T, E = unknown>(callable: SyncFn<T, A>): SyncFn<Result<T, E>, A>;
53
+ static toSafeCallable<A extends any[], T>(callable: SyncFn<T, A>, onThrow: ErrorConstructor): SyncFn<Result<T, Error>, A>;
54
+ static toSafeCallable<A extends any[], T, E>(callable: SyncFn<T, A>, onThrow: (error: unknown) => E): SyncFn<Result<T, E>, A>;
55
+ static toSafeCallable<A extends any[], T, E = unknown>(callable: AsyncFn<T, A>): AsyncFn<Result<Awaited<T>, E>, A>;
56
+ static toSafeCallable<A extends any[], T>(callable: AsyncFn<T, A>, onThrowOrReject: ErrorConstructor): AsyncFn<Result<Awaited<T>, Error>, A>;
57
+ static toSafeCallable<A extends any[], T, E>(callable: AsyncFn<T, A>, onThrowOrReject: (error: unknown) => E): AsyncFn<Result<Awaited<T>, E>, A>;
58
+ /**
59
+ * Combines multiple `Result` instances into one `Result` containing an array of all `Ok` values,
60
+ * or the first `Err` encountered
61
+ */
65
62
  static all<T extends NonEmptyTuple<Result>>(results: T): ResultAll<T>;
66
63
  static all<T extends readonly Result[]>(results: T): ResultAll<T>;
67
- static allSettled<T extends NonEmptyTuple<Result>>(results: T): ResultAllSettled<T>;
68
- static allSettled<T extends readonly Result[]>(results: T): ResultAllSettled<T>;
69
- protected readonly ctxs: (string | Fn<string>)[];
70
- abstract readonly ok: boolean;
64
+ private constructor();
71
65
  /**
72
66
  * Check if `Result` is `OK`
73
67
  */
@@ -87,7 +81,7 @@ declare abstract class Result<T = unknown, E = unknown> {
87
81
  /**
88
82
  * Maps `Result<T, E>` to `Result<U, E>`
89
83
  */
90
- map<U>(fn: (value: T) => U): Result<U, E>;
84
+ map<U$1>(fn: (value: T) => U$1): Result<U$1, E>;
91
85
  /**
92
86
  * Maps `Result<T, E>` to `Result<T, F>`
93
87
  */
@@ -95,23 +89,23 @@ declare abstract class Result<T = unknown, E = unknown> {
95
89
  /**
96
90
  * Returns a new `Result` by combining the current `Result` with another `Result`
97
91
  */
98
- and<R extends Result<unknown, E>>(result: R): Result<InferOkType<R>, E>;
99
- and<U>(result: Result<U, E>): Result<U, E>;
92
+ and<R$1 extends Result<unknown, E>>(result: R$1): Result<InferOkType<R$1>, E>;
93
+ and<U$1>(result: Result<U$1, E>): Result<U$1, E>;
100
94
  /**
101
95
  * Maps `Result<T, E>` to `Result<U, E | F>` with a function that returns a `Result`
102
96
  */
103
- andThen<R extends Result>(fn: (value: T) => R): Result<InferOkType<R>, InferErrType<R> | E>;
104
- andThen<U, F>(fn: (value: T) => Result<U, F>): Result<U, E | F>;
97
+ andThen<R$1 extends Result>(fn: (value: T) => R$1): Result<InferOkType<R$1>, InferErrType<R$1> | E>;
98
+ andThen<U$1, F>(fn: (value: T) => Result<U$1, F>): Result<U$1, E | F>;
105
99
  /**
106
100
  * Returns a new `Result` by combining the current `Result` with another `Result`
107
101
  */
108
- or<R extends Result<T, unknown>>(result: R): Result<T, InferErrType<R>>;
102
+ or<R$1 extends Result<T, unknown>>(result: R$1): Result<T, InferErrType<R$1>>;
109
103
  or<F>(result: Result<T, F>): Result<T, F>;
110
104
  /**
111
105
  * Maps `Result<T, E>` to `Result<T | U, F>` with a function that returns a `Result`
112
106
  */
113
- orElse<R extends Result>(fn: (error: E) => R): Result<InferOkType<R> | T, InferErrType<R>>;
114
- orElse<U, F>(fn: (error: E) => Result<U, F>): Result<T | U, F>;
107
+ orElse<R$1 extends Result>(fn: (error: E) => R$1): Result<InferOkType<R$1> | T, InferErrType<R$1>>;
108
+ orElse<U$1, F>(fn: (error: E) => Result<U$1, F>): Result<T | U$1, F>;
115
109
  /**
116
110
  * Calls the function with the value if `Result` is `Ok` and returns the result unchanged
117
111
  */
@@ -120,50 +114,41 @@ declare abstract class Result<T = unknown, E = unknown> {
120
114
  * Calls the function with the error if `Result` is `Err` and returns the result unchanged
121
115
  */
122
116
  inspectErr(fn: (error: E) => unknown): Result<T, E>;
117
+ /**
118
+ * Unwrap the `Ok` value, or throw an error if `Result` is `Err`
119
+ */
120
+ unwrap(message?: string | null): T;
121
+ /**
122
+ * Unwrap the `Err` value, or throw an error if `Result` is `Ok`
123
+ */
124
+ unwrapErr(message?: string | null): E;
123
125
  /**
124
126
  * Unwrap the `Ok` value, or return the provided value if `Result` is `Err`
125
127
  */
126
- unwrapOr<U>(defaultValue: U): T | U;
128
+ unwrapOr(defaultValue: T): T;
129
+ /**
130
+ * Unwrap the `Ok` value, or compute it from a function if `Result` is `Err`
131
+ */
132
+ unwrapOrElse(defaultValueGetter: (error: E) => T): T;
127
133
  /**
128
134
  * Matches the `Result` variant and executes the corresponding function
129
135
  */
130
- match<U, F = U>(ok: (value: T) => U, err: (error: E) => F): U | F;
136
+ match<U$1, F = U$1>(ok: (value: T) => U$1, err: (error: E) => F): U$1 | F;
131
137
  /**
132
138
  * Returns an iterable object that yields the `Ok` value and `Err` value
133
139
  */
134
140
  iter(): [ok: boolean, error: E, value: T];
135
141
  [Symbol.iterator](): Generator<Err<E>, T>;
136
142
  context(context: string): this;
137
- withContext(fn: Fn<string>): this;
138
- abstract get value(): T;
139
- abstract get error(): E;
140
- }
141
- declare class Ok<T = unknown> extends Result<T, never> {
142
- readonly ok = true;
143
- private readonly _value;
144
- constructor(value: T);
145
- get value(): T;
146
- get error(): never;
147
- }
148
- declare class Err<E = unknown> extends Result<never, E> {
149
- readonly ok = false;
150
- private readonly _error;
151
- private stack;
152
- constructor(error: E);
153
- get value(): never;
154
- get error(): E;
155
- print(): void;
156
- print(preset: PrintPresets): void;
157
- print(options: PrintOptions): void;
158
- private format;
143
+ toString(): string;
159
144
  }
160
145
  declare const ok: typeof Result.ok;
161
146
  declare const err: typeof Result.err;
162
147
  //#endregion
163
- //#region src/result/utils.d.ts
164
- declare function safeTry<T, E>(body: () => Generator<Err<E>, Result<T, E>>): Result<T, E>;
165
- declare function safeTry<YieldErr extends Err, GeneratorReturnResult extends Result>(body: () => Generator<YieldErr, GeneratorReturnResult>): Result<InferOkType<GeneratorReturnResult>, InferErrType<YieldErr> | InferErrType<GeneratorReturnResult>>;
166
- declare function safeTry<T, E>(body: () => AsyncGenerator<Err<E>, Result<T, E>>): Promise<Result<T, E>>;
167
- declare function safeTry<YieldErr extends Err, GeneratorReturnResult extends Result>(body: () => AsyncGenerator<YieldErr, GeneratorReturnResult>): Promise<Result<InferOkType<GeneratorReturnResult>, InferErrType<YieldErr> | InferErrType<GeneratorReturnResult>>>;
148
+ //#region src/result/helper.d.ts
149
+ declare function safeTry<T, E, This>(body: (this: This) => Generator<Err<E>, Result<T, E>>, self?: This): Result<T, E>;
150
+ declare function safeTry<YieldErr extends Err, GeneratorReturnResult extends Result, This>(body: (this: This) => Generator<YieldErr, GeneratorReturnResult>, self?: This): Result<InferOkType<GeneratorReturnResult>, InferErrType<YieldErr> | InferErrType<GeneratorReturnResult>>;
151
+ declare function safeTry<T, E, This>(body: (this: This) => AsyncGenerator<Err<E>, Result<T, E>>, self?: This): Promise<Result<T, E>>;
152
+ declare function safeTry<YieldErr extends Err, GeneratorReturnResult extends Result, This>(body: (this: This) => AsyncGenerator<YieldErr, GeneratorReturnResult>, self?: This): Promise<Result<InferOkType<GeneratorReturnResult>, InferErrType<YieldErr> | InferErrType<GeneratorReturnResult>>>;
168
153
  //#endregion
169
- export { Err, Ok, Result, err, ok, safeTry };
154
+ export { err as a, ExtractOkTypes as c, ResultAll as d, ResultError as f, Result as i, InferErrType as l, Err as n, ok as o, Ok as r, ExtractErrTypes as s, safeTry as t, InferOkType as u };