@zokugun/xtry 0.11.6 → 0.12.1
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 +117 -78
- package/lib/cjs/async.cjs +14 -9
- package/lib/cjs/async.d.cts +8 -7
- package/lib/cjs/defer.cjs +4 -4
- package/lib/cjs/defer.d.cts +1 -1
- package/lib/cjs/index.cjs +13 -8
- package/lib/cjs/index.d.cts +6 -5
- package/lib/cjs/partial.cjs +18 -18
- package/lib/cjs/partial.d.cts +16 -13
- package/lib/cjs/result.cjs +9 -9
- package/lib/cjs/result.d.cts +11 -11
- package/lib/cjs/sync.cjs +17 -12
- package/lib/cjs/sync.d.cts +9 -8
- package/lib/cjs/try.cjs +46 -42
- package/lib/cjs/try.d.cts +4 -4
- package/lib/cjs/tryify.cjs +5 -0
- package/lib/cjs/tryify.d.cts +22 -22
- package/lib/cjs/unwrap.cjs +46 -0
- package/lib/cjs/unwrap.d.cts +16 -0
- package/lib/cjs/utils/is-promise-like.d.cts +1 -1
- package/lib/cjs/utils/types.d.cts +2 -2
- package/lib/esm/async.d.mts +8 -7
- package/lib/esm/async.mjs +5 -4
- package/lib/esm/defer.d.mts +1 -1
- package/lib/esm/defer.mjs +4 -4
- package/lib/esm/index.d.mts +6 -5
- package/lib/esm/index.mjs +3 -2
- package/lib/esm/partial.d.mts +16 -13
- package/lib/esm/partial.mjs +15 -15
- package/lib/esm/result.d.mts +11 -11
- package/lib/esm/result.mjs +8 -8
- package/lib/esm/sync.d.mts +9 -8
- package/lib/esm/sync.mjs +6 -5
- package/lib/esm/try.d.mts +4 -4
- package/lib/esm/try.mjs +44 -40
- package/lib/esm/tryify.d.mts +22 -22
- package/lib/esm/tryify.mjs +5 -0
- package/lib/esm/unwrap.d.mts +16 -0
- package/lib/esm/unwrap.mjs +40 -0
- package/lib/esm/utils/is-promise-like.d.mts +1 -1
- package/lib/esm/utils/types.d.mts +2 -2
- package/package.json +49 -20
package/lib/esm/index.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { xdefer, xdeferAsync, xdeferSync } from './defer.mjs';
|
|
2
2
|
export { parseJSON, parseJson } from './json.mjs';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { yep, yerr, yok, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED, yres, yresAsync, yresSync } 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
7
|
export { xtry, xtryAsync, xtryAsyncIterable, xtrySync, xtrySyncIterable } from './try.mjs';
|
|
8
8
|
export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync, xtryifySyncIterable } from './tryify.mjs';
|
|
9
|
+
export { map, match, unwrap, unwrapOr } from './unwrap.mjs';
|
package/lib/esm/partial.d.mts
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
export type
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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>>;
|
package/lib/esm/partial.mjs
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
import { isPromiseLike } from './utils/is-promise-like.mjs';
|
|
2
|
-
export function
|
|
2
|
+
export function yep(result) {
|
|
3
3
|
return {
|
|
4
|
-
|
|
4
|
+
...result,
|
|
5
5
|
success: true,
|
|
6
|
-
value: value,
|
|
7
|
-
error: undefined,
|
|
8
6
|
};
|
|
9
7
|
}
|
|
10
|
-
export function yerr(
|
|
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));
|
package/lib/esm/result.d.mts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export type
|
|
2
|
-
|
|
3
|
-
|
|
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> =
|
|
12
|
-
export type
|
|
13
|
-
|
|
14
|
-
|
|
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>>;
|
package/lib/esm/result.mjs
CHANGED
|
@@ -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
|
-
|
|
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());
|
package/lib/esm/sync.d.mts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export type { XDeferAsync, XDeferSync } from './defer.mjs';
|
|
2
|
-
export {
|
|
2
|
+
export { xdeferSync as xdefer, xdeferAsync, xdefer as xdeferUnknown } from './defer.mjs';
|
|
3
3
|
export { parseJSON, parseJson } from './json.mjs';
|
|
4
|
-
export type {
|
|
5
|
-
export {
|
|
6
|
-
export type {
|
|
7
|
-
export {
|
|
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 {
|
|
11
|
-
export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement,
|
|
12
|
-
export {
|
|
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 {
|
|
1
|
+
export { xdeferSync as xdefer, xdeferAsync, xdefer as xdeferUnknown } from './defer.mjs';
|
|
2
2
|
export { parseJSON, parseJson } from './json.mjs';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
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 {
|
|
8
|
-
export {
|
|
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
|
|
16
|
-
export declare function
|
|
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
|
|
20
|
-
(value) => ok(value),
|
|
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
|
|
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
|
|
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
|
|
56
|
-
function
|
|
57
|
-
|
|
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
|
-
|
|
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 (!
|
|
66
|
-
yield handleError(handler, new TypeError('
|
|
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 =
|
|
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
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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 (!
|
|
99
|
-
yield handleError(handler, new TypeError('
|
|
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 =
|
|
96
|
+
const iterator = generator[Symbol.iterator]();
|
|
103
97
|
while (true) {
|
|
104
98
|
let step;
|
|
105
99
|
try {
|
|
106
|
-
step =
|
|
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
|
+
} // }}}
|
package/lib/esm/tryify.d.mts
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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
|
|
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
|
-
|
|
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>;
|
package/lib/esm/tryify.mjs
CHANGED
|
@@ -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,16 @@
|
|
|
1
|
+
import type { Result } from './result.mjs';
|
|
2
|
+
type LimitedResult<T, E> = {
|
|
3
|
+
error: E;
|
|
4
|
+
fails: true;
|
|
5
|
+
} | {
|
|
6
|
+
fails: false;
|
|
7
|
+
value: T;
|
|
8
|
+
};
|
|
9
|
+
export declare function map<T, E, U>(result: LimitedResult<T, E>, transform: (value: T) => U): Result<U, E>;
|
|
10
|
+
export declare function match<T, E, R>(result: LimitedResult<T, E>, handlers: {
|
|
11
|
+
failure: (error: E) => R;
|
|
12
|
+
success: (value: T) => R;
|
|
13
|
+
}): R;
|
|
14
|
+
export declare function unwrap<T, E>(result: LimitedResult<T, E>, transform?: (error: E) => Error): T;
|
|
15
|
+
export declare function unwrapOr<T, E, F>(result: LimitedResult<T, E>, fallback: F): F | T;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
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, transform) {
|
|
20
|
+
if (result.fails) {
|
|
21
|
+
if (transform) {
|
|
22
|
+
throw transform(result.error);
|
|
23
|
+
}
|
|
24
|
+
else if (result.error instanceof Error) {
|
|
25
|
+
throw result.error;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error(stringifyError(result.error));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result.value;
|
|
32
|
+
}
|
|
33
|
+
export function unwrapOr(result, fallback) {
|
|
34
|
+
if (result.fails) {
|
|
35
|
+
return fallback;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
return result.value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -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 |
|
|
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>;
|