@zokugun/xtry 0.11.5 → 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,28 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.YOK_UNDEFINED = exports.YOK_TRUE = exports.YOK_NULL = exports.YOK_FALSE = exports.YOK = void 0;
4
- exports.yok = yok;
4
+ exports.yep = yep;
5
5
  exports.yerr = yerr;
6
+ exports.yok = yok;
6
7
  exports.yres = yres;
7
- exports.yresSync = yresSync;
8
8
  exports.yresAsync = yresAsync;
9
- exports.yep = yep;
9
+ exports.yresSync = yresSync;
10
10
  const is_promise_like_js_1 = require("./utils/is-promise-like.cjs");
11
- function yok(value) {
11
+ function yep(result) {
12
12
  return {
13
- fails: false,
13
+ ...result,
14
14
  success: true,
15
- value: value,
16
- error: undefined,
17
15
  };
18
16
  }
19
- function yerr(miscue) {
17
+ function yerr(issue) {
20
18
  return {
19
+ error: undefined,
21
20
  fails: false,
21
+ issue,
22
22
  success: false,
23
- miscue,
24
23
  value: undefined,
24
+ };
25
+ }
26
+ function yok(value) {
27
+ return {
25
28
  error: undefined,
29
+ fails: false,
30
+ success: true,
31
+ value: value,
26
32
  };
27
33
  }
28
34
  function yres(result) {
@@ -31,21 +37,15 @@ function yres(result) {
31
37
  }
32
38
  return yresSync(result);
33
39
  }
40
+ async function yresAsync(promise) {
41
+ return promise.then(yresSync);
42
+ }
34
43
  function yresSync(result) {
35
44
  if (result.fails) {
36
45
  return result;
37
46
  }
38
47
  return yep(result);
39
48
  }
40
- async function yresAsync(promise) {
41
- return promise.then(yresSync);
42
- }
43
- function yep(result) {
44
- return {
45
- ...result,
46
- success: true,
47
- };
48
- }
49
49
  exports.YOK = Object.freeze(yok());
50
50
  exports.YOK_FALSE = Object.freeze(yok(false));
51
51
  exports.YOK_NULL = Object.freeze(yok(null));
@@ -1,25 +1,28 @@
1
- import { type Result, type Failure, type Success } from './result.cjs';
2
- import { type NotPromise } from './utils/types.cjs';
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.cjs';
2
+ import type { NotPromise } from './utils/types.cjs';
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,20 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OK_UNDEFINED = exports.OK_TRUE = exports.OK_NULL = exports.OK_FALSE = exports.OK = void 0;
4
- exports.ok = ok;
5
4
  exports.err = err;
6
- function ok(value) {
7
- return {
8
- fails: false,
9
- value: value,
10
- error: undefined,
11
- };
12
- }
5
+ exports.ok = ok;
13
6
  function err(error) {
14
7
  return {
8
+ error,
15
9
  fails: true,
16
10
  value: undefined,
17
- error,
11
+ };
12
+ }
13
+ function ok(value) {
14
+ return {
15
+ error: undefined,
16
+ fails: false,
17
+ value: value,
18
18
  };
19
19
  }
20
20
  exports.OK = Object.freeze(ok());
@@ -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>>;
package/lib/cjs/sync.cjs CHANGED
@@ -1,28 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.xtryifyIterable = exports.xtryify = exports.xtryifyAsyncIterable = exports.xtryifyAsync = exports.xtryIterable = exports.xtry = exports.xtryAsyncIterable = exports.xtryAsync = exports.xtryUnknown = exports.toStringFailure = exports.stringifyError = exports.OK_UNDEFINED = exports.OK_TRUE = exports.OK_NULL = exports.OK_FALSE = exports.OK = exports.err = exports.ok = exports.YOK_UNDEFINED = exports.YOK_TRUE = exports.YOK_NULL = exports.YOK_FALSE = exports.YOK = exports.yep = exports.yres = exports.yresAsync = exports.yresUnknown = exports.yerr = exports.yok = exports.parseJson = exports.parseJSON = exports.xdefer = exports.xdeferAsync = exports.xdeferUnknown = void 0;
3
+ exports.unwrapOr = exports.unwrap = exports.match = exports.map = exports.xtryifyIterable = exports.xtryifyAsyncIterable = exports.xtryifyAsync = exports.xtryify = exports.xtryUnknown = exports.xtryIterable = exports.xtryAsyncIterable = exports.xtryAsync = exports.xtry = exports.toStringFailure = exports.stringifyError = exports.OK_UNDEFINED = exports.OK_TRUE = exports.OK_NULL = exports.OK_FALSE = exports.OK = exports.ok = exports.err = exports.yresUnknown = exports.yresAsync = exports.yres = exports.YOK_UNDEFINED = exports.YOK_TRUE = exports.YOK_NULL = exports.YOK_FALSE = exports.YOK = exports.yok = exports.yerr = exports.yep = exports.parseJson = exports.parseJSON = exports.xdeferUnknown = exports.xdeferAsync = exports.xdefer = void 0;
4
4
  var defer_js_1 = require("./defer.cjs");
5
- Object.defineProperty(exports, "xdeferUnknown", { enumerable: true, get: function () { return defer_js_1.xdefer; } });
6
- Object.defineProperty(exports, "xdeferAsync", { enumerable: true, get: function () { return defer_js_1.xdeferAsync; } });
7
5
  Object.defineProperty(exports, "xdefer", { enumerable: true, get: function () { return defer_js_1.xdeferSync; } });
6
+ Object.defineProperty(exports, "xdeferAsync", { enumerable: true, get: function () { return defer_js_1.xdeferAsync; } });
7
+ Object.defineProperty(exports, "xdeferUnknown", { enumerable: true, get: function () { return defer_js_1.xdefer; } });
8
8
  var json_js_1 = require("./json.cjs");
9
9
  Object.defineProperty(exports, "parseJSON", { enumerable: true, get: function () { return json_js_1.parseJSON; } });
10
10
  Object.defineProperty(exports, "parseJson", { enumerable: true, get: function () { return json_js_1.parseJson; } });
11
11
  var partial_js_1 = require("./partial.cjs");
12
- Object.defineProperty(exports, "yok", { enumerable: true, get: function () { return partial_js_1.yok; } });
13
- Object.defineProperty(exports, "yerr", { enumerable: true, get: function () { return partial_js_1.yerr; } });
14
- Object.defineProperty(exports, "yresUnknown", { enumerable: true, get: function () { return partial_js_1.yres; } });
15
- Object.defineProperty(exports, "yresAsync", { enumerable: true, get: function () { return partial_js_1.yresAsync; } });
16
- Object.defineProperty(exports, "yres", { enumerable: true, get: function () { return partial_js_1.yresSync; } });
17
12
  Object.defineProperty(exports, "yep", { enumerable: true, get: function () { return partial_js_1.yep; } });
13
+ Object.defineProperty(exports, "yerr", { enumerable: true, get: function () { return partial_js_1.yerr; } });
14
+ Object.defineProperty(exports, "yok", { enumerable: true, get: function () { return partial_js_1.yok; } });
18
15
  Object.defineProperty(exports, "YOK", { enumerable: true, get: function () { return partial_js_1.YOK; } });
19
16
  Object.defineProperty(exports, "YOK_FALSE", { enumerable: true, get: function () { return partial_js_1.YOK_FALSE; } });
20
17
  Object.defineProperty(exports, "YOK_NULL", { enumerable: true, get: function () { return partial_js_1.YOK_NULL; } });
21
18
  Object.defineProperty(exports, "YOK_TRUE", { enumerable: true, get: function () { return partial_js_1.YOK_TRUE; } });
22
19
  Object.defineProperty(exports, "YOK_UNDEFINED", { enumerable: true, get: function () { return partial_js_1.YOK_UNDEFINED; } });
20
+ Object.defineProperty(exports, "yres", { enumerable: true, get: function () { return partial_js_1.yresSync; } });
21
+ Object.defineProperty(exports, "yresAsync", { enumerable: true, get: function () { return partial_js_1.yresAsync; } });
22
+ Object.defineProperty(exports, "yresUnknown", { enumerable: true, get: function () { return partial_js_1.yres; } });
23
23
  var result_js_1 = require("./result.cjs");
24
- Object.defineProperty(exports, "ok", { enumerable: true, get: function () { return result_js_1.ok; } });
25
24
  Object.defineProperty(exports, "err", { enumerable: true, get: function () { return result_js_1.err; } });
25
+ Object.defineProperty(exports, "ok", { enumerable: true, get: function () { return result_js_1.ok; } });
26
26
  Object.defineProperty(exports, "OK", { enumerable: true, get: function () { return result_js_1.OK; } });
27
27
  Object.defineProperty(exports, "OK_FALSE", { enumerable: true, get: function () { return result_js_1.OK_FALSE; } });
28
28
  Object.defineProperty(exports, "OK_NULL", { enumerable: true, get: function () { return result_js_1.OK_NULL; } });
@@ -33,13 +33,18 @@ Object.defineProperty(exports, "stringifyError", { enumerable: true, get: functi
33
33
  var to_string_failure_js_1 = require("./to-string-failure.cjs");
34
34
  Object.defineProperty(exports, "toStringFailure", { enumerable: true, get: function () { return to_string_failure_js_1.toStringFailure; } });
35
35
  var try_js_1 = require("./try.cjs");
36
- Object.defineProperty(exports, "xtryUnknown", { enumerable: true, get: function () { return try_js_1.xtry; } });
36
+ Object.defineProperty(exports, "xtry", { enumerable: true, get: function () { return try_js_1.xtrySync; } });
37
37
  Object.defineProperty(exports, "xtryAsync", { enumerable: true, get: function () { return try_js_1.xtryAsync; } });
38
38
  Object.defineProperty(exports, "xtryAsyncIterable", { enumerable: true, get: function () { return try_js_1.xtryAsyncIterable; } });
39
- Object.defineProperty(exports, "xtry", { enumerable: true, get: function () { return try_js_1.xtrySync; } });
40
39
  Object.defineProperty(exports, "xtryIterable", { enumerable: true, get: function () { return try_js_1.xtrySyncIterable; } });
40
+ Object.defineProperty(exports, "xtryUnknown", { enumerable: true, get: function () { return try_js_1.xtry; } });
41
41
  var tryify_js_1 = require("./tryify.cjs");
42
+ Object.defineProperty(exports, "xtryify", { enumerable: true, get: function () { return tryify_js_1.xtryifySync; } });
42
43
  Object.defineProperty(exports, "xtryifyAsync", { enumerable: true, get: function () { return tryify_js_1.xtryifyAsync; } });
43
44
  Object.defineProperty(exports, "xtryifyAsyncIterable", { enumerable: true, get: function () { return tryify_js_1.xtryifyAsyncIterable; } });
44
- Object.defineProperty(exports, "xtryify", { enumerable: true, get: function () { return tryify_js_1.xtryifySync; } });
45
45
  Object.defineProperty(exports, "xtryifyIterable", { enumerable: true, get: function () { return tryify_js_1.xtryifySyncIterable; } });
46
+ var unwrap_js_1 = require("./unwrap.cjs");
47
+ Object.defineProperty(exports, "map", { enumerable: true, get: function () { return unwrap_js_1.map; } });
48
+ Object.defineProperty(exports, "match", { enumerable: true, get: function () { return unwrap_js_1.match; } });
49
+ Object.defineProperty(exports, "unwrap", { enumerable: true, get: function () { return unwrap_js_1.unwrap; } });
50
+ Object.defineProperty(exports, "unwrapOr", { enumerable: true, get: function () { return unwrap_js_1.unwrapOr; } });
@@ -1,12 +1,13 @@
1
1
  export type { XDeferAsync, XDeferSync } from './defer.cjs';
2
- export { xdefer as xdeferUnknown, xdeferAsync, xdeferSync as xdefer } from './defer.cjs';
2
+ export { xdeferSync as xdefer, xdeferAsync, xdefer as xdeferUnknown } from './defer.cjs';
3
3
  export { parseJSON, parseJson } from './json.cjs';
4
- export type { YResult, YSuccess, YFailure } from './partial.cjs';
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, AsyncResult, DResult, AsyncDResult } from './result.cjs';
7
- export { ok, err, OK, OK_FALSE, OK_NULL, OK_TRUE, OK_UNDEFINED } from './result.cjs';
4
+ export type { AsyncYDResult, AsyncYResult, YDResult, YFailure, YResult, YSuccess } from './partial.cjs';
5
+ export { yep, yerr, yok, YOK, YOK_FALSE, YOK_NULL, YOK_TRUE, YOK_UNDEFINED, yresSync as yres, yresAsync, yres as yresUnknown } from './partial.cjs';
6
+ export type { AsyncDResult, AsyncResult, DResult, Failure, Result, Success } from './result.cjs';
7
+ export { err, ok, 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
- export { xtry as xtryUnknown, xtryAsync, xtryAsyncIterable, xtrySync as xtry, xtrySyncIterable as xtryIterable } from './try.cjs';
11
- export type { AsyncFunction, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, AsyncFunctionResult, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement, SyncFunctionResult } from './tryify.cjs';
12
- export { xtryifyAsync, xtryifyAsyncIterable, xtryifySync as xtryify, xtryifySyncIterable as xtryifyIterable } from './tryify.cjs';
10
+ export { xtrySync as xtry, xtryAsync, xtryAsyncIterable, xtrySyncIterable as xtryIterable, xtry as xtryUnknown } from './try.cjs';
11
+ export type { AsyncFunction, AsyncFunctionResult, AsyncIterableFunction, AsyncIteratableFunctionResult, AsyncIteratorElement, PreserveAsyncIterableOverloads, PreserveAsyncOverloads, PreserveSyncIterableOverloads, PreserveSyncOverloads, SyncFunction, SyncFunctionResult, SyncIterableFunction, SyncIteratableFunctionResult, SyncIteratorElement } from './tryify.cjs';
12
+ export { xtryifySync as xtryify, xtryifyAsync, xtryifyAsyncIterable, xtryifySyncIterable as xtryifyIterable } from './tryify.cjs';
13
+ export { map, match, unwrap, unwrapOr } from './unwrap.cjs';
package/lib/cjs/try.cjs CHANGED
@@ -1,30 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.xtry = xtry;
4
- exports.xtrySync = xtrySync;
5
4
  exports.xtryAsync = xtryAsync;
6
- exports.xtrySyncIterable = xtrySyncIterable;
7
5
  exports.xtryAsyncIterable = xtryAsyncIterable;
6
+ exports.xtrySync = xtrySync;
7
+ exports.xtrySyncIterable = xtrySyncIterable;
8
8
  const result_js_1 = require("./result.cjs");
9
9
  const is_async_iterable_js_1 = require("./utils/is-async-iterable.cjs");
10
10
  const is_promise_like_js_1 = require("./utils/is-promise-like.cjs");
11
11
  const is_sync_iterable_js_1 = require("./utils/is-sync-iterable.cjs");
12
- function handleError(handler, error) {
13
- if (handler) {
14
- const newError = handler(error);
15
- if (newError !== undefined) {
16
- return (0, result_js_1.err)(newError);
17
- }
18
- }
19
- return (0, result_js_1.err)(error);
20
- } // }}}
21
12
  function xtry(func, handler) {
22
13
  try {
23
14
  const value = typeof func === 'function' ? func() : func;
24
15
  if ((0, is_promise_like_js_1.isPromiseLike)(value)) {
25
16
  return Promise.resolve(value).then(
26
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
27
- (value) => (0, result_js_1.ok)(value), (error) => handleError(handler, error));
17
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
18
+ (value) => (0, result_js_1.ok)(value),
19
+ // eslint-disable-next-line ts/use-unknown-in-catch-callback-variable
20
+ (error) => handleError(handler, error));
28
21
  }
29
22
  if ((0, is_async_iterable_js_1.isAsyncIterable)(value)) {
30
23
  return xtryAsyncIterable(value, handler);
@@ -32,17 +25,7 @@ function xtry(func, handler) {
32
25
  if ((0, is_sync_iterable_js_1.isSyncIterable)(value)) {
33
26
  return xtrySyncIterable(value, handler);
34
27
  }
35
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
36
- return (0, result_js_1.ok)(value);
37
- }
38
- catch (error) {
39
- return handleError(handler, error);
40
- }
41
- } // }}}
42
- function xtrySync(func, handler) {
43
- try {
44
- const value = func();
45
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
28
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
46
29
  return (0, result_js_1.ok)(value);
47
30
  }
48
31
  catch (error) {
@@ -52,32 +35,33 @@ function xtrySync(func, handler) {
52
35
  async function xtryAsync(func, handler) {
53
36
  try {
54
37
  const value = await (func instanceof Promise || (0, is_async_iterable_js_1.isAsyncIterable)(func) ? func : Promise.resolve().then(func));
55
- // eslint-disable-next-line @typescript-eslint/no-unsafe-return
38
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
56
39
  return (0, result_js_1.ok)(value);
57
40
  }
58
41
  catch (error) {
59
42
  return handleError(handler, error);
60
43
  }
61
44
  } // }}}
62
- function xtrySyncIterable(iterable, handler) {
63
- function* iterate() {
64
- let generator;
45
+ function xtryAsyncIterable(iterable, handler) {
46
+ const generator = typeof iterable === 'function' ? iterable : () => iterable;
47
+ async function* iterate() {
48
+ let source;
65
49
  try {
66
- generator = typeof iterable === 'function' ? iterable() : iterable;
50
+ source = await Promise.resolve(generator());
67
51
  }
68
52
  catch (error) {
69
53
  yield handleError(handler, error);
70
54
  return;
71
55
  }
72
- if (!generator || typeof generator[Symbol.iterator] !== 'function') {
73
- yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
56
+ if (!source || typeof source[Symbol.asyncIterator] !== 'function') {
57
+ yield handleError(handler, new TypeError('xtryAsyncIterable expects an AsyncIterable'));
74
58
  return;
75
59
  }
76
- const iterator = generator[Symbol.iterator]();
60
+ const iterator = source[Symbol.asyncIterator]();
77
61
  while (true) {
78
62
  let step;
79
63
  try {
80
- step = iterator.next();
64
+ step = await iterator.next();
81
65
  }
82
66
  catch (error) {
83
67
  yield handleError(handler, error);
@@ -86,31 +70,41 @@ function xtrySyncIterable(iterable, handler) {
86
70
  if (step.done) {
87
71
  return;
88
72
  }
73
+ // eslint-disable-next-line ts/no-explicit-any
89
74
  yield (0, result_js_1.ok)(step.value);
90
75
  }
91
76
  }
92
77
  return iterate();
93
78
  } // }}}
94
- function xtryAsyncIterable(iterable, handler) {
95
- const generator = typeof iterable === 'function' ? iterable : async () => iterable;
96
- async function* iterate() {
97
- let source;
79
+ function xtrySync(func, handler) {
80
+ try {
81
+ const value = func();
82
+ // eslint-disable-next-line ts/no-unsafe-return, ts/no-explicit-any
83
+ return (0, result_js_1.ok)(value);
84
+ }
85
+ catch (error) {
86
+ return handleError(handler, error);
87
+ }
88
+ } // }}}
89
+ function xtrySyncIterable(iterable, handler) {
90
+ function* iterate() {
91
+ let generator;
98
92
  try {
99
- source = await Promise.resolve(generator());
93
+ generator = typeof iterable === 'function' ? iterable() : iterable;
100
94
  }
101
95
  catch (error) {
102
96
  yield handleError(handler, error);
103
97
  return;
104
98
  }
105
- if (!source || typeof source[Symbol.asyncIterator] !== 'function') {
106
- yield handleError(handler, new TypeError('xtryAsyncIterable expects an AsyncIterable'));
99
+ if (!generator || typeof generator[Symbol.iterator] !== 'function') {
100
+ yield handleError(handler, new TypeError('xtryIterable expects an Iterable'));
107
101
  return;
108
102
  }
109
- const iterator = source[Symbol.asyncIterator]();
103
+ const iterator = generator[Symbol.iterator]();
110
104
  while (true) {
111
105
  let step;
112
106
  try {
113
- step = await iterator.next();
107
+ step = iterator.next();
114
108
  }
115
109
  catch (error) {
116
110
  yield handleError(handler, error);
@@ -119,8 +113,18 @@ function xtryAsyncIterable(iterable, handler) {
119
113
  if (step.done) {
120
114
  return;
121
115
  }
116
+ // eslint-disable-next-line ts/no-explicit-any
122
117
  yield (0, result_js_1.ok)(step.value);
123
118
  }
124
119
  }
125
120
  return iterate();
126
121
  } // }}}
122
+ function handleError(handler, error) {
123
+ if (handler) {
124
+ const newError = handler(error);
125
+ if (newError !== undefined) {
126
+ return (0, result_js_1.err)(newError);
127
+ }
128
+ }
129
+ return (0, result_js_1.err)(error);
130
+ } // }}}
package/lib/cjs/try.d.cts CHANGED
@@ -1,5 +1,5 @@
1
+ import type { MaybePromise, NonPromiseCallback, PromiseCallback } from './utils/types.cjs';
1
2
  import { type Result } from './result.cjs';
2
- import { type MaybePromise, type NonPromiseCallback, type PromiseCallback } from './utils/types.cjs';
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 {};
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /* eslint-disable ts/no-explicit-any */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.xtryifyAsync = xtryifyAsync;
4
5
  exports.xtryifyAsyncIterable = xtryifyAsyncIterable;
@@ -6,21 +7,25 @@ exports.xtryifySync = xtryifySync;
6
7
  exports.xtryifySyncIterable = xtryifySyncIterable;
7
8
  const try_js_1 = require("./try.cjs");
8
9
  function xtryifyAsync(fn) {
10
+ // eslint-disable-next-line func-names
9
11
  return async function (...args) {
10
12
  return (0, try_js_1.xtryAsync)(async () => fn(...args));
11
13
  };
12
14
  }
13
15
  function xtryifyAsyncIterable(fn) {
16
+ // eslint-disable-next-line func-names
14
17
  return function (...args) {
15
18
  return (0, try_js_1.xtryAsyncIterable)(fn(...args));
16
19
  };
17
20
  }
18
21
  function xtryifySync(fn) {
22
+ // eslint-disable-next-line func-names
19
23
  return function (...args) {
20
24
  return (0, try_js_1.xtrySync)(() => fn(...args));
21
25
  };
22
26
  }
23
27
  function xtryifySyncIterable(fn) {
28
+ // eslint-disable-next-line func-names
24
29
  return function (...args) {
25
30
  return (0, try_js_1.xtrySyncIterable)(fn(...args));
26
31
  };
@@ -1,5 +1,23 @@
1
- import { type Result } from './result.cjs';
2
- import { type NotPromise } from './utils/types.cjs';
1
+ import type { Result } from './result.cjs';
2
+ import type { NotPromise } from './utils/types.cjs';
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>;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.map = map;
4
+ exports.match = match;
5
+ exports.unwrap = unwrap;
6
+ exports.unwrapOr = unwrapOr;
7
+ const result_js_1 = require("./result.cjs");
8
+ const stringify_error_js_1 = require("./stringify-error.cjs");
9
+ function map(result, transform) {
10
+ if (result.fails) {
11
+ return result;
12
+ }
13
+ else {
14
+ return (0, result_js_1.ok)(transform(result.value));
15
+ }
16
+ }
17
+ function match(result, handlers) {
18
+ if (result.fails) {
19
+ return handlers.failure(result.error);
20
+ }
21
+ else {
22
+ return handlers.success(result.value);
23
+ }
24
+ }
25
+ function unwrap(result) {
26
+ if (result.fails) {
27
+ if (result.error instanceof Error) {
28
+ throw result.error;
29
+ }
30
+ else {
31
+ throw new Error((0, stringify_error_js_1.stringifyError)(result.error));
32
+ }
33
+ }
34
+ return result.value;
35
+ }
36
+ function unwrapOr(result, fallback) {
37
+ if (result.fails) {
38
+ return fallback;
39
+ }
40
+ else {
41
+ return result.value;
42
+ }
43
+ }
@@ -0,0 +1,8 @@
1
+ import type { Result } from './result.cjs';
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;
@@ -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>;