@zokugun/xtry 0.10.1 → 0.11.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.
@@ -3,10 +3,10 @@ export { xdefer as xdeferUnknown, xdeferAsync as xdefer, xdeferSync } from './de
3
3
  export { parseJSON, parseJson } from './json.cjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
5
5
  export { yok, yerr, yres as yresUnknown, yresAsync as yres, yresSync, yep, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED } from './partial.cjs';
6
- export type { Success, Failure, Result } from './result.cjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.cjs';
7
7
  export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.cjs';
8
8
  export { stringifyError } from './stringify-error.cjs';
9
9
  export { toStringFailure } from './to-string-failure.cjs';
10
10
  export { xtry as xtryUnknown, xtryAsync as xtry, xtryAsyncIterable as xtryIterable, xtrySync, xtrySyncIterable } from './try.cjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.cjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.cjs';
12
12
  export { xtryifyAsync as xtryify, xtryifyAsyncIterable as xtryifyIterable, xtryifySync, xtryifySyncIterable } from './tryify.cjs';
@@ -3,10 +3,10 @@ export { xdefer, xdeferAsync, xdeferSync } from './defer.cjs';
3
3
  export { parseJSON, parseJson } from './json.cjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
5
5
  export { yok, yerr, yres, yresAsync, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE, YOK_UNDEFINED } from './partial.cjs';
6
- export type { Success, Failure, Result } from './result.cjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.cjs';
7
7
  export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.cjs';
8
8
  export { stringifyError } from './stringify-error.cjs';
9
9
  export { toStringFailure } from './to-string-failure.cjs';
10
10
  export { xtry, xtryAsync, xtryAsyncIterable, xtrySync, xtrySyncIterable } from './try.cjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.cjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.cjs';
12
12
  export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync, xtryifySyncIterable } from './tryify.cjs';
@@ -1,2 +1,2 @@
1
- export declare const parseJson: (...args: unknown[]) => import("./tryify.cjs").SyncResult<any, SyntaxError>;
2
- export declare const parseJSON: (...args: unknown[]) => import("./tryify.cjs").SyncResult<any, SyntaxError>;
1
+ export declare const parseJson: (...args: unknown[]) => import("./tryify.cjs").SyncFunctionResult<any, SyntaxError>;
2
+ export declare const parseJSON: (...args: unknown[]) => import("./tryify.cjs").SyncFunctionResult<any, SyntaxError>;
@@ -9,6 +9,9 @@ export type Failure<E> = {
9
9
  error: E;
10
10
  };
11
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>;
12
15
  export declare function ok(): Success<void>;
13
16
  export declare function ok<T>(value: T): Success<T>;
14
17
  export declare function err<E>(error: E): Failure<E>;
@@ -3,10 +3,10 @@ export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './de
3
3
  export { parseJSON, parseJson } from './json.cjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.cjs';
5
5
  export { yok, yerr, yres as yresUnknown, yresAsync, yresSync as yres, yep, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED } from './partial.cjs';
6
- export type { Success, Failure, Result } from './result.cjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.cjs';
7
7
  export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.cjs';
8
8
  export { stringifyError } from './stringify-error.cjs';
9
9
  export { toStringFailure } from './to-string-failure.cjs';
10
10
  export { xtry as xtryUnknown, xtryAsync, xtryAsyncIterable, xtrySync as xtry, xtrySyncIterable as xtryIterable } from './try.cjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.cjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.cjs';
12
12
  export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync as xtryify, xtryifySyncIterable as xtryifyIterable } from './tryify.cjs';
package/lib/cjs/try.cjs CHANGED
@@ -19,10 +19,8 @@ function handleError(handler, error) {
19
19
  return (0, result_js_1.err)(error);
20
20
  } // }}}
