@zokugun/xtry 0.11.6 → 0.12.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,25 +1,28 @@
1
- import { type Result, type Failure, type Success } from './result.mjs';
2
- import { type NotPromise } from './utils/types.mjs';
3
- export type YResult<T, E, M> = Failure<E> | YSuccess<T> | YFailure<M>;
4
- export type YSuccess<T> = Success<T> & {
5
- success: true;
6
- };
7
- export type YFailure<M> = {
1
+ import type { Failure, Result, Success } from './result.mjs';
2
+ import type { NotPromise } from './utils/types.mjs';
3
+ export type AsyncYDResult<T = void, E = string, I = string> = Promise<YResult<T, E, I>>;
4
+ export type AsyncYResult<T, E, I> = Promise<YResult<T, E, I>>;
5
+ export type YDResult<T = void, E = string, I = string> = YResult<T, E, I>;
6
+ export type YFailure<I> = {
7
+ error: undefined;
8
8
  fails: false;
9
+ issue: I;
9
10
  success: false;
10
- miscue: M;
11
11
  value: undefined;
12
- error: undefined;
13
12
  };
13
+ export type YResult<T, E, I> = Failure<E> | YFailure<I> | YSuccess<T>;
14
+ export type YSuccess<T> = {
15
+ success: true;
16
+ } & Success<T>;
17
+ type YRResult<T, E> = Failure<E> | YSuccess<T>;
18
+ export declare function yep<T>(result: Success<T>): YSuccess<T>;
19
+ export declare function yerr<I>(issue: I): YFailure<I>;
14
20
  export declare function yok(): YSuccess<void>;
15
21
  export declare function yok<T>(value: T): YSuccess<T>;
16
- export declare function yerr<M>(miscue: M): YFailure<M>;
17
- type YRResult<T, E> = Failure<E> | YSuccess<T>;
18
22
  export declare function yres<T, E>(result: NotPromise<Result<T, E>>): YRResult<T, E>;
19
23
  export declare function yres<T, E>(result: Promise<Result<T, E>>): Promise<YRResult<T, E>>;
20
- export declare function yresSync<T, E>(result: NotPromise<Result<T, E>>): YRResult<T, E>;
21
24
  export declare function yresAsync<T, E>(promise: Promise<Result<T, E>>): Promise<YRResult<T, E>>;
22
- export declare function yep<T>(result: Success<T>): YSuccess<T>;
25
+ export declare function yresSync<T, E>(result: NotPromise<Result<T, E>>): YRResult<T, E>;
23
26
  export declare const YOK: Readonly<YSuccess<void>>;
24
27
  export declare const YOK_FALSE: Readonly<YSuccess<boolean>>;
25
28
  export declare const YOK_NULL: Readonly<YSuccess<null>>;
@@ -1,19 +1,25 @@
1
1
  import { isPromiseLike } from './utils/is-promise-like.mjs';
2
- export function yok(value) {
2
+ export function yep(result) {
3
3
  return {
4
- fails: false,
4
+ ...result,
5
5
  success: true,
6
- value: value,
7
- error: undefined,
8
6
  };
9
7
  }
10
- export function yerr(miscue) {
8
+ export function yerr(issue) {
11
9
  return {
10
+ error: undefined,
12
11
  fails: false,
12
+ issue,
13
13
  success: false,
14
- miscue,
15
14
  value: undefined,
15
+ };
16
+ }
17
+ export function yok(value) {
18
+ return {
16
19
  error: undefined,
20
+ fails: false,
21
+ success: true,
22
+ value: value,
17
23
  };
18
24
  }
19
25
  export function yres(result) {
@@ -22,21 +28,15 @@ export function yres(result) {
22
28
  }
23
29
  return yresSync(result);
24
30
  }
31
+ export async function yresAsync(promise) {
32
+ return promise.then(yresSync);
33
+ }
25
34
  export function yresSync(result) {
26
35
  if (result.fails) {
27
36
  return result;
28
37
  }
29
38
  return yep(result);
30
39
  }
31
- export async function yresAsync(promise) {
32
- return promise.then(yresSync);
33
- }
34
- export function yep(result) {
35
- return {
36
- ...result,
37
- success: true,
38
- };
39
- }
40
40
  export const YOK = Object.freeze(yok());
41
41
  export const YOK_FALSE = Object.freeze(yok(false));
42
42
  export const YOK_NULL = Object.freeze(yok(null));
@@ -1,20 +1,20 @@
1
- export type Success<T> = {
2
- fails: false;
3
- value: T;
4
- error: undefined;
5
- };
1
+ export type AsyncDResult<T = void, E = string> = AsyncResult<T, E>;
2
+ export type AsyncResult<T, E> = Promise<Result<T, E>>;
3
+ export type DResult<T = void, E = string> = Result<T, E>;
6
4
  export type Failure<E> = {
5
+ error: E;
7
6
  fails: true;
8
7
  value: undefined;
9
- error: E;
10
8
  };
11
- export type Result<T, E> = Success<T> | Failure<E>;
12
- export type AsyncResult<T, E> = Promise<Result<T, E>>;
13
- export type DResult<T = void, E = string> = Result<T, E>;
14
- export type AsyncDResult<T = void, E = string> = AsyncResult<T, E>;
9
+ export type Result<T, E> = Failure<E> | Success<T>;
10
+ export type Success<T> = {
11
+ error: undefined;
12
+ fails: false;
13
+ value: T;
14
+ };
15
+ export declare function err<E>(error: E): Failure<E>;
15
16
  export declare function ok(): Success<void>;
16
17
  export declare function ok<T>(value: T): Success<T>;
17
- export declare function err<E>(error: E): Failure<E>;
18
18
  export declare const OK: Readonly<Success<void>>;
19
19
  export declare const OK_FALSE: Readonly<Success<boolean>>;
20
20
  export declare const OK_NULL: Readonly<Success<null>>;
@@ -1,15 +1,15 @@
1
- export function ok(value) {
2
- return {
3
- fails: false,
4
- value: value,
5
- error: undefined,
6
- };
7
- }
8
1
  export function err(error) {
9
2
  return {
3
+ error,
10
4
  fails: true,
11
5
  value: undefined,
12
- error,
6
+ };
7
+ }
8
+ export function ok(value) {
9
+ return {
10
+ error: undefined,
11
+ fails: false,
12
+ value: value,
13
13
  };
14
14
  }
15
15
  export const OK = Object.freeze(ok());
@@ -1,12 +1,13 @@
1
1
  export type { XDeferAsync, XDeferSync } from './defer.mjs';
2
- export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './defer.mjs';
2
+ export { xdeferSync as xdefer, xdeferAsync, xdefer as xdeferUnknown } from './defer.mjs';
3
3
  export { parseJSON, parseJson } from './json.mjs';
4
- export type { YResult, YSuccess, YFailure } from './partial.mjs';
5
- export { yok, yerr, yres as yresUnknown, yresAsync, yresSync as yres, yep, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED } from './partial.mjs';
6
- export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.mjs';
7
- export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.mjs';
4
+ export type { AsyncYDResult, AsyncYResult, YDResult, YFailure, YResult, YSuccess } from './partial.mjs';
5
+ export { yep, yerr, yok, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED, yresSync as yres, yresAsync, yres as yresUnknown } from './partial.mjs';
6
+ export type { AsyncDResult, AsyncResult, DResult, Failure, Result, Success } from './result.mjs';
7
+ export { err, ok, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.mjs';
8
8
  export { stringifyError } from './stringify-error.mjs';
9
9
  export { toStringFailure } from './to-string-failure.mjs';
10
- export { xtry as xtryUnknown, xtryAsync, xtryAsyncIterable, xtrySync as xtry, xtrySyncIterable as xtryIterable } from './try.mjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.mjs';
12
- export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync as xtryify, xtryifySyncIterable as xtryifyIterable } from './tryify.mjs';
10
+ export { xtrySync as xtry, xtryAsync, xtryAsyncIterable, xtrySyncIterable as xtryIterable, xtry as xtryUnknown } from './try.mjs';
11
+ export type { AsyncFunction, AsyncFunctionResult, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncFunctionResult, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement } from './tryify.mjs';
12
+ export { xtryifySync as xtryify, xtryifyAsync, xtryifyAsyncIterable, xtryifySyncIterable as xtryifyIterable } from './tryify.mjs';
13
+ export { map, match, unwrap, unwrapOr } from './unwrap.mjs';
package/lib/esm/sync.mjs CHANGED
@@ -1,8 +1,9 @@
1
- export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './defer.mjs';
1
+ export { xdeferSync as xdefer, xdeferAsync, xdefer as xdeferUnknown } from './defer.mjs';
2
2
  export { parseJSON, parseJson } from './json.mjs';
3
- export { yok, yerr, yres as yresUnknown, yresAsync, yresSync as yres, yep, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED } from './partial.mjs';
4
- export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.mjs';
3
+ export { yep, yerr, yok, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED, yresSync as yres, yresAsync, yres as yresUnknown } from './partial.mjs';
4
+ export { err, ok, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.mjs';
5
5
  export { stringifyError } from './stringify-error.mjs';
6
6
  export { toStringFailure } from './to-string-failure.mjs';
7
- export { xtry as xtryUnknown, xtryAsync, xtryAsyncIterable, xtrySync as xtry, xtrySyncIterable as xtryIterable } from './try.mjs';
8
- export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync as xtryify, xtryifySyncIterable as xtryifyIterable } from './tryify.mjs';
7
+ export { xtrySync as xtry, xtryAsync, xtryAsyncIterable, xtrySyncIterable as xtryIterable, xtry as xtryUnknown } from './try.mjs';
8
+ export { xtryifySync as xtryify, xtryifyAsync, xtryifyAsyncIterable, xtryifySyncIterable as xtryifyIterable } from './tryify.mjs';
9
+ export { map, match, unwrap, unwrapOr } from './unwrap.mjs';
package/lib/esm/try.d.mts CHANGED
@@ -1,5 +1,5 @@
1
+ import type { MaybePromise, NonPromiseCallback, PromiseCallback } from './utils/types.mjs';
1
2
  import { type Result } from './result.mjs';
2
- import { type MaybePromise, type NonPromiseCallback, type PromiseCallback } from './utils/types.mjs';
3
3
  type AsyncIterableCallback<T> = (() => AsyncIterable<T>) | AsyncIterable<T>;
4
4
  type AsyncIterableResult<T, E> = AsyncIterable<VoidableResult<T, E>>;
5
5
  type ErrorHandler<T> = (error: unknown) => T | undefined;
@@ -10,8 +10,8 @@ export declare function xtry<T, E = unknown>(iterable: SyncIterableCallback<T>,
10
10
  export declare function xtry<T, E = unknown>(iterable: AsyncIterableCallback<T>, handler?: ErrorHandler<E>): AsyncIterableResult<T, E>;
11
11
  export declare function xtry<T, E = unknown>(func: NonPromiseCallback<T>, handler?: ErrorHandler<E>): VoidableResult<T, E>;
12
12
  export declare function xtry<T, E = unknown>(func: PromiseCallback<T>, handler?: ErrorHandler<E>): Promise<VoidableResult<T, E>>;
13
- export declare function xtrySync<T, E = unknown>(func: NonPromiseCallback<T>, handler?: ErrorHandler<E>): VoidableResult<T, E>;
14
13
  export declare function xtryAsync<T, E = unknown>(func: PromiseCallback<T>, handler?: ErrorHandler<E>): Promise<VoidableResult<T, E>>;
15
- export declare function xtrySyncIterable<T, E = unknown>(iterable: Iterable<T> | (() => Iterable<T>), handler?: ErrorHandler<E>): Iterable<VoidableResult<T, E>>;
16
- export declare function xtryAsyncIterable<T, E = unknown>(iterable: AsyncIterable<T> | Promise<AsyncIterable<T>> | (() => MaybePromise<AsyncIterable<T>>), handler?: ErrorHandler<E>): AsyncIterable<VoidableResult<T, E>>;
14
+ export declare function xtryAsyncIterable<T, E = unknown>(iterable: (() => MaybePromise<AsyncIterable<T>>) | AsyncIterable<T> | Promise<AsyncIterable<T>>, handler?: ErrorHandler<E>): AsyncIterable<VoidableResult<T, E>>;
15
+ export declare function xtrySync<T, E = unknown>(func: NonPromiseCallback<T>, handler?: ErrorHandler<E>): VoidableResult<T, E>;
16
+ export declare function xtrySyncIterable<T, E = unknown>(iterable: (() => Iterable<T>) | Iterable<T>, handler?: ErrorHandler<E>): Iterable<VoidableResult<T, E>>;
17
17
  export {};
package/lib/esm/try.mjs CHANGED
@@ -2,22 +2,15 @@ import { err, ok } from './result.mjs';
2
2
  import { isAsyncIterable } from './utils/is-async-iterable.mjs';
3
3
  import { isPromiseLike } from './utils/is-promise-like.mjs';
4
4
  import { isSyncIterable } from './utils/is-sync-iterable.mjs';
5
- function handleError(handler, error) {
6
- if (handler) {
7
- const newError = handler(error);
8
- if (newError !== undefined) {
9
- return err(newError);
10
- }
11
- }
12
- return err(error);
13
- } // }}}
14
5
  export function xtry(func, handler) {
15
6
  try {
16
7
  const value = typeof func === 'function' ? func() : func;
17
8
  if (isPromiseLike(value)) {
18
9
  return Promise.resolve(value).then(
19
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
20
- (value) => ok(value), (error) => handleError(handler, error));
10
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
11
+ (value) => ok(value),
12
+ // eslint-disable-next-line ts/use-unknown-in-catch-callback-variable
13
+ (error) => handleError(handler, error));
21
14
  }
22
15
  if (isAsyncIterable(value)) {
23
16
  return xtryAsyncIterable(value, handler);
@@ -25,17 +18,7 @@ export function xtry(func, handler) {
25
18
  if (isSyncIterable(value)) {
26
19
  return xtrySyncIterable(value, handler);
27
20
  }
28
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
29
- return ok(value);
30
- }
31
- catch (error) {
32
- return handleError(handler, error);
33
- }
34
- } // }}}
35
- export function xtrySync(func, handler) {
36
- try {
37
- const value = func();
38
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
21
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
39
22
  return ok(value);
40
23
  }
41
24
  catch (error) {
@@ -45,32 +28,33 @@ export function xtrySync(func, handler) {
45
28
  export async function xtryAsync(func, handler) {
46
29
  try {
47
30
  const value = await (func instanceof Promise || isAsyncIterable(func) ? func : Promise.resolve().then(func));
48
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
31
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
49
32
  return ok(value);
50
33
  }
51
34
  catch (error) {
52
35
  return handleError(handler, error);
53
36
  }
54
37
  } // }}}
55
- export function xtrySyncIterable(iterable, handler) {
56
- function* iterate() {
57
- let generator;
38
+ export function xtryAsyncIterable(iterable, handler) {
39
+ const generator = typeof iterable === 'function' ? iterable : () => iterable;
40
+ async function* iterate() {
41
+ let source;
58
42
  try {
59
- generator = typeof iterable === 'function' ? iterable() : iterable;
43
+ source = await Promise.resolve(generator());
60
44
  }
61
45
  catch (error) {
62
46
  yield handleError(handler, error);
63
47
  return;
64
48
  }
65
- if (!generator || typeof generator[Symbol.iterator] !== 'function') {
66
- yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
49
+ if (!source || typeof source[Symbol.asyncIterator] !== 'function') {
50
+ yield handleError(handler, new TypeError('xtryAsyncIterable expects an AsyncIterable'));
67
51
  return;
68
52
  }
69
- const iterator = generator[Symbol.iterator]();
53
+ const iterator = source[Symbol.asyncIterator]();
70
54
  while (true) {
71
55
  let step;
72
56
  try {
73
- step = iterator.next();
57
+ step = await iterator.next();
74
58
  }
75
59
  catch (error) {
76
60
  yield handleError(handler, error);
@@ -79,31 +63,41 @@ export function xtrySyncIterable(iterable, handler) {
79
63
  if (step.done) {
80
64
  return;
81
65
  }
66
+ // eslint-disable-next-line ts/no-explicit-any
82
67
  yield ok(step.value);
83
68
  }
84
69
  }
85
70
  return iterate();
86
71
  } // }}}
87
- export function xtryAsyncIterable(iterable, handler) {
88
- const generator = typeof iterable === 'function' ? iterable : async () => iterable;
89
- async function* iterate() {
90
- let source;
72
+ export function xtrySync(func, handler) {
73
+ try {
74
+ const value = func();
75
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
76
+ return ok(value);
77
+ }
78
+ catch (error) {
79
+ return handleError(handler, error);
80
+ }
81
+ } // }}}
82
+ export function xtrySyncIterable(iterable, handler) {
83
+ function* iterate() {
84
+ let generator;
91
85
  try {
92
- source = await Promise.resolve(generator());
86
+ generator = typeof iterable === 'function' ? iterable() : iterable;
93
87
  }
94
88
  catch (error) {
95
89
  yield handleError(handler, error);
96
90
  return;
97
91
  }
98
- if (!source || typeof source[Symbol.asyncIterator] !== 'function') {
99
- yield handleError(handler, new TypeError('xtryAsyncIterable expects an AsyncIterable'));
92
+ if (!generator || typeof generator[Symbol.iterator] !== 'function') {
93
+ yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
100
94
  return;
101
95
  }
102
- const iterator = source[Symbol.asyncIterator]();
96
+ const iterator = generator[Symbol.iterator]();
103
97
  while (true) {
104
98
  let step;
105
99
  try {
106
- step = await iterator.next();
100
+ step = iterator.next();
107
101
  }
108
102
  catch (error) {
109
103
  yield handleError(handler, error);
@@ -112,8 +106,18 @@ export function xtryAsyncIterable(iterable, handler) {
112
106
  if (step.done) {
113
107
  return;
114
108
  }
109
+ // eslint-disable-next-line ts/no-explicit-any
115
110
  yield ok(step.value);
116
111
  }
117
112
  }
118
113
  return iterate();
119
114
  } // }}}
115
+ function handleError(handler, error) {
116
+ if (handler) {
117
+ const newError = handler(error);
118
+ if (newError !== undefined) {
119
+ return err(newError);
120
+ }
121
+ }
122
+ return err(error);
123
+ } // }}}
@@ -1,5 +1,23 @@
1
- import { type Result } from './result.mjs';
2
- import { type NotPromise } from './utils/types.mjs';
1
+ import type { Result } from './result.mjs';
2
+ import type { NotPromise } from './utils/types.mjs';
3
+ export type AsyncFunction<Fn extends (...args: any[]) => any> = ReturnType<Fn> extends Promise<any> ? Fn : never;
4
+ export type AsyncFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Promise<Result<Awaited<ReturnType<T>>, Err>>;
5
+ export type AsyncIterableFunction = (...args: any[]) => AsyncIterable<unknown>;
6
+ export type AsyncIteratableFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = AsyncIterable<Result<AsyncIteratorElement<ReturnType<T>>, Err>, unknown, unknown>;
7
+ export type AsyncIteratorElement<T> = T extends Promise<infer P> ? AsyncIteratorElement<P> : T extends AsyncIterator<infer E> ? E : T extends AsyncIterable<infer E> ? E : T extends {
8
+ [Symbol.asyncIterator]: (...args: unknown[]) => infer I;
9
+ } ? AsyncIteratorElement<I> : unknown;
10
+ export type PreserveAsyncIterableOverloads<Fn extends AsyncIterableFunction, Err extends Error> = UnionToIntersection<WrapAsyncIterableOverload<OverloadsUnion<Fn>, Err>>;
11
+ export type PreserveAsyncOverloads<Fn extends AnyAsyncFunction, Err extends Error> = UnionToIntersection<WrapAsyncOverload<OverloadsUnion<Fn>, Err>>;
12
+ export type PreserveSyncIterableOverloads<Fn extends SyncIterableFunction, Err extends Error> = UnionToIntersection<WrapSyncIterableOverload<OverloadsUnion<Fn>, Err>>;
13
+ export type PreserveSyncOverloads<Fn extends AnySyncFunction, Err extends Error> = UnionToIntersection<WrapSyncOverload<OverloadsUnion<Fn>, Err>>;
14
+ export type SyncFunction<Fn extends (...args: any[]) => any> = LastIsFunction<Parameters<Fn>> extends true ? never : ReturnType<Fn> extends Promise<any> ? never : Fn;
15
+ export type SyncFunctionResult<T extends (...args: unknown[]) => NotPromise<unknown>, Err extends Error> = Result<ReturnType<T>, Err>;
16
+ export type SyncIterableFunction = (...args: any[]) => Iterable<unknown>;
17
+ export type SyncIteratableFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Iterable<Result<SyncIteratorElement<ReturnType<T>>, Err>, unknown, unknown>;
18
+ export type SyncIteratorElement<T> = T extends Iterator<infer E> ? E : T extends Iterable<infer E> ? E : T extends {
19
+ [Symbol.iterator]: (...args: unknown[]) => infer I;
20
+ } ? SyncIteratorElement<I> : unknown;
3
21
  type AnyAsyncFunction = (...args: any[]) => Promise<unknown>;
4
22
  type AnySyncFunction = (...args: any[]) => unknown;
5
23
  type LastIsFunction<T extends readonly any[]> = T extends [...infer Rest, infer Last] ? Last extends (...args: any[]) => any ? true : false : false;
@@ -16,28 +34,10 @@ type OverloadsUnion<Fn extends Function> = Fn extends {
16
34
  (...args: infer A10): infer R10;
17
35
  } ? ((...args: A1) => R1) | ((...args: A2) => R2) | ((...args: A3) => R3) | ((...args: A4) => R4) | ((...args: A5) => R5) | ((...args: A6) => R6) | ((...args: A7) => R7) | ((...args: A8) => R8) | ((...args: A9) => R9) | ((...args: A10) => R10) : Fn;
18
36
  type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
19
- type WrapAsyncOverload<Fn extends AnyAsyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => AsyncFunctionResult<Fn, Err> : never;
20
37
  type WrapAsyncIterableOverload<Fn extends AsyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => AsyncIterable<unknown> ? (...args: Args) => AsyncIteratableFunctionResult<Fn, Err> : never;
21
- type WrapSyncOverload<Fn extends AnySyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => SyncFunctionResult<Fn, Err> : never;
38
+ type WrapAsyncOverload<Fn extends AnyAsyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => AsyncFunctionResult<Fn, Err> : never;
22
39
  type WrapSyncIterableOverload<Fn extends SyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => Iterable<unknown> ? (...args: Args) => SyncIteratableFunctionResult<Fn, Err> : never;
23
- export type AsyncFunction<Fn extends (...args: any[]) => any> = ReturnType<Fn> extends Promise<any> ? Fn : never;
24
- export type AsyncIterableFunction = (...args: any[]) => AsyncIterable<unknown>;
25
- export type AsyncIteratorElement<T> = T extends Promise<infer P> ? AsyncIteratorElement<P> : T extends AsyncIterator<infer E> ? E : T extends AsyncIterable<infer E> ? E : T extends {
26
- [Symbol.asyncIterator]: (...args: unknown[]) => infer I;
27
- } ? AsyncIteratorElement<I> : unknown;
28
- export type AsyncFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Promise<Result<Awaited<ReturnType<T>>, Err>>;
29
- export type AsyncIteratableFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = AsyncIterable<Result<AsyncIteratorElement<ReturnType<T>>, Err>, unknown, unknown>;
30
- export type PreserveAsyncOverloads<Fn extends AnyAsyncFunction, Err extends Error> = UnionToIntersection<WrapAsyncOverload<OverloadsUnion<Fn>, Err>>;
31
- export type PreserveAsyncIterableOverloads<Fn extends AsyncIterableFunction, Err extends Error> = UnionToIntersection<WrapAsyncIterableOverload<OverloadsUnion<Fn>, Err>>;
32
- export type PreserveSyncOverloads<Fn extends AnySyncFunction, Err extends Error> = UnionToIntersection<WrapSyncOverload<OverloadsUnion<Fn>, Err>>;
33
- export type PreserveSyncIterableOverloads<Fn extends SyncIterableFunction, Err extends Error> = UnionToIntersection<WrapSyncIterableOverload<OverloadsUnion<Fn>, Err>>;
34
- export type SyncFunction<Fn extends (...args: any[]) => any> = LastIsFunction<Parameters<Fn>> extends true ? never : ReturnType<Fn> extends Promise<any> ? never : Fn;
35
- export type SyncIterableFunction = (...args: any[]) => Iterable<unknown>;
36
- export type SyncIteratorElement<T> = T extends Iterator<infer E> ? E : T extends Iterable<infer E> ? E : T extends {
37
- [Symbol.iterator]: (...args: unknown[]) => infer I;
38
- } ? SyncIteratorElement<I> : unknown;
39
- export type SyncFunctionResult<T extends (...args: unknown[]) => NotPromise<unknown>, Err extends Error> = Result<ReturnType<T>, Err>;
40
- export type SyncIteratableFunctionResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Iterable<Result<SyncIteratorElement<ReturnType<T>>, Err>, unknown, unknown>;
40
+ type WrapSyncOverload<Fn extends AnySyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => SyncFunctionResult<Fn, Err> : never;
41
41
  export declare function xtryifyAsync<Err extends Error, Fn extends AnyAsyncFunction = any>(fn: AsyncFunction<Fn>): PreserveAsyncOverloads<Fn, Err>;
42
42
  export declare function xtryifyAsyncIterable<Err extends Error, Fn extends AsyncIterableFunction = any>(fn: Fn): PreserveAsyncIterableOverloads<Fn, Err>;
43
43
  export declare function xtryifySync<Err extends Error, Fn extends AnySyncFunction = any>(fn: SyncFunction<Fn>): PreserveSyncOverloads<Fn, Err>;
@@ -1,20 +1,25 @@
1
+ /* eslint-disable ts/no-explicit-any */
1
2
  import { xtryAsync, xtryAsyncIterable, xtrySync, xtrySyncIterable } from './try.mjs';
2
3
  export function xtryifyAsync(fn) {
4
+ // eslint-disable-next-line func-names
3
5
  return async function (...args) {
4
6
  return xtryAsync(async () => fn(...args));
5
7
  };
6
8
  }
7
9
  export function xtryifyAsyncIterable(fn) {
10
+ // eslint-disable-next-line func-names
8
11
  return function (...args) {
9
12
  return xtryAsyncIterable(fn(...args));
10
13
  };
11
14
  }
12
15
  export function xtryifySync(fn) {
16
+ // eslint-disable-next-line func-names
13
17
  return function (...args) {
14
18
  return xtrySync(() => fn(...args));
15
19
  };
16
20
  }
17
21
  export function xtryifySyncIterable(fn) {
22
+ // eslint-disable-next-line func-names
18
23
  return function (...args) {
19
24
  return xtrySyncIterable(fn(...args));
20
25
  };
@@ -0,0 +1,8 @@
1
+ import type { Result } from './result.mjs';
2
+ export declare function map<T, E, U>(result: Result<T, E>, transform: (value: T) => U): Result<U, E>;
3
+ export declare function match<T, E, R>(result: Result<T, E>, handlers: {
4
+ failure: (error: E) => R;
5
+ success: (value: T) => R;
6
+ }): R;
7
+ export declare function unwrap<T, E>(result: Result<T, E>): T;
8
+ export declare function unwrapOr<T, E, F>(result: Result<T, E>, fallback: F): F | T;
@@ -0,0 +1,37 @@
1
+ import { ok } from './result.mjs';
2
+ import { stringifyError } from './stringify-error.mjs';
3
+ export function map(result, transform) {
4
+ if (result.fails) {
5
+ return result;
6
+ }
7
+ else {
8
+ return ok(transform(result.value));
9
+ }
10
+ }
11
+ export function match(result, handlers) {
12
+ if (result.fails) {
13
+ return handlers.failure(result.error);
14
+ }
15
+ else {
16
+ return handlers.success(result.value);
17
+ }
18
+ }
19
+ export function unwrap(result) {
20
+ if (result.fails) {
21
+ if (result.error instanceof Error) {
22
+ throw result.error;
23
+ }
24
+ else {
25
+ throw new Error(stringifyError(result.error));
26
+ }
27
+ }
28
+ return result.value;
29
+ }
30
+ export function unwrapOr(result, fallback) {
31
+ if (result.fails) {
32
+ return fallback;
33
+ }
34
+ else {
35
+ return result.value;
36
+ }
37
+ }
@@ -1,3 +1,3 @@
1
- type MaybePromise<T> = T | PromiseLike<T>;
1
+ type MaybePromise<T> = PromiseLike<T> | T;
2
2
  export declare function isPromiseLike<T>(value: MaybePromise<T>): value is PromiseLike<T>;
3
3
  export {};
@@ -1,5 +1,5 @@
1
1
  export type Callback<T, Args extends unknown[] = []> = NonPromiseCallback<T, Args> | PromiseCallback<T, Args>;
2
- export type MaybePromise<T> = T | Promise<T>;
3
- export type NotPromise<T> = Exclude<T, Promise<unknown>>;
2
+ export type MaybePromise<T> = Promise<T> | T;
4
3
  export type NonPromiseCallback<T, Args extends unknown[] = []> = (...args: Args) => NotPromise<T>;
4
+ export type NotPromise<T> = Exclude<T, Promise<unknown>>;
5
5
  export type PromiseCallback<T, Args extends unknown[] = []> = ((...args: Args) => Promise<T>) | Promise<T>;