21
21
  function xtry(func, handler) {
22
- // eslint-disable-next-line @typescript-eslint/promise-function-async
23
- const run = func instanceof Function ? func : () => func;
24
22
  try {
25
- const value = run();
23
+ const value = typeof func === 'function' ? func() : func;
26
24
  if ((0, is_promise_like_js_1.isPromiseLike)(value)) {
27
25
  return Promise.resolve(value).then(
28
26
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -53,7 +51,7 @@ function xtrySync(func, handler) {
53
51
  } // }}}
54
52
  async function xtryAsync(func, handler) {
55
53
  try {
56
- const value = await (func instanceof Promise ? func : Promise.resolve().then(func));
54
+ const value = await (func instanceof Promise || (0, is_async_iterable_js_1.isAsyncIterable)(func) ? func : Promise.resolve().then(func));
57
55
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
58
56
  return (0, result_js_1.ok)(value);
59
57
  }
@@ -62,21 +60,20 @@ async function xtryAsync(func, handler) {
62
60
  }
63
61
  } // }}}
64
62
  function xtrySyncIterable(iterable, handler) {
65
- const generator = iterable instanceof Function ? iterable : () => iterable;
66
63
  function* iterate() {
67
- let source;
64
+ let generator;
68
65
  try {
69
- source = generator();
66
+ generator = typeof iterable === 'function' ? iterable() : iterable;
70
67
  }
71
68
  catch (error) {
72
69
  yield handleError(handler, error);
73
70
  return;
74
71
  }
75
- if (!source || typeof source[Symbol.iterator] !== 'function') {
72
+ if (!generator || typeof generator[Symbol.iterator] !== 'function') {
76
73
  yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
77
74
  return;
78
75
  }
79
- const iterator = source[Symbol.iterator]();
76
+ const iterator = generator[Symbol.iterator]();
80
77
  while (true) {
81
78
  let step;
82
79
  try {
@@ -95,7 +92,7 @@ function xtrySyncIterable(iterable, handler) {
95
92
  return iterate();
96
93
  } // }}}
97
94
  function xtryAsyncIterable(iterable, handler) {
98
- const generator = iterable instanceof Function ? iterable : async () => iterable;
95
+ const generator = typeof iterable === 'function' ? iterable : async () => iterable;
99
96
  async function* iterate() {
100
97
  let source;
101
98
  try {
@@ -16,17 +16,17 @@ type OverloadsUnion<Fn extends Function> = Fn extends {
16
16
  (...args: infer A10): infer R10;
17
17
  } ? ((...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
18
  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) => AsyncResult<Fn, Err> : never;
20
- type WrapAsyncIterableOverload<Fn extends AsyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => AsyncIterable<unknown> ? (...args: Args) => AsyncIteratableResult<Fn, Err> : never;
21
- type WrapSyncOverload<Fn extends AnySyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => SyncResult<Fn, Err> : never;
22
- type WrapSyncIterableOverload<Fn extends SyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => Iterable<unknown> ? (...args: Args) => SyncIteratableResult<Fn, Err> : never;
19
+ type WrapAsyncOverload<Fn extends AnyAsyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => AsyncFunctionResult<Fn, Err> : never;
20
+ 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;
22
+ type WrapSyncIterableOverload<Fn extends SyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => Iterable<unknown> ? (...args: Args) => SyncIteratableFunctionResult<Fn, Err> : never;
23
23
  export type AsyncFunction<Fn extends (...args: any[]) => any> = ReturnType<Fn> extends Promise<any> ? Fn : never;
24
24
  export type AsyncIterableFunction = (...args: any[]) => AsyncIterable<unknown>;
25
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
26
  [Symbol.asyncIterator]: (...args: unknown[]) => infer I;
27
27
  } ? AsyncIteratorElement<I> : unknown;
28
- export type AsyncResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Promise<Result<Awaited<ReturnType<T>>, Err>>;
29
- export type AsyncIteratableResult<T extends (...args: unknown[]) => unknown, Err extends Error> = AsyncIterable<Result<AsyncIteratorElement<ReturnType<T>>, Err>, unknown, 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
30
  export type PreserveAsyncOverloads<Fn extends AnyAsyncFunction, Err extends Error> = UnionToIntersection<WrapAsyncOverload<OverloadsUnion<Fn>, Err>>;
31
31
  export type PreserveAsyncIterableOverloads<Fn extends AsyncIterableFunction, Err extends Error> = UnionToIntersection<WrapAsyncIterableOverload<OverloadsUnion<Fn>, Err>>;
32
32
  export type PreserveSyncOverloads<Fn extends AnySyncFunction, Err extends Error> = UnionToIntersection<WrapSyncOverload<OverloadsUnion<Fn>, Err>>;
@@ -36,8 +36,8 @@ export type SyncIterableFunction = (...args: any[]) => Iterable<unknown>;
36
36
  export type SyncIteratorElement<T> = T extends Iterator<infer E> ? E : T extends Iterable<infer E> ? E : T extends {
37
37
  [Symbol.iterator]: (...args: unknown[]) => infer I;
38
38
  } ? SyncIteratorElement<I> : unknown;
39
- export type SyncResult<T extends (...args: unknown[]) => NotPromise<unknown>, Err extends Error> = Result<ReturnType<T>, Err>;
40
- export type SyncIteratableResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Iterable<Result<SyncIteratorElement<ReturnType<T>>, Err>, unknown, 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>;
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>;
@@ -3,10 +3,10 @@ export { xdefer as xdeferUnknown, xdeferAsync as xdefer, xdeferSync } from './de
3
3
  export { parseJSON, parseJson } from './json.mjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
5
5
  export { yok, yerr, yres as yresUnknown, yresAsync as yres, yresSync, yep, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED } from './partial.mjs';
6
- export type { Success, Failure, Result } from './result.mjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.mjs';
7
7
  export { ok, err, 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
10
  export { xtry as xtryUnknown, xtryAsync as xtry, xtryAsyncIterable as xtryIterable, xtrySync, xtrySyncIterable } from './try.mjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.mjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.mjs';
12
12
  export { xtryifyAsync as xtryify, xtryifyAsyncIterable as xtryifyIterable, xtryifySync, xtryifySyncIterable } from './tryify.mjs';
@@ -3,10 +3,10 @@ export { xdefer, xdeferAsync, xdeferSync } from './defer.mjs';
3
3
  export { parseJSON, parseJson } from './json.mjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
5
5
  export { yok, yerr, yres, yresAsync, yresSync, yep, YOK, YOK_NULL, YOK_TRUE, YOK_FALSE, YOK_UNDEFINED } from './partial.mjs';
6
- export type { Success, Failure, Result } from './result.mjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.mjs';
7
7
  export { ok, err, 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
10
  export { xtry, xtryAsync, xtryAsyncIterable, xtrySync, xtrySyncIterable } from './try.mjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.mjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.mjs';
12
12
  export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync, xtryifySyncIterable } from './tryify.mjs';
@@ -1,2 +1,2 @@
1
- export declare const parseJson: (...args: unknown[]) => import("./tryify.mjs").SyncResult<any, SyntaxError>;
2
- export declare const parseJSON: (...args: unknown[]) => import("./tryify.mjs").SyncResult<any, SyntaxError>;
1
+ export declare const parseJson: (...args: unknown[]) => import("./tryify.mjs").SyncFunctionResult<any, SyntaxError>;
2
+ export declare const parseJSON: (...args: unknown[]) => import("./tryify.mjs").SyncFunctionResult<any, SyntaxError>;
@@ -9,6 +9,9 @@ export type Failure<E> = {
9
9
  error: E;
10
10
  };
11
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>;
12
15
  export declare function ok(): Success<void>;
13
16
  export declare function ok<T>(value: T): Success<T>;
14
17
  export declare function err<E>(error: E): Failure<E>;
@@ -3,10 +3,10 @@ export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './de
3
3
  export { parseJSON, parseJson } from './json.mjs';
4
4
  export type { YResult, YSuccess, YFailure } from './partial.mjs';
5
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 } from './result.mjs';
6
+ export type { Success, Failure, Result, AsyncResult, DResult, AsyncDResult } from './result.mjs';
7
7
  export { ok, err, 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
10
  export { xtry as xtryUnknown, xtryAsync, xtryAsyncIterable, xtrySync as xtry, xtrySyncIterable as xtryIterable } from './try.mjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableResult, AsyncIteratorElement, AsyncResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableResult, SyncIteratorElement, SyncResult } from './tryify.mjs';
11
+ export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.mjs';
12
12
  export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync as xtryify, xtryifySyncIterable as xtryifyIterable } from './tryify.mjs';
package/lib/esm/try.mjs CHANGED
@@ -12,10 +12,8 @@ function handleError(handler, error) {
12
12
  return err(error);
13
13
  } // }}}
14
14
  export function xtry(func, handler) {
15
- // eslint-disable-next-line @typescript-eslint/promise-function-async
16
- const run = func instanceof Function ? func : () => func;
17
15
  try {
18
- const value = run();
16
+ const value = typeof func === 'function' ? func() : func;
19
17
  if (isPromiseLike(value)) {
20
18
  return Promise.resolve(value).then(
21
19
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -46,7 +44,7 @@ export function xtrySync(func, handler) {
46
44
  } // }}}
47
45
  export async function xtryAsync(func, handler) {
48
46
  try {
49
- const value = await (func instanceof Promise ? func : Promise.resolve().then(func));
47
+ const value = await (func instanceof Promise || isAsyncIterable(func) ? func : Promise.resolve().then(func));
50
48
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
51
49
  return ok(value);
52
50
  }
@@ -55,21 +53,20 @@ export async function xtryAsync(func, handler) {
55
53
  }
56
54
  } // }}}
57
55
  export function xtrySyncIterable(iterable, handler) {
58
- const generator = iterable instanceof Function ? iterable : () => iterable;
59
56
  function* iterate() {
60
- let source;
57
+ let generator;
61
58
  try {
62
- source = generator();
59
+ generator = typeof iterable === 'function' ? iterable() : iterable;
63
60
  }
64
61
  catch (error) {
65
62
  yield handleError(handler, error);
66
63
  return;
67
64
  }
68
- if (!source || typeof source[Symbol.iterator] !== 'function') {
65
+ if (!generator || typeof generator[Symbol.iterator] !== 'function') {
69
66
  yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
70
67
  return;
71
68
  }
72
- const iterator = source[Symbol.iterator]();
69
+ const iterator = generator[Symbol.iterator]();
73
70
  while (true) {
74
71
  let step;
75
72
  try {
@@ -88,7 +85,7 @@ export function xtrySyncIterable(iterable, handler) {
88
85
  return iterate();
89
86
  } // }}}
90
87
  export function xtryAsyncIterable(iterable, handler) {
91
- const generator = iterable instanceof Function ? iterable : async () => iterable;
88
+ const generator = typeof iterable === 'function' ? iterable : async () => iterable;
92
89
  async function* iterate() {
93
90
  let source;
94
91
  try {
@@ -16,17 +16,17 @@ type OverloadsUnion<Fn extends Function> = Fn extends {
16
16
  (...args: infer A10): infer R10;
17
17
  } ? ((...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
18
  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) => AsyncResult<Fn, Err> : never;
20
- type WrapAsyncIterableOverload<Fn extends AsyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => AsyncIterable<unknown> ? (...args: Args) => AsyncIteratableResult<Fn, Err> : never;
21
- type WrapSyncOverload<Fn extends AnySyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => SyncResult<Fn, Err> : never;
22
- type WrapSyncIterableOverload<Fn extends SyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => Iterable<unknown> ? (...args: Args) => SyncIteratableResult<Fn, Err> : never;
19
+ type WrapAsyncOverload<Fn extends AnyAsyncFunction, Err extends Error> = Fn extends (...args: infer Args) => unknown ? (...args: Args) => AsyncFunctionResult<Fn, Err> : never;
20
+ 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;
22
+ type WrapSyncIterableOverload<Fn extends SyncIterableFunction, Err extends Error> = Fn extends (...args: infer Args) => Iterable<unknown> ? (...args: Args) => SyncIteratableFunctionResult<Fn, Err> : never;
23
23
  export type AsyncFunction<Fn extends (...args: any[]) => any> = ReturnType<Fn> extends Promise<any> ? Fn : never;
24
24
  export type AsyncIterableFunction = (...args: any[]) => AsyncIterable<unknown>;
25
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
26
  [Symbol.asyncIterator]: (...args: unknown[]) => infer I;
27
27
  } ? AsyncIteratorElement<I> : unknown;
28
- export type AsyncResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Promise<Result<Awaited<ReturnType<T>>, Err>>;
29
- export type AsyncIteratableResult<T extends (...args: unknown[]) => unknown, Err extends Error> = AsyncIterable<Result<AsyncIteratorElement<ReturnType<T>>, Err>, unknown, 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
30
  export type PreserveAsyncOverloads<Fn extends AnyAsyncFunction, Err extends Error> = UnionToIntersection<WrapAsyncOverload<OverloadsUnion<Fn>, Err>>;
31
31
  export type PreserveAsyncIterableOverloads<Fn extends AsyncIterableFunction, Err extends Error> = UnionToIntersection<WrapAsyncIterableOverload<OverloadsUnion<Fn>, Err>>;
32
32
  export type PreserveSyncOverloads<Fn extends AnySyncFunction, Err extends Error> = UnionToIntersection<WrapSyncOverload<OverloadsUnion<Fn>, Err>>;
@@ -36,8 +36,8 @@ export type SyncIterableFunction = (...args: any[]) => Iterable<unknown>;
36
36
  export type SyncIteratorElement<T> = T extends Iterator<infer E> ? E : T extends Iterable<infer E> ? E : T extends {
37
37
  [Symbol.iterator]: (...args: unknown[]) => infer I;
38
38
  } ? SyncIteratorElement<I> : unknown;
39
- export type SyncResult<T extends (...args: unknown[]) => NotPromise<unknown>, Err extends Error> = Result<ReturnType<T>, Err>;
40
- export type SyncIteratableResult<T extends (...args: unknown[]) => unknown, Err extends Error> = Iterable<Result<SyncIteratorElement<ReturnType<T>>, Err>, unknown, 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>;
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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zokugun/xtry",
3
3
  "description": "simple try/catch wrapper returning Result",
4
- "version": "0.10.1",
4
+ "version": "0.11.1",
5
5
  "author": {
6
6
  "name": "Baptiste Augrain",
7
7
  "email": "daiyam@zokugun.org"
@@ -64,7 +64,6 @@
64
64
  "build:lib": "tsc-leda generate",
65
65
  "build:package": "tsc-leda update-package",
66
66
  "clean": "rimraf lib .test",
67
- "commit": "cz",
68
67
  "compile:src": "tsc -p src",
69
68
  "compile:test": "tsc -p test",
70
69
  "lint": "xo",
@@ -72,8 +71,11 @@
72
71
  "prepack": "npm run build",
73
72
  "prepare": "husky; fixpack || true",
74
73
  "release": "release-it",
75
- "test": "vitest run",
74
+ "test": "vitest run --reporter tree",
75
+ "test:coverage": "vitest run --reporter tree --coverage --coverage.reporter text",
76
+ "test:ui": "vitest --ui --coverage",
76
77
  "test:watch": "vitest",
78
+ "watch:build": "tsc-watch -p src --onSuccess 'npm run build'",
77
79
  "watch:src": "tsc-watch -p src",
78
80
  "watch:test": "tsc-watch -p test"
79
81
  },
@@ -83,18 +85,26 @@
83
85
  "@commitlint/config-conventional": "^19.7.1",
84
86
  "@types/fs-extra": "^11.0.4",
85
87
  "@types/node": "^20.14.8",
88
+ "@vitest/coverage-v8": "^4.0.18",
89
+ "@vitest/ui": "^4.0.18",
90
+ "@zokugun/fs-extra-plus": "^0.3.3",
86
91
  "@zokugun/tsc-leda": "^0.1.1",
87
92
  "fixpack": "^4.0.0",
88
93
  "fs-extra": "^11.3.3",
89
- "globby": "^16.1.0",
94
+ "globby": "^16.1.1",
90
95
  "husky": "^9.1.7",
91
96
  "lint-staged": "^16.1.4",
92
97
  "release-it": "^19.2.4",
93
- "tsc-watch": "^6.3.0",
98
+ "tsc-watch": "^7.2.0",
94
99
  "typescript": "^5.7.3",
95
- "vitest": "^4.0.16",
100
+ "vitest": "^4.0.18",
96
101
  "xo": "0.60.0"
97
102
  },
103
+ "overrides": {
104
+ "terser-webpack-plugin": {
105
+ "serialize-javascript": "^7.0.3"
106
+ }
107
+ },
98
108
  "keywords": [
99
109
  "catch",
100
110
  "error